现在的位置: 首页 > 综合 > 正文

《javascript 高级程序设计》笔记

2012年10月09日 ⁄ 综合 ⁄ 共 6231字 ⁄ 字号 评论关闭

1. type(null)==object  ---------->实际上是javascript最初实现的一个错误,被ECMAScript沿用了。现在认为null是对象的占位符,从而解决了这一矛盾,但从技术上来说,它仍是原始值。
2. Undefined 类型只有一个值,即 undefind 。当声明的变量未初始化时,该变量的默认值是 undefined 。
3. Null 类型,只有一个专用值 null ,即它的字面量,值 undefined 实际上是从值 null 派生来的,所以 ECMAScript 把它们定义为相等,alert(null==undefined);//true
4. Number 类型,既可以表示32位的整数,也可以表示64位的浮点数。
5. 浮点字面量的有趣之处:用它进行计算前,真正存储的是字符串。
6. 特殊值:Number.MAX_VALUE 和 Number.MIN_VALUE,超出这个边界的数不再具有数字值,生成的结果不能再用于其他计算,分别被赋予值:Number.POSITIVE_INFINITY 和 Number.NEGERTIVE_INFINITY
7. 有专门的值表示无穷大,即 Infinity (等于Number.POSITIVE_INFINITY ),-Infinity (等于 Number.NEGERTIVE_INFINITY)
8. NaN :表示非数(Not a number),一般在类型转换失败时,注意:其与自身不相等:alert(NaN==NaN);//false
9. toString(TYPE,[基数])、parseInt(0XA返回10)、parseFloat(只能以十进制表示,忽略前导0,0XA 返回0) ,第一个字符无效(不是数字或十六进制)就返回NaN
10. var o = new object; // var o = new object();也可以,但是为了避免混乱,最好使用括号。
11. Object 类属性:Constructor -----对创建对象的函数的引用,指向原始的object()函数
                   Prototype  ------对该对象的对象的原型的引用,它默认返回Object对象的一个实例。
12. Boolean 类:是Boolean 原始类型的引用类型。-------> var oFalseObject = new Bloolean(false); var bResult = oFalseObject && true; //bResult等于true , 注意与Boolean原始值的区别,Boolean对象都被转化为true               
13. 没有返回值的函数的真正返回的都是 undefined
14. 一元加法/减法:对于数字无本质影响;但是对于字符串,会把字符串转化为数字,但是:只对于以0X开头的才转化为10进制,以0开头的不转为八进制
15. 所有整数字面量,默认存储为有符号整数,只有用ECMAScript的位运算符才能创建无符号整数。
16. Undefined 类型进行非运算,发生错误
17. 逻辑AND:
            一个运算数是对象,一个是Blooean型----------> 返回该对象
            两个都是对象 ------------------------------> 返回第二个对象
            某个是null --------------------------------> 返回null
            某个是NaN  --------------------------------> 返回NaN
            某个是undefined  --------------------------> 发生错误
            
18. 逻辑OR:
            一个运算数是对象,一个是Blooean型----------> 返回该对象
            两个都是对象 ------------------------------> 返回第一个对象
            某个是null --------------------------------> 返回null
            某个是NaN  --------------------------------> 返回NaN
            某个是undefined  --------------------------> 发生错误
            
19.乘法:    
        某个是NaN ----------------> 结果为 NaN
        Infinity * 0  ------------> 结果为 NaN
        Infinity * n(非0的数) ----> 结果为 Infinity / -Infinity
        Infinity * Infinity  -----> 结果为 Infinity
        
20.除法:        
        某个是NaN ----------------> 结果为 NaN
        n / 0    -----------------> 结果为 NaN
        Infinity / n -------------> 结果为 Infinity
        Infinity / Infinity  -----> 结果为 NaN        
            
21.取模:
        除数为无穷大的数 ---------> 结果为被除数
        其余为 NaN 或者正常运算
        
22.加法:
        Infinity 加(-Infinity) ------> NaN
        +0 加 -0 --------------------> +0
        -0 加 -0 --------------------> -0
        +0 加 +0 --------------------> +0
        其中有字符串 ----------------> 转化其他类型为字符串在串接起来

22.减法:
        Infinity  减(-Infinity) ------> Infinity
        -Infinity 减(-Infinity) -----> NaN
        -Infinity 减 Infinity -------> -Infinity
        Infinity  减 Infinity -------> NaN
        +0 减 -0 --------------------> +0
        -0 减 -0 --------------------> -0
        +0 减 +0 --------------------> +0
        某个操作数不是数字 ----------> NaN        
            
注意:任何包含NaN的关系运算都返回false

23. 等号和非等号
在 ECMAScript 中,等号由双等号(==)表示,当且仅当两个运算数相等时,它返回 true。非等号由感叹号加等号(!=)表示,当且仅当两个运算数不相等时,它返回 true。为确定两个运算数是否相等,这两个运算符都会进行类型转换。
执行类型转换的规则如下:
    如果一个运算数是 Boolean 值,在检查相等性之前,把它转换成数字值。false 转换成 0,true 为 1。
    如果一个运算数是字符串,另一个是数字,在检查相等性之前,要尝试把字符串转换成数字。
    如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串。
    如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字。

在比较时,该运算符还遵守下列规则:
    值 null 和 undefined 相等。
    在检查相等性时,不能把 null 和 undefined 转换成其他值。
    如果某个运算数是 NaN,等号将返回 false,非等号将返回 true。
    如果两个运算数都是对象,那么比较的是它们的引用值。如果两个运算数指向同一对象,那么等号返回 true,否则两个运算数不等。

重要提示:即使两个数都是 NaN,等号仍然返回 false,因为根据规则,NaN 不等于 NaN。    
表达式                 值
null == undefined     true
"NaN" == NaN         false
5 == NaN             false
NaN == NaN             false
NaN != NaN             true
false == 0             true
true == 1             true
true == 2             false
undefined == 0         false
null == 0             false
"5" == 5             true

24.    label:    
    如: start:var iNum = 10;
    break 与 continue 都可以与带有标签的语句联合使用,返回代码中的特定位置;break start;

25. with 语句:用于设置代码在特定对象中的作用域。    
    它的语法:
    with (expression) statement
    例如:
    var sMessage = "hello";
    with(sMessage) {
      alert(toUpperCase());    //输出 "HELLO"
    }

    在这个例子中,with 语句用于字符串,所以在调用 toUpperCase() 方法时,解释程序将检查该方法是否是本地函数。如果不是,它将检查伪对象 sMessage,看它是否为该对象的方法。然后,alert 输出 "HELLO",因为解释程序找到了字符串 "hello" 的 toUpperCase() 方法。
    提示:with 语句是运行缓慢的代码块,尤其是在已设置了属性值时。大多数情况下,如果可能,最好避免使用它。            
                
26. 无重载:ECMAScript 中的函数不能重载,但是可以用相同的名字在同一个作用域中定义两个函数,而不会发生错误,但真正使用的是最后一个函数,后面的函数的定义覆盖了前面的函数定义。
27. arguments 对象:在函数代码中使用特殊对象 arguments 对象,开发者无需明确指出参数名,就可以访问他们。ECMAScript 不会验证传递给函数的参数的个数是否等于函数定义的参数个数,开发者定义的函数都可以接受任意个数的参数。
28. Function 类:var function_name = new Function(argument1,argument2...argumentN,function_body);    
             例:var func_add = new Function(argument1,argument2,"alert(argument1+argument2)");    
             尽管可以这样创建函数,但是这样比传统方式慢的多,最好不这样做,不过,所有的函数都应看做 Function 类的实例。
29. 闭包(closure):函数使用函数外定义的变量。
30. 本地对象:ECMA-262 把本地对象(native object)定义为“独立于宿主环境的 ECMAScript 实现提供的对象”。简单来说,本地对象就是 ECMA-262 定义的类(引用类型)。它们包括: Object、Function、Array、String、Boolean、Number、Date、RegExp、Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError等
31. 内置对象:ECMA-262 把内置对象(built-in object)定义为“由 ECMAScript 实现提供的、独立于宿主环境的所有对象,在 ECMAScript 程序开始执行时出现”。这意味着开发者不必明确实例化内置对象,它已被实例化了。ECMA-262 只定义了两个内置对象,即 Global 和 Math (它们也是本地对象,根据定义,每个内置对象都是本地对象,Global对象实际上不存在,undefined、NaN、Infinity都是Global对象的属性,所有本地对象的构造函数也都是Global对象的属性)。
32. 宿主对象:所有非本地对象都是宿主对象(host object),即由 ECMAScript 实现的宿主环境提供的对象。所有 BOM 和 DOM 对象都是宿主对象。
33. ECMAScript 只有公用作用域:ECMAScript 中的所有对象的所有属性和方法都是公用的。由于缺少私有作用域,开发者确定了一个规约,说明哪些属性和方法应该被看做私有的。这种规约规定在属性前后加下划线:obj._color_ = "blue";注意,下划线并不改变属性是公用属性的事实,它只是告诉其他开发者,应该把该属性看作私有的。
34. 函数是对象,对象可以有属性和方法。例如:
        function sayHello()
        {
          alert("hello");
        }

        sayHello.alternate = function() // alternate() 是 sayHello() 公用作用域中的方法
        {
          alert("hi");
        }

        sayHello();        //输出 "hello"
        sayHello.alternate();    //输出 "hi"

35. 关键字 this:它用在对象的方法中。关键字 this 总是指向调用该方法的对象。        
36. 极晚绑定(Very Late Binding:能够在对象实例化后再定义它的方法。例如:
        var o = new Object();
        Object.prototype.sayHi = function ()
        {
          alert("hi");
        };
        o.sayHi();
                    
37. 继承方式:
            * 对象冒充: 构造函数使用 this 关键字给所有属性和方法赋值(即采用类声明的构造函数方式),可使 ClassA 构造函数成为 ClassB 的方法,然后调用它。ClassB 就会收到 ClassA 的构造函数中定义的属性和方法。
                        ECMAScript 的第三版为 Function 对象加入了两个方法,即 call() 和 apply():
                        * call()方法: 它的第一个参数用作 this 的对象。其他参数都直接传递给函数自身.
                        * apply()方法:apply() 方法有两个参数,用作 this 的对象和要传递给函数的参数的数组.
            * 原型链(prototype chaining): 实际上是把对象的所有方法复制给类的prototype对象。ClassB.prototype = new ClassA();
            * 混合方式:
            * 其他(库):zInherit 库 、xbObjectS 库
            
38. getElementById();如果给定的ID匹配某个元素的name特性,IE6.0还会返回这个元素,这是一个bug,必须小心!    
            
           

抱歉!评论已关闭.