變量類型前端
原型與原型鏈(繼承)數組
做用域和閉包安全
異步閉包
ES6/7新標準的考察架構
JavaScript 是一種弱類型腳本語言,所謂弱類型指的是定義變量時,不須要什麼類型,在程序運行過程當中會自動判斷類型。異步
最新的 ECMAScript 標準定義了8種數據類型:函數
七種基本數據類型:this
true
和 false
.null
與Null
、NULL
或變體徹底不一樣。42
或者 3.14159
。注意:原始類型不包含 Object,因此原始類型有七種。spa
typeof
類型判斷typeof xxx
獲得的值有如下幾種類型:undefined
、boolean
、number
、string
、object
、function
、symbol
,比較簡單,再也不一一演示了。這裏須要注意的有三點:線程
typeof null
結果是 object
,實際這是 typeof
的一個bug,null 是原始值,非引用類型。typeof [1, 2]
結果是 object
,結果中沒有 array
這一項,引用類型除了 function
其餘的所有都是 object
。typeof Symbol()
用 typeof
獲取 symbol
類型的值獲得的是 symbol
,一種實例是惟一且不可改變的數據類型,這是 ES6 新增的知識點。instanceof
繼承判斷用於實例和構造函數的對應。例如判斷一個變量是不是數組,使用typeof
沒法判斷,但可使用[1, 2] instanceof Array
來判斷。由於,[1, 2]
是數組,它的構造函數就是Array
。同理:
function Dog(name) { this.name = name } var hashiqi = new Dog('哈士奇') console.log(hashiqi instanceof Dog) `
除了原始類型,ES 還有引用類型,上文提到的 typeof
識別出來的類型中,只有 object
和 function
是引用類型,其餘都是值類型。注意:Symbol
也是值類型,實例的惟一標識。
var a = 1; var b = 2; b = a; a++; b++; console.log('a',a); console.log('b',b); // 打印結果: a 2 b 2
上述示例中,a , b 爲值類型,在a賦值給b的時候,b的值修改成了1,a++,與b++以後,a、b成爲了2。
var a = {name:'張三',age:4}; var b = {name:''王五,age: 12}; a = b; a.age++; console.log('a', a); console.log('b', b); // 打印結果 a {name:'王五',age: 13} b {name:'王五',age: 13}
上述示例中,a , b爲引用類型,在b賦值給a的時候,a的地址指向了b,因此a: {name:'王五',age: 12},a的年齡加上後就變爲了12而非5。
這就是由於Number
類型的a
是按值傳遞的,而Object
類型的b
是按引用傳遞的。
如圖所示:
num1 與 str1 是值類型,obj 是引用類型,從圖來看應該就知道值類型與引用類型賦值時的區別了,而引用類型採用這種方式也大大節約了內存,畢竟一大大的對象過多會致使這樣的問題。