版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第JavaScript獲取對(duì)象key的幾種方法和區(qū)別目錄1、Object.keys()遍歷自身可以枚舉屬性2、Ojbect.values()/Ojject.entries()3、for-in遍歷可枚舉屬性prototype屬性4、hasOwnProperty遍歷可枚舉屬性5、getOwnPropertyNames()返回可枚舉屬性和不可枚舉屬性6、getOwnPropertySymbols()返回symbol類型的key屬性,7、對(duì)象對(duì)key的獲取方法8、對(duì)象聲明/對(duì)象賦值9、對(duì)象擴(kuò)展
1、Object.keys()遍歷自身可以枚舉屬性
letmyColors={
color1:'pink',
color2:'red'
};
letyourColors={
color3:'green',
color4:'blue'
};
Object.setPrototypeOf(yourColors,myColors);
//setPrototypeOf()設(shè)置一個(gè)指定的對(duì)象的原型到另一個(gè)對(duì)象orNULL
Object.keys(myColors);
Object.keys(yourColors);
console.log(myColors);
console.log(yourColors);
console.log(myColors['color1']);
console.log(yourColors['color3']);
解析:Object.keys(myColors)返回myColors對(duì)象的自身可枚舉屬性鍵;Object.keys(yourColors)也是返回yourColors對(duì)象自身的可枚舉屬性鍵。setPrototypeOf()方法讓yourColors繼承myColors原型的屬性,但是能看到并不能遍歷出來。Object.keys()是遍歷自身可以枚舉屬性。
2、Ojbect.values()/Ojject.entries()
返回自身可枚舉屬性的鍵值對(duì)數(shù)組:
letmyColors={
color1:'pink',
color2:'red'
};
letyourColors={
color3:'green',
color4:'blue'
};
Object.setPrototypeOf(yourColors,myColors);
console.log(Object.values(myColors));
console.log(Object.entries(myColors));
3、for-in遍歷可枚舉屬性prototype屬性
for-in遍歷對(duì)象所有的可枚舉屬性,包括原型。
ps:for-in和for-of的區(qū)別
①forin遍歷的是數(shù)組的索引(即鍵名),forof遍歷的是數(shù)組元素值
②forin得到對(duì)象的keyor數(shù)組or字符串的下標(biāo)
③forof得到對(duì)象的valueor數(shù)組or字符串的值
forin更適合遍歷對(duì)象
letmyColors={
color1:'pink',
color2:'red'
};
letyourColors={
color3:'green',
color4:'blue'
};
Object.setPrototypeOf(yourColors,myColors);
letarrayColors=[];
for(letkeyinyourColors){
arrayColors.push(key);
}
console.log(arrayColors);
解析:arrayColors數(shù)組包含yourColors自身屬性鍵,也有從原型對(duì)象myColrs繼承的屬性。
4、hasOwnProperty遍歷可枚舉屬性
返回一個(gè)布爾值,只能判斷自有屬性是否存在,對(duì)于繼承屬性會(huì)返回false,因?yàn)樗徊檎以玩湹暮瘮?shù)
//不使用hasOwnProperty,返回自身屬性和繼承原型屬性
letmyColors={
color1:'pink',
color2:'red'
};
letyourColors={
color3:'green',
color4:'blue'
};
Object.setPrototypeOf(yourColors,myColors);
for(letiinyourColors){
console.log(i);
}
//使用hasOwnProperty,返回自身屬性
letmyColors={
color1:'pink',
color2:'red'
};
letyourColors={
color3:'green',
color4:'blue'
};
Object.setPrototypeOf(yourColors,myColors);
for(letiinyourColors){
if(yourColors.hasOwnProperty(i)){//加上if判斷去掉原型鏈上的
console.log(i)
}
}
5、getOwnPropertyNames()返回可枚舉屬性和不可枚舉屬性
不包括prototype屬性,不包括symbol類型的key
getOwnPropertyNames()返回一個(gè)對(duì)象自身所有的屬性,包括可枚舉和不可枚舉屬性組成的數(shù)組
//返回對(duì)象自身所有的屬性,可枚舉和不可枚舉組成的數(shù)組,但不包括prototype屬性
letmyColors={
color1:'pink',
color2:'red'
};
letyourColors={
color3:'green',
color4:'blue'
};
Object.setPrototypeOf(yourColors,myColors);
//定義不可枚舉屬性
Object.defineProperty(yourColors,'your',{
enumerable:true,
value:6,
})
console.log(Object.getOwnPropertyNames(yourColors));
//返回對(duì)象自身所有的屬性,可枚舉和不可枚舉組成的數(shù)組,但不包括Symbol類型的key
let_item=Symbol('item')//定義Symbol數(shù)據(jù)類型
letmyColors={
color1:'pink',
color2:'red',
};
letyourColors={
color3:'green',
color4:'blue',
[_item]:'mySymbol'
};
Object.setPrototypeOf(yourColors,myColors);
//定義不可枚舉屬性
Object.defineProperty(yourColors,'your',{
enumerable:true,
value:6,
})
console.log(Object.getOwnPropertyNames(yourColors));
6、getOwnPropertySymbols()返回symbol類型的key屬性,
不關(guān)心是否可枚舉,返回對(duì)象自身的所有Symbol屬性組成的數(shù)組
let_item=Symbol('item')//定義Symbol數(shù)據(jù)類型
letmyColors={
color1:'pink',
color2:'red',
};
letyourColors={
color3:'green',
color4:'blue',
[_item]:'mySymbol'
};
Object.setPrototypeOf(yourColors,myColors);
//定義不可枚舉屬性
Object.defineProperty(yourColors,'your',{
enumerable:true,
value:6,
})
console.log(Object.getOwnPropertySymbols(yourColors));
7、對(duì)象對(duì)key的獲取方法
functiongetkey(){
letobj={
a:1,
b:2,
c:3
};
Ototype.d=4;
Object.defineProperty(obj,'e',{
configurable:true,
writable:false,
enumerable:false,
value:5
});
Object.defineProperty(obj,'f',{
configurable:true,
writable:false,
enumerable:true,
value:6
});
constsymbolg=Symbol('g');
constsymbolh=Symbol('h');
Object.defineProperty(obj,symbolg,{
configurable:true,
writable:false,
enumerable:false,
value:7
});
Object.defineProperty(obj,symbolh,{
configurable:true,
writable:false,
enumerable:true,
value:8
});
console.log();
for(letkeyinobj){
console.log('--for-in:',key);
if(obj.hasOwnProperty(key)){
console.log('--hasOwnProperty:',key);
}
}
console.log('--getOwnPropertyNames:',Object.getOwnPropertyNames(obj));
console.log('--getOwnPropertyDescriptor:',Object.getOwnPropertyDescriptor(obj));
console.log('--getOwnPropertySymbols:',Object.getOwnPropertySymbols(obj));
console.log('--keys:',Object.keys(obj));
}
--for-in:a
--hasOwnProperty:
a
--for-in:b
-
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中學(xué)學(xué)生社團(tuán)活動(dòng)經(jīng)費(fèi)預(yù)算制度
- 養(yǎng)老院定期體檢制度
- 企業(yè)內(nèi)部保密工作責(zé)任追究制度
- 公共交通車輛安全檢查制度
- 2026年工業(yè)制造中的6S管理與效率提升題解
- 2026年公務(wù)員考試模擬題行政職業(yè)能力測(cè)驗(yàn)與申論練習(xí)
- 2026年航空航天基礎(chǔ)知識(shí)學(xué)習(xí)入門與實(shí)踐題庫
- 2026年體育訓(xùn)練與健康管理測(cè)試題目
- 2026年企業(yè)管理實(shí)務(wù)能力測(cè)試題
- 2026年版權(quán)侵權(quán)監(jiān)測(cè)協(xié)議(實(shí)時(shí)·發(fā)現(xiàn)版)
- 服務(wù)外包人員保密管理制度(3篇)
- 成都高新區(qū)桂溪街道公辦幼兒園招聘編外人員考試備考題庫及答案解析
- 2025年醫(yī)院病歷管理操作規(guī)范
- 2026云南保山電力股份有限公司校園招聘50人筆試備考題庫及答案解析
- GB 4053.2-2025固定式金屬梯及平臺(tái)安全要求第2部分:斜梯
- 2026屆上海市長(zhǎng)寧區(qū)市級(jí)名校高一上數(shù)學(xué)期末學(xué)業(yè)質(zhì)量監(jiān)測(cè)模擬試題含解析
- 2026年煙草公司筆試綜合試題及考點(diǎn)實(shí)操指引含答案
- 九年級(jí)寒假期末總結(jié)課件
- 壓鑄機(jī)作業(yè)人員安全培訓(xùn)課件
- 新產(chǎn)品研發(fā)質(zhì)量管控流程詳解
- 我的Python世界(玩Minecraft我的世界學(xué)Python編程)
評(píng)論
0/150
提交評(píng)論