基本特性

image source: Amazon

主要分為物件型別與原始型別。

  • Primitive Type

    • 數值
    • 字串
    • 布林
    • null
    • undefined
  • Object Type

兩者最大差異就是可否擴增屬性

區別物件、變數、型別

  • 物件

    • 具回收概念
    • 記憶體中的資料
    • 僅存於執行時期
  • 變數

    • 沒有回收概念
    • 儲存物件的記憶體位址 (指標)
    • 開發時期宣告 (var)
  • 型別

    • 表示物件的種類
    • 不同型別有不同的預設屬性和方法

物件與屬性之間又有什麼關係 ? 屬性可以是物件所以可以無限繼續擴增下去。

重複宣告變數 ?

var x = 1;
console.log(x);    // 1
var x;
console.log(x);    // ?

宣告變數一定要使用 var ?

var x = 100;
console.log(x);    // 100
console.log(window.x);    // 100
y = 200;
console.log(y);    // 200
console.log(window.y);    // 200

訪問、宣告、刪除屬性

var model = {
  name: 'wilson',
  phone: '+88915211631',
  address: 'Taipei, Taiwan'
};

address = 'address';  // 注意! 這裡沒有使用 var 宣告, 將被當作 window 下的一個屬性

console.log(model.name);  // wilson
console.log(model['phone']);  // +88915211631
console.log(model[address]);  // Taipei, Taiwan
console.log(address);  // address

delete address;  // 刪除 address 屬性

console.log(address);  // address is not defined

變數 (var) 無法刪除, 但是可以刪除屬性。

原始型別包裹物件 (不良部分)

JavaScript 原始型別實作繼承原始型別包裹物件

Number

String

Boolean

由於原始型別無法自由擴增屬性,可以透過原始型別包裹物件自由擴增屬性與方法。

var price = 1000;
typeof(price);    // number

price.ex = 'ex';    // 擴增屬性
console.log(price.ex);    // undefined 擴增失敗

Number.prototype.ex = 'ex';    // 在原型包裹物件擴增 ex 屬性

console.log(price.ex);    // ex 擴增成功. 實務上不建議使用該種方式擴增

results matching ""

    No results matching ""