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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章