js給對(duì)象動(dòng)態(tài)添加、設(shè)置、刪除屬性名與屬性值實(shí)例代碼
1. 訪問對(duì)象屬性
js中訪問對(duì)象屬性一共有兩種方法:點(diǎn)獲取法和方括號(hào)獲取法。
let user = { // 一個(gè)對(duì)象 name: "John", // 鍵 "name",值 "John" age: 30, // 鍵 "age",值 30。列表中的最后一個(gè)屬性應(yīng)以逗號(hào)結(jié)尾:便于我們添加、刪除和移動(dòng)屬性 };
- 使用點(diǎn)符號(hào)訪問屬性值
alert( user.name ); // John
- 使用方括號(hào)訪問屬性值
alert( user[name]); // John
注意: 如果我們遍歷一個(gè)對(duì)象,我們獲取屬性的順序是和屬性添加時(shí)的順序相同嗎?
簡短的回答是:“有特別的順序”:整數(shù)屬性會(huì)被進(jìn)行排序,其他屬性則按照創(chuàng)建的順序顯示。
2. 刪除對(duì)象屬性
使用delete
關(guān)鍵字刪除對(duì)象屬性
delete user.age; delete user[age];
3. 動(dòng)態(tài)設(shè)置屬性
最常用的對(duì)象屬性獲取方法是點(diǎn)獲取法。
但是當(dāng)我們遇到需要給對(duì)象動(dòng)態(tài)添加屬性和屬性值時(shí),點(diǎn)獲取法好像就不方便了,尤其是我們不知道屬性名的時(shí)候更麻煩。這時(shí)候,方括號(hào)獲取法就派上用場(chǎng)了。
let order={ id:1, name:'xxxx', } // 如果是直接給新屬性賦值 order['logisticsNo']='xxxx'; // 如果添加的屬性為[],則可以先創(chuàng)建屬性值為空數(shù)組 order['logisticsNo']=[]; order['logisticsNo'].push(data); //注意數(shù)組才有push,不然會(huì)報(bào)錯(cuò) // 也可以使用變量名 let key='logisticsNo'; order[key]=[]; order[key].push(data);
計(jì)算屬性
當(dāng)創(chuàng)建一個(gè)對(duì)象時(shí),我們可以在對(duì)象字面量中使用方括號(hào)。這叫做 計(jì)算屬性。
let fruit = prompt("Which fruit to buy?", "apple"); let bag = { [fruit]: 5, // 屬性名是從 fruit 變量中得到的 }; alert( bag.apple ); // 5 如果 fruit="apple"
計(jì)算屬性的含義很簡單:[fruit] 含義是屬性名應(yīng)該從 fruit 變量中獲取。
所以,如果一個(gè)用戶輸入 “apple”,bag 將變?yōu)?{apple: 5}。
本質(zhì)上,這跟下面的語法效果相同:
let fruit = prompt("Which fruit to buy?", "apple"); let bag = {}; // 從 fruit 變量中獲取值 bag[fruit] = 5;
我們可以在方括號(hào)中使用更復(fù)雜的表達(dá)式:
let fruit = 'apple'; let bag = { [fruit + 'Computers']: 5 // bag.appleComputers = 5 };
屬性存在判斷: “in” 操作符
相比于其他語言,JavaScript 的對(duì)象有一個(gè)需要注意的特性:能夠被訪問任何屬性。即使屬性不存在也不會(huì)報(bào)錯(cuò)!
讀取不存在的屬性只會(huì)得到 undefined
。所以我們可以很容易地判斷一個(gè)屬性是否存在:
let user = {}; alert( user.noSuchProperty === undefined ); // true 意思是沒有這個(gè)屬性
in
的左邊必須是 屬性名。通常是一個(gè)帶引號(hào)的字符串。
let user = { name: "John", age: 30 }; alert( "age" in user ); // true,user.age 存在 alert( "blabla" in user ); // false,user.blabla 不存在。
推薦直接使用in
來判斷對(duì)象的屬性是否存在。
“for…in” 循環(huán)
let user = { name: "John", age: 30, isAdmin: true }; for (let key in user) { // keys alert( key ); // name, age, isAdmin // 屬性鍵的值 alert( user[key] ); // John, 30, true }
1.檢查空對(duì)象
function isEmpty(obj) { for (let key in obj) { // 如果進(jìn)到循環(huán)里面,說明有屬性。 return false; } return true; }
2.對(duì)象屬性求和
let salaries = { John: 100, Ann: 160, Pete: 130 }; let sum = 0; for (let key in salaries) { sum += salaries[key]; } alert(sum); // 390
3.將數(shù)值屬性值都乘以 2
// 在調(diào)用之前 let menu = { width: 200, height: 300, title: "My menu" }; multiplyNumeric(menu); // 調(diào)用函數(shù)之后 menu = { width: 400, height: 600, title: "My menu" }; function multiplyNumeric(obj) { for (let key in obj) { if (typeof obj[key] == 'number') { obj[key] *= 2; } } }
補(bǔ)充:括號(hào)表示法
這種方式類似于數(shù)組的寫法
const student = { name: '張三', age: 18, action: function eat () {alert('我喜歡吃')} } // 括號(hào)表示法(屬性值要加引號(hào)) student['name']; student['age']; student['action'](); // 調(diào)用方法需要在外面加括號(hào)
另:這種方法個(gè)優(yōu)點(diǎn):
我們想把傳遞過來的數(shù)據(jù)當(dāng)做對(duì)象字面量的屬性名可以用括號(hào)表示法,所以括號(hào)表示發(fā)可以動(dòng)態(tài)的添加屬性名和內(nèi)容。
<input type="text" value="address"> <script> const student ={}; let ipt = document.querySelector('input'); let a= ipt.value; // 用點(diǎn)表示法不能將輸入框中的值當(dāng)做屬性名來設(shè)置 student.a = '北京'; // 存入的是a: '北京' // 用括號(hào)表示法可以 student[a] = '北京'; // 存入的是 address: '北京' // ↑動(dòng)態(tài)的將輸入框中的內(nèi)容作為這個(gè)對(duì)象的值 </script>
總結(jié)
到此這篇關(guān)于js給對(duì)象動(dòng)態(tài)添加、設(shè)置、刪除屬性名與屬性值的文章就介紹到這了,更多相關(guān)js對(duì)象動(dòng)態(tài)添加設(shè)置刪除屬性名內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
TypeScript遍歷Array的方法(for,forEach,every)
本文主要介紹了TypeScript遍歷Array的方法(for,forEach,every),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06微信小程序?qū)崿F(xiàn)簡單手寫簽名組件的方法實(shí)例
在使用微信的時(shí)候,為方便我們發(fā)送文件可以直接在上面進(jìn)行手寫簽名,這篇文章主要給大家介紹了關(guān)于利用微信小程序?qū)崿F(xiàn)簡單手寫簽名組件的相關(guān)資料,需要的朋友可以參考下2021-07-07IOS中safari下的select下拉菜單文字過長不換行的解決方法
今天在項(xiàng)目開發(fā)中遇到一個(gè)問題safari下的select下拉菜單文字過長不換行問題,最終我用<optgroup>標(biāo)簽解決此問題,下面小編把實(shí)現(xiàn)思路分享給大家供大家參考2016-09-09微信小程序?qū)崿F(xiàn)用戶登錄模塊服務(wù)器搭建
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)用戶登錄模塊服務(wù)器搭建,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05JS在一定時(shí)間內(nèi)跳轉(zhuǎn)頁面及各種刷新頁面的實(shí)現(xiàn)方法
這篇文章主要介紹了JS在一定時(shí)間內(nèi)跳轉(zhuǎn)頁面及各種刷新頁面的實(shí)現(xiàn)方法的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-05-05基于JS實(shí)現(xiàn)的隨機(jī)數(shù)字抽簽實(shí)例
本文分享了基于JS實(shí)現(xiàn)的隨機(jī)數(shù)字抽簽的實(shí)例代碼。小編認(rèn)為具很好的參考價(jià)值,感興趣的朋友可以看下2016-12-12js Html結(jié)構(gòu)轉(zhuǎn)字符串形式顯示代碼
js Html結(jié)構(gòu)轉(zhuǎn)字符串形式顯示代碼,需要的朋友可以參考下。2011-11-11