《Javascript高级程序设计》读书笔记(一)

一、Javascript是什么

Javascript实现由以下3个不同的部分组成:

  • 核心(ECMAScript)
  • 文档对象模型(DOM)
  • 浏览器对象模型(BOM)

ECMASript是一个重要的标准,它并不与任何具体浏览器相绑定。Web浏览器对于ECMAScript来说是一个宿主环境,在其他环境(如Macromedia用在Flash中的ActionScript)都有ECMAScript的实现。

二、ECMAScript基础

1、在ECMAScript中,变量可以存放两种类型的值,即原始值引用值。原始值存储在栈(stack)中,引用值存储在堆(heap)中,存储在变量处的是一个指针。

2、ECMAScript有5种原始类型,即Undefined、Null、Boolean、Number和String。

  • Undefined:该类型只有一个值,即undefined,当声明的变量未初始化时,变量的默认值是undefined
  • Null:值undefined实际是从null派生来的,null用于表示尚未存在的对象。
  • Boolean:有两个值,即true或false。
  • Number:Number类型有几个特殊值,如Number.MAX_VALUE、Number.POSITIVE_INFINITY、NaN等。NaN表示非数(Not a Number)。NaN一般发生在类型(String等)转换为数值失败时,判断一个值是否是NaN可使用isNaN()函数。
  • String:在许多语言中,字符串被看作引用类型,而ECMAScript打破了这一传统。String类型存储的是Unicode字符。

3、引用类型

  • Object类:ECMAScript中的所有类都从Object类继承而来,Object类中的所有属性和方法都会出现在其他类中。
    Object类具有下列属性:
    ◇Constructor——创建对象的函数(构造函数)的引用。Object类该属性指向的Object()函数
    ◇Prototype——对象的对象原型的引用。对于所有的类,它默认返回Object对象的一个实例。
    Object类还有几个方法:
    ◇HasOwnProperty(property)——判断对象是否有某个特定的属性,property为属性名
    ◇IsPrototypeOf(object)——判断该对象是否为另一个对象的原型
    ◇PropertyIsEnumerable(property)——判断给定的属性是否可以用for...in语句进行枚举
    ◇ToString()——返回对象的原始字符串表示
    ◇ValueOf——返回最适合该对象的原始值。对于许多类,该方法返回的值都与ToString()的返回值相同。
  • Boolean类:Boolean类是Boolean原始类型的引用类型。
  • Number类:Number类是Number原始类型的引用类型。
    Number类有几个与格式化数值相关的方法:
    ◇toFixed()——返回具有指定位数小数的数字的字符串表示。
    ◇toExponential()——返回科学记数法表示的数字的字符串表示。
    ◇toPrecision()——根据最有意义的形式来返回数字的预定或指数形式。
    以上这三个方法都会进行舍入操作。
  • String类:String类是String原始类型的对象表示法。
    String类具有大量的方法:
    ◇charAt()——返回指定位置的字符
    ◇charCodeAt()——返回指定位置字符的ASCII码
    ◇concat()——连接字符串,不过一般使用加号(+)连接字符串更多
    ◇indexOf()——从开头位置检索子串的索引
    ◇lastIndexOf()——从结尾位置开始检索子串的索引
    ◇localeCompare()——比较字符串
    ◇slice()和substring()——获取指定的子字符串
    ◇toLowerCase()和toLocaleLowerCase()——小写转换
    ◇toUpperCase()和toLocaleUpperCase()——大写转换
    String类的所有属性和方法都可应用于String原始值上,因为它们是伪对象。其他引用类型也一样。

4、运算符

  • 一元运算符(delete):删除之前定义的对象属性或方法的引用,delete运算符不能删除开发者未定义的属性和方法,如不能删除原始的ECMAScript的方法toString()
  • 一元运算符(void):使任何值都返回undefined。该运算符通常用于避免输出不应该输出的值。如
    <a href='javascript:void(window.open('about.blank'))">click me</a>
    这使window.open调用返回undefined,它不是有效的值,不会显示在浏览器窗口中。记住,没有返回值的函数真正返回的都是undefined。
  • 所有整数字面量都默认存储为有符号整数,只有用ECMAScript的位运算符才能创建无符号整数。
  • 逻辑运算符(AND):由双和号(&&)表示,逻辑AND运算并不一定返回Boolean值
    ◇如果一个运算数是对象,另一个是Boolean值,返回该对象
    如果两个运算数都是对象,返回第二个对象
    ◇如果某个运算数是null,返回null
    ◇如果某个运算数是NaN,返回NaN
    ◇如果某个运算数是undefined,发生错误
  • 逻辑运算符(OR):由双竖线(||)表示,逻辑OR运算并不一定返回Boolean值
    ◇如果一个运算数是对象,另一个是Boolean值,返回该对象
    如果两个运算数都是对象,返回第一个对象
    ◇如果某个运算数是null,返回null
    ◇如果某个运算数是NaN,返回NaN
    ◇如果某个运算数是undefined,发生错误
  • 无论何时比较一个数字和一个字符串,ECMAScript都会把字符串转换成数字。如果字符串不能转换成数字,会返回NaN。根据规则,任何包含NaN的关系运算都要返回false。
  • 如查一个运算数是Boolean值 ,在检查相等性之前,把它转换成数字值。false转换成0,true转换成1。
  • 如果两个运算符都是对象,比较相等性实际是比较它们的引用值。
  • 全等号(===)和非全等号(!==)所做的和等号(==)和非等号(!=)相同,只是它们在检查相等性前,不执行类型转换。

5、语句

  • for...in用于枚举对象的属性,propertyIsEnumerable()是ECMAScript中专门用于说明属性是否可以用for...in语句访问的方法。 下面语句用于显示BOM window对象的所有属性:
    for (sProp in window) {
         alert(sProp);
    }

6、函数

  • 如果函数无明确的返回值,或调用了没有参数的return语句,那么它真正返回的值 是undefined。
  • ECMAScript中的函数不能重载。
  • ECMAScript的函数可以接受任意个数的参数。使用特殊对象arguments,无需明确命名参数,就可以重写函数。利用arguments对象判断传递给函数的参数个数,可模拟函数重载,如:
    function doAdd() {
         if (arguments.length == 1) {
              alert(arguments[0] + 10);
         } else if (arguments.length == 2) {
              alert(arguments[0] + arguments[1]);
         }
    }

    doAdd(10);                // 输出“20”
    doAdd(30, 20);          // 输出“50”
  • ECMAScript的函数只不过是一种引用类型
  • 函数名只是指向函数的引用变量,可以把函数作为变量传递给另一个函数使用
  • Function对象的valueOf方法和toString方法都返回函数的源代码

你可能感兴趣的:(JavaScript)