ES基礎知識點——(類型篇)

  • 變量類型前端

    • JS的類型分類和判斷
    • 值得類型和引用
  • 原型與原型鏈(繼承)數組

    • 原型和原型鏈的定義
    • 繼承寫法
  • 做用域和閉包安全

    • 執行上下文
    • this
    • 閉包是什麼
  • 異步閉包

    • 同步VS異步
    • 異步和單線程
    • 前端異步的場景
  • ES6/7新標準的考察架構

    • 箭頭函數
    • Module
    • Class
    • Set和Map/WeakSet和WeakMapuuu
    • Promise

變量類型

變量分類

JavaScript 是一種弱類型腳本語言,所謂弱類型指的是定義變量時,不須要什麼類型,在程序運行過程當中會自動判斷類型。異步

最新的 ECMAScript 標準定義了8種數據類型:函數

  • 七種基本數據類型:this

    • Boolean,有2個值分別是:true 和 false.
    • null , 一個代表 null 值的特殊關鍵字。 JavaScript 是大小寫敏感的,所以nullNullNULL或變體徹底不一樣。
    • undefined ,和 null 同樣是一個特殊的關鍵字,undefined 表示變量未定義時的屬性。
    • Number(數字),整數或浮點數,例如: 42 或者 3.14159
    • BigInt (任意精度的整數) ,能夠安全地存儲和操做大整數,甚至能夠超過數字的安全整數限制。
    • String(字符串),字符串是一串表示文本值的字符序列,例如:"Howdy" 。
    • Symbol(表明) ( 在 ECMAScript 6 中新添加的類型).。一種實例是惟一且不可改變的數據類型。
    • Object(對象)

注意:原始類型不包含 Object,因此原始類型有七種。spa

變量判斷

typeof類型判斷

typeof xxx 獲得的值有如下幾種類型:undefinedbooleannumberstringobjectfunctionsymbol,比較簡單,再也不一一演示了。這裏須要注意的有三點:線程

  • 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 識別出來的類型中,只有 objectfunction 是引用類型,其餘都是值類型。注意: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是按引用傳遞的。

如圖所示:
i&o進銷存管理系統架構圖.png

num1 與 str1 是值類型,obj 是引用類型,從圖來看應該就知道值類型與引用類型賦值時的區別了,而引用類型採用這種方式也大大節約了內存,畢竟一大大的對象過多會致使這樣的問題。

相關文章
相關標籤/搜索