細說 Javascript 對象篇(一) : 對象的使用和屬性

Javascript 中的一切均可以視爲對象,除了兩個特例:nullundefinedgit

false.toString(); // 'false'
[1, 2, 3].toString(); // '1,2,3'

function Foo(){}
Foo.bar = 1;
Foo.bar; // 1

一個常常容易被誤解的就是數字常量不能視爲對象,實際上數字常量仍然能夠視爲對象。這是由於 Javascript 解析器在解析點操做符時而將其視爲浮點數特徵而犯下的錯誤。github

2.toString(); // raises SyntaxError

實際上,咱們有不少方法可使得數字常量表現爲一個對象。segmentfault

2..toString(); // the second point is correctly recognized
2 .toString(); // note the space left to the dot
(2).toString(); // 2 is evaluated first

對象做爲數據類型

Javascript 中的對象能夠當作哈希表使用,它們主要包含鍵與值的對應關係。
使用 {} 符號來建立一個簡單的對象,這個新建的對象將從 Object.prototype 繼承而來,而且不包含本身定義的屬性。ide

var foo = {}; // a new empty object

// a new object with a 'test' property with value 12
var bar = {test: 12};

訪問對象的屬性

咱們可使用兩種方式來訪問 Javascript 的對象,分別是點操做符 . 和中括號操做符 []lua

var foo = {name: 'kitten'}
foo.name; // kitten
foo['name']; // kitten

var get = 'name';
foo[get]; // kitten

foo.1234; // SyntaxError
foo['1234']; // works

兩種操做符的效果幾乎同樣,惟一的不一樣是中括號操做符容許動態設置屬性並且屬性名能夠有語法錯誤。(上例中的第三個情形已說明)spa

刪除對象的屬性

刪除屬性的惟一方法是使用 delete,將屬性值設置爲 undefinednull 只是移除了與屬性相關的值,並無真正刪除屬性自己。prototype

var obj = {
    bar: 1,
    foo: 2,
    baz: 3
};
obj.bar = undefined;
obj.foo = null;
delete obj.baz;

for(var i in obj) {
    if (obj.hasOwnProperty(i)) {
        console.log(i, '' + obj[i]);
    }
}

上面的輸出 bar undefinedfoo null,只有 baz 真正被刪除。
這裏要說明一點,delete 只能刪除屬性,並不能刪除變量。因此咱們在定義變量時必定要養成寫 var 的好習慣,任什麼時候候,變量必定要使用 var 關鍵字才能聲明。由於若是不寫 var,變量會被誤認給全局對象建立了一個新屬性。設計

請輸入圖片描述

這個例子至關清楚給出了答案,a 爲變量,而 b 只是一個全局對象的屬性而已。code

命名對象的屬性

var test = {
    'case': 'I am a keyword, so I must be notated as a string',
    delete: 'I am a keyword, so me too' // raises SyntaxError
};

對象的屬性能夠用普通字符或字符串來命名。一樣也是因爲 Javascript 解析器的一個錯誤設計,上例中的第二種表示方法在 ECMAScript 5 中將會拋出一個錯誤。
錯誤的緣由是由於 delete 是一個關鍵詞,因此必須使用一個字符串常量來命名來適應老版的 Javascript 解析器。對象

參考

http://bonsaiden.github.io/JavaScript-Garden/#object.general

相關文章
相關標籤/搜索