04_javascript對象

js對象:

爲什麼會有對象:

基本數據類型都是單一的值"hello" 123 true,值和值之間沒有任何的聯繫。
// 在JS中來表示一個人的信息(name gender age):
var name = "孫悟空";
var gender = "男";
var age = 18;
如果使用基本數據類型的數據,我們所創建的變量都是獨立,不能成爲一個整體。
對象屬於一種複合的數據類型,在對象中可以保存多個不同數據類型的屬性。

對象的分類:

1>內建對象
	由ES標準中定義的對象,在任何的ES的實現中都可以使用;
	比如:Math String Number Boolean Function Object....
2>宿主對象
	由JS的運行環境提供的對象,目前來講主要指由瀏覽器提供的對象
	比如 BOM DOM
3>自定義對象
	由開發人員自己創建的對象

對象的創建及對象屬性的增刪改查:

創建對象

使用new關鍵字調用的函數,是構造函數constructor;
構造函數是專門用來創建對象的函數;
使用typeof檢查一個對象時,會返回object
var obj = new Object();

在對象中保存的值稱爲屬性

向對象添加屬性

語法:對象.屬性名 = 屬性值;
var obj = new Object();
// 向obj中添加一個name屬性
obj.name = "孫悟空";
// 向obj中添加一個gender屬性
obj.gender = "男";
// 向obj中添加一個age屬性
obj.age = 18;

讀取對象中的屬性

語法:對象.屬性名
// 如果讀取對象中沒有的屬性,不會報錯而是會返回undefined
console.log(obj.gender);
console.log(obj.hello);

修改對象的屬性值

語法:對象.屬性名 = 新值
obj.name = "tom";

刪除對象的屬性

語法:delete 對象.屬性名
delete obj.name;

對象字面量:

//使用對象字面量來創建一個對象
var obj = {};
//console.log(typeof obj);
obj.name = "孫悟空";
//console.log(obj.name);

使用對象字面量,可以在創建對象時,直接指定對象中的屬性,
語法:{屬性名:屬性值,屬性名:屬性值....}

對象字面量的屬性名可以加引號也可以不加,建議不加,
**如果要使用一些特殊的名字,則必須加引號**。

屬性名和屬性值是一組一組的名值對結構,
名和值之間使用:連接,多個名值對之間使用,隔開;
如果一個屬性之後沒有其他的屬性了,就不要寫。

var obj2 = {
	name:"豬八戒",
	age:13,
	gender:"男",
	test:{name:"沙僧"}
};
console.log(obj2.test);

屬性名和屬性值:

屬性名:

對象的屬性名不強制要求遵守標識符的規範;
什麼亂七八糟的名字都可以使用;
但是我們使用是還是儘量按照標識符的規範去做。

如果要使用特殊的屬性名,不能採用.的方式來操作,需要使用另一種方式:
語法:對象["屬性名"] = 屬性值
讀取時也需要採用這種方式,使用[]這種形式去操作屬性,更加的靈活,
在[]中可以直接傳遞一個變量,這樣變量值是多少就會讀取那個屬性
obj["123"] = 789;
obj["nihao"] = "你好";
var n = "nihao";
console.log(obj["123"]); 

屬性值

JS對象的屬性值,可以是任意的數據類型;甚至也可以是一個對象

in 運算符

通過該運算符可以檢查一個對象中是否含有指定的屬性;如果有則返回true,沒有則返回false。

語法:	"屬性名" in 對象
//檢查obj中是否含有test2屬性
console.log("test2" in obj);

基本數據類型和引用數據類型:

JS中的**變量都是保存到棧內存中**的,
**基本數據類型的值直接在棧內存中存儲**,
**值與值之間是獨立存在,修改一個變量不會影響其他的變量。**

**對象是保存到堆內存中的**,每創建一個新的對象,就會在堆內存中開闢出一個新的空間,
而變量保存的是對象的內存地址(對象的引用),**如果兩個變量保存的是同一個對象引用,
當一個通過一個變量修改屬性時,另一個也會受到影響**

var a = 123;
var b = a;
a++;
console.log("a = "+a); //124
console.log("b = "+b) ;//123 

var obj = new Object();
obj.name = "孫悟空"; 
var obj2 = obj;
// 修改obj的name屬性
obj.name = "豬八戒";
console.log(obj.name); //"豬八戒"
console.log(obj2.name); //"豬八戒"*/
// 設置obj2爲null
// 相當於obj2與先前指向的內存地址斷開連接
obj2 = null;
console.log(obj); //{name: "豬八戒"}
console.log(obj2); //null

/*
* 當比較兩個基本數據類型的值時,就是比較值。
* 而比較兩個引用數據類型時,它是比較的對象的內存地址,
* 如果兩個對象是一摸一樣的,但是地址不同,它也會返回false
*/
var c = 10;
var d = 10;
//console.log(c == d); // true
var obj3 = new Object();
var obj4 = new Object();
obj3.name = "沙和尚";
obj4.name = "沙和尚";
console.log(obj3); //{name: "沙和尚"}
console.log(obj4); //{name: "沙和尚"}
console.log(obj3 == obj4); //"false"
發佈了61 篇原創文章 · 獲贊 0 · 訪問量 4327
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章