JavaScript权威指南笔记 - 3

1. var a1 = [,,]; 0 in a1;// ->true(错误,应该是false!!!!!!!!!!!!!!!!!!!!!)
    var a2 = new Array(2); 0 in a1;// ->false

2. 每个Array对象都有length属性,正是这个属性使Array对象与众不同。

3. 一个数组的元素的index永远不会大于或等于数组的length,如a = [1, 2, 3];
a). a[100] = 100; 执行后a.length -> 101,只不过从3 - 100都是null。
b). a.length = 1; 执行后a ->[1], 后面的都被remove了。

4. Array.isArray(x); 用于判断给出的参数x是否是Array。

5. this:作为method调用(o.f())时,是调用对象。作为function调用时,是golbal object,但在strict mode中,在function调用中是undefined。

6. 在function中用arguments来得到传到方法里的所有参数,改变arguments中的值也会改变原方法的值。

7. function的length属性是指其声明时期待的参数的个数。

8. 使用Function构造器同样可以创建方法:var f = new function("x", "y", "return x*y;");
a). 允许JS在运行时动态的创建和编译。
b). 最重要的区别是Function创建的方法不会有语义化的作用域,它们被视为最高层的方法来运行。
c). 尽量少用!

9. 所有的方法都是可以被调用的,但不是所有可以被调用的对象都是方法,如:window.alert(),document.getElementById(..),RegExp()。

10. F.prototype.constructor == F//->true

11. 用类创建实例后,若类的prototype值发生变化,那么所有的引用也会发生变化,所有的实例都是继承同一个prototype。

12. 给对象做加量:String.prototype.trim = function(){}。甚至可以给Object做加量,但是不推荐,因为这些加量会在for...in...循环中被遍历。

13. 不用typeof来判断类型:
switch(x.constructor){
   case Number:
   case String:
   case Date:
}

14. x.constructor若是多重继承,且非顶层类没有自己的constructor,那么返回再上面的constructor,直到找到。

15. //来创建正则表达式,类似""创建string。

16. 正则表达式中特殊意义的字符:~$.*+?=!:|/\()[]{},不确定是否应该转义时,转义就没错。

17. /a*/能匹配"bbb",因为有0个a。

18. 标签://i //g  //m

19. new RegExp("\\d{5}") 等价于 /\d{5}/,在前者中\需要转义。

20. const x = 123;//x -> 123
const x = 456;//x -> 123
x = 456;//x -> 123
var x = 456;//x -> 123
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章