亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何創建要添加到JavaScript對象變量的動態密鑰

如何創建要添加到JavaScript對象變量的動態密鑰

江戶川亂折騰 2019-07-24 10:26:28
如何創建要添加到JavaScript對象變量的動態密鑰我正在嘗試這樣的事情,但這個例子不起作用。jsObj = {};for (var i = 1; i <= 10; i++) {     jsObj{'key' + i} = 'example ' + 1;}如何制作這樣的動態密鑰呢?
查看完整描述

2 回答

?
慕工程0101907

TA貢獻1887條經驗 獲得超5個贊

方括號:

jsObj['key' + i] = 'example' + 1;

在JavaScript中,所有數組都是對象,但并非所有對象都是數組。主要區別(以及難以模仿直接JavaScript和普通對象的那個)是數組實例維護length屬性,以便它反映一個加上名稱為數字的屬性的數值以及轉換為數字時的值,是所有這些房產中最大的。這聽起來很奇怪,但它只是意味著,給定一個數組實例,有相似的名字屬性"0","5","207",等等,都在他們的存在決定的價值被特殊處理length。而且,最重要的是,length可以設置值來刪除這些屬性。將length數組設置為0有效地刪除名稱看起來像整數的所有屬性。

好的,這就是使數組特殊的原因。但是,所有這些都與JavaScript [ ]運算符的工作原理無關。該運算符是一個對象屬性訪問機制,適用于任何對象。在這方面需要注意的是,就簡單的屬性訪問而言,數值數組屬性名稱并不特殊。它們只是看起來像數字的字符串,但JavaScript對象屬性名稱可以是您喜歡的任何類型的字符串。

因此,[ ]運算符在for循環遍歷數組的循環中的工作方式:

for (var i = 0; i < myArray.length; ++i) {
  var value = myArray[i]; // property access
  // ...}

[ ]訪問名稱為某個計算字符串的屬性時的工作方式沒有什么不同:

var value = jsObj["key" + i];

[ ]運營商有這樣做恰恰在這兩種情況是一樣的。換句話說,在一種情況下,所涉及的對象恰好是一個數組是不重要的。

使用設置屬性值時[ ],故事是相同的,除了維護length屬性的特殊行為。如果在數組實例上使用數字鍵設置屬性:

myArray[200] = 5;

然后(假設“200”是最大的數字屬性名稱)該length屬性將更新201為屬性賦值的副作用。但是,如果對普通對象做了同樣的事情:

myObj[200] = 5;

沒有這樣的副作用。數組和對象的名為“200”的屬性將以5完全相同的方式設置為值。

有人可能會認為,因為這種length行為很方便,所以你也可以創建Array構造函數的所有對象實例而不是普通對象。這沒有什么直接的錯誤(雖然它可能會讓人感到困惑,特別是對于熟悉其他語言的人來說,有些屬性要包含在其他屬性中length而不包含在其他屬性中)。但是,如果您正在使用JSON序列化(這是一個相當常見的事情),請了解數組實例以涉及數字命名屬性的方式序列化為JSON 。添加到數組的其他屬性永遠不會出現在序列化的JSON表單中。例如:

var obj = [];obj[0] = "hello world";obj["something"] = 5000;var objJSON = JSON.stringify(obj);

“objJSON”的值將是一個包含just的字符串["hello world"]; “某物”財產將會丟失。

ES2015:

如果您能夠使用ES6 JavaScript功能,則可以使用計算屬性名稱來輕松處理:

var key = 'DYNAMIC_KEY',
    obj = {
        [key]: 'ES6!'
    };console.log(obj);// > { 'DYNAMIC_KEY': 'ES6!' }


查看完整回答
反對 回復 2019-07-24
?
GCT1015

TA貢獻1827條經驗 獲得超4個贊

JavaScript中的關聯數組與其他語言的實際工作方式不同。 for each語句很復雜(因為它們枚舉了繼承的原型屬性)。您可以像Pointy提到的那樣在對象/關聯數組上聲明屬性,但實際上對于這種事情,您應該使用帶有該push方法的數組:

jsArr = []; for (var i = 1; i <= 10; i++) { 
    jsArr.push('example ' + 1); }

只是不要忘記索引數組是從零開始的,所以第一個元素是jsArr [0],而不是jsArr [1]。


查看完整回答
反對 回復 2019-07-24
  • 2 回答
  • 0 關注
  • 397 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號