文章配套視頻
辨別JS中的對(duì)象
除了5種基本的數(shù)據(jù)類型,其它的全都是對(duì)象
Object就是一個(gè)對(duì)象
為什么要使用對(duì)象
基本數(shù)據(jù)類型都是單一的值, 比如: "itlike" , 123 , true等, 值和值之間沒有任何的聯(lián)系。
比如想要描述一個(gè)人?
如果使用基本數(shù)據(jù)類型的數(shù)據(jù),我們所創(chuàng)建的變量都是獨(dú)立,不能成為一個(gè)整體。
var name = "撩課學(xué)院";
var intro = "喜歡IT, 就上撩課";
var age = 108;
對(duì)象屬于一種復(fù)合的數(shù)據(jù)類型,在對(duì)象中可以保存多個(gè)不同數(shù)據(jù)類型的屬性。
JS中對(duì)象的分類
內(nèi)置對(duì)象
由ES標(biāo)準(zhǔn)中定義的對(duì)象,在任何的ES的實(shí)現(xiàn)中都可以使用
比如:String Number Boolean Function Object Math ....
宿主對(duì)象
由JS的運(yùn)行環(huán)境提供的對(duì)象,現(xiàn)在主要指由瀏覽器提供的對(duì)象
比如: BOM對(duì)象, DOM對(duì)象
自定義對(duì)象
我們自己創(chuàng)建的對(duì)象
比如: Person, Dog, ....
如何創(chuàng)建對(duì)象
1.構(gòu)造函數(shù)
構(gòu)造函數(shù)是專門用來創(chuàng)建對(duì)象的函數(shù)
使用new關(guān)鍵字調(diào)用的函數(shù),可以被稱為構(gòu)造函數(shù)(constructor)
var obj = new Object();
2.定義
在對(duì)象中保存的值稱為屬性
向?qū)ο筇砑訉傩? 對(duì)象.屬性名 = 屬性值
讀取對(duì)象中的屬性: 對(duì)象.屬性名:如果讀取對(duì)象中沒有的屬性,不會(huì)報(bào)錯(cuò)而是會(huì)返回undefined
修改對(duì)象的屬性值: 對(duì)象.屬性名 = 新值
刪除對(duì)象的屬性: delete 對(duì)象.屬性名
3.定義一個(gè)人
var obj = new Object();
//向obj中添加一個(gè)name屬性
obj.name = "謝霆鋒";
//向obj中添加一個(gè)gender屬性
obj.gender = "男";
//向obj中添加一個(gè)age屬性
obj.age = 38;
讀取 修改 刪除
屬性名和屬性值
1.屬性名
對(duì)象的屬性名不強(qiáng)制要求遵守標(biāo)識(shí)符的規(guī)范, 怎么寫都可以, 但還是按照標(biāo)準(zhǔn)來比較好!
var obj = new Object();
obj.name = "葉建華";
obj.if = "如果";
console.log(obj);
注意
如果要使用特殊的屬性名,不能采用.的方式來操作,
需要使用另一種方式,
語法: 對(duì)象["屬性名"] = 屬性值, 讀取也要用該方式
obj["666"] = 888;
console.log(obj["666"]);
var str = '666';
obj[str] = 888;
console.log(obj[str]);
2.屬性值
JS對(duì)象的屬性值,可以是任意的數(shù)據(jù)類型, 也可以是一個(gè)對(duì)象
obj.content = null;
obj.content = true;
obj.content = undefined;
調(diào)試
var obj2 = new Object();
obj2.name = "小花花";
obj.dog = obj2;
3.in 運(yùn)算符
定義:通過該運(yùn)算符可以檢查一個(gè)對(duì)象中是否含有指定的屬性, 如果有則返回true,沒有則返回false
語法:"屬性名" in 對(duì)象
基本類型和引用類型在堆棧中的表示
1.基本數(shù)據(jù)類型
String Number Boolean Null Undefined
2.引用數(shù)據(jù)類型
Object
3.區(qū)別
JS中的變量都是保存到棧內(nèi)存中的,
基本數(shù)據(jù)類型的值直接在棧內(nèi)存中存儲(chǔ),
值與值之間是獨(dú)立存在,
修改一個(gè)變量不會(huì)影響其他的變量
對(duì)象是保存到堆內(nèi)存中的,
每創(chuàng)建一個(gè)新的對(duì)象,
就會(huì)在堆內(nèi)存中開辟出一個(gè)新的空間,
而變量保存的是對(duì)象的內(nèi)存地址(對(duì)象的引用),
如果兩個(gè)變量保存的是同一個(gè)對(duì)象引用,
當(dāng)一個(gè)通過一個(gè)變量修改屬性時(shí),另一個(gè)也會(huì)受到影響
4.畫圖分析
5.注意
比較兩個(gè)基本數(shù)據(jù)類型的值時(shí),就是比較值。
比較兩個(gè)引用數(shù)據(jù)類型時(shí),
它是比較的對(duì)象的內(nèi)存地址,
如果兩個(gè)對(duì)象是一摸一樣的,但是地址不同,它也會(huì)返回false
對(duì)象字面量
使用對(duì)象字面量,可以在創(chuàng)建對(duì)象時(shí),直接指定對(duì)象中的屬性
語法:var 對(duì)象 = {屬性名:屬性值,屬性名:屬性值....};
對(duì)象字面量的屬性名可以加引號(hào)也可以不加,建議不加, 如果要使用一些特殊的名字,則必須加引號(hào)
格式:屬性名和屬性值是一組一組的名值對(duì)結(jié)構(gòu),和值之間使用:連接,多個(gè)名值對(duì)之間使用,隔開
案例:
var obj = {
name:"劉德華",
age:50,
gender:"男",
friend:{name:"洗頭發(fā)"}
};
console.log(obj.friend);