天天看點

JavaScript中 對象取值 . 和 [ ] 的差別

1. 相同點

[ ] 運算符 和 點運算符 都可以擷取到 obj 的屬性值

2. 差別

2.1 [ ] 運算符可以使用字元串變量的内容作為屬性名,點運算符不能;

var data = {
  name: 'haha',
  age: 18,
  3: '男'
}
var key = 'name'
console.log(data.key) // undefined
console.log(data[key]) // haha      

2.2 [ ] 運算符可以用純數字作為屬性名,點運算符不能;

var data = {
  name: 'haha',
  age: 18,
  3: '男'
}
console.log(data[3]) // 男
console.log(data.3) // Uncaught SyntaxError: missing ) after argument list      

2.3 [ ] 可以動态通路的屬性名,可以在程式運作時建立和修改屬性,點操作符就不行!

( 即 [ ] 可以動态設定和擷取)

var customer = {};
    var addr = ['武漢','上海','南京','深圳'];
    for(i = 0; i < 4; i++){
       customer["address" + i] = addr[i];
    }
    console.log(customer); // {address0: "武漢", address1: "上海", address2: "南京", address3: "深圳"}
    var str = "";
    for(i = 0; i < 4; i++){
        str += customer["address" + i] + "\t";
    }
    console.log(str); // 武漢 上海  南京  深圳      

2.4 如果屬性名中包含會導緻文法錯誤的字元,或者屬性名是關鍵字或者保留字,也可以使用 [ ] 表示法

(屬性名是關鍵字或者保留字,都可以點文法不嚴密,不報錯,寫法提示有錯);

總結:對于一般的常量就使用 . 運算符,對于其他的使用 [ ] 運算符。

3. 關于 JavaScript 對象拓展

JavaScript 中的所有事物都是對象:字元串、數值、數組、函數...

此外,JavaScript 允許自定義對象。

所有事物都是對象

  • 布爾型可以是一個對象。
  • 數字型可以是一個對象。
  • 字元串也可以是一個對象。
  • 日期是一個對象。
  • 數學和正規表達式也是對象。
  • 數組是一個對象。
  • 甚至函數也可以是對象。

繼續閱讀