▓▓▓▓▓▓ 大致介紹 JavaScript的簡單數據類型包括:Undefined、Null、Boolean、Number、String。JavaScript中這五種基本數據類型不是對象,其他所有值都是對象。其中還有一些對象子類型,通常被稱為內置對象(引用類型) 1、Object 2、Array 3 ...
▓▓▓▓▓▓ 大致介紹
JavaScript的簡單數據類型包括:Undefined、Null、Boolean、Number、String。JavaScript中這五種基本數據類型不是對象,其他所有值都是對象。其中還有一些對象子類型,通常被稱為內置對象(引用類型)
1、Object
2、Array
3、Date
4、RegExp
5、Function
6、Boolean
7、Number
8、String
▓▓▓▓▓▓ 創建對象的三種方法
創建對象有三種方法:
1、對象字面量,即用{}生成,一個對象字面量就是包圍在一對花括弧中的零個或多個“名/值”對
2、構造函數,利用Object()構造函數生成
3、Object().create方法生成
註意:推薦第一種寫法,第三種方法多用在繼承的場合
var myobj = { key : value; } var myobj = new Object() myobj.key = value; var myobj = Object.create(Object.prototype); myobj.key = value;
▓▓▓▓▓▓ 引用
對象通過引用來傳遞,它們永遠不會被覆制。簡單來說就是多個變數指向同一個對象,那麼他們都是這個對象的引用,多個變數它們都指向同一個記憶體地址,如果通過一個變數修改了指向的對象,那麼所有指向這個對象的變數都會發生改變
var o = { name : 'laowang' }; var b = o; b.name = 'liu'; console.log(o.name); //liu
▓▓▓▓▓▓ 屬性操作
讀取屬性
讀取對象的屬性有兩種方法,一種是用點運算符,另一種是用方括弧運算符
var o = { name : 'laowang' }; o.name; //'laowang' o['name']; //'laowang'
註意:點操作符要求屬性名滿足標示符的命名規範,而方括弧運算符的方式可以接受任何字元串作為屬性名
例如:
var o = { name : 'laowang', 'super-f' : 2 }; console.log(o.super-f); //報錯 console.log(o['super-f']); //2
可以在方括弧中括住一個字元串表達式的方式來訪問屬性
var o = { name1 : 'laowang', name2 : 'liaomou', name3 : 'PDD' }; for(var i=1;i<4;i++){ console.log(o['name'+i]);//laowang liaomou PDD };
在對象中,屬性名永遠都是字元串,如果你使用String以外的其他值作為屬性名,那他首先會被轉換為一個字元串。即使是數字也不例外
var myObject = {}; myObject[true] = 'foo'; myObject[2] = 't'; myObject['true']; //"foo" myObject['2']; //"t"
寫入屬性
可以用點運算符和方括弧運算符寫入屬性
var myObject = { name : 'laowang' }; //兩種方法的效果是一樣的 var myObject = {}; myObject.name = 'laowang'; myObject[name] = 'laowang';
查看屬性
可以使用Object.keys()方法
var myObject = { name : 'laowang', address : '西青區' }; console.log(Object.keys(myObject)); //["name", "address"]
刪除屬性
刪除屬性可以用delete運算符,它不會觸及原型鏈中的任何對象,刪除對象的屬性可能會讓來自原型鏈中的屬性透現出來
var myObject = { name : 'laowang', address : 'xi' }; var anotherObject = Object.create(myObject); anotherObject.name = 'xiaoma'; console.log(anotherObject.name); delete anotherObject.name; console.log(anotherObject.name); //laowang 刪除了自己本身的屬性,透現出來了原型的屬性 delete anotherObject.address; console.log(anotherObject.address); //xi 不會刪除原型中的屬性
檢測屬性是否存在
我們要檢測一個屬性是否在對象中,可以使用in操作符
var myObject = { name : 'laowang', address : 'xi' }; console.log('name' in myObject); //true console.log('sex'in myObject); //false
註意:in操作符會檢查屬性是否在對象及原型鏈中,如果要檢測一個屬性是否在對象中,不涉及原型鏈,可以使用hasOwnProperty()
var myObject = { name : 'laowang', address : 'xi' }; var anotherObject = Object.create(myObject); console.log('name' in anotherObject); //true console.log(anotherObject.hasOwnProperty('name')); //false
遍歷屬性
有時需要遍歷一個對象的所有屬性,可以使用for..in語句
var myObject = { name : 'laowang', address : 'xi', sex : 'man' }; for(var i in myObject){ console.log(myObject[i]); //laowang xi man };
註意:for..in語句會遍歷對象的可枚舉屬性,包括原型鏈
例如:
var myObject = { name : 'laowang', address : 'xi', sex : 'man' }; //讓myObject的name屬性變得不可枚舉 Object.defineProperty( myObject, 'name', {enumerable:false} ); for(var i in myObject){ console.log(myObject[i]); //xi man };
如果想要過濾掉那些你不想要的值,最為常用的過濾器是hasOwnProperty方法,以及使用typeof來排除函數
參考資料:
阮一峰JavaScript標準參考教程(alpha)-語法-對象
JavaScript語言精粹第三章
你不知道的JavaScript(上捲)第三章
JavaScript高級程式設計(第三版)第五章 Object類型