2016-09-21 145 views
1
var collection = { 
    "5439": { 
     "album": "ABBA Gold" 
    } 
}; 
function updateRecords(id, prop, value) { 
    if(prop !== "tracks" && value !== ""){ 
    collection[id].prop=value; 
    } 
    return collection; 
} 
updateRecords(5439, "artist", "ABBA"); 

爲什麼結果是Object { album="ABBA Gold", prop="ABBA"}而不是Object { album="ABBA Gold",artist="ABBA"}
當解析collection[id].prop=value;,道具的價值是藝術家,id的值是5439,所以collection[id].prop=value;應解析成collection[5439].artist="ABBA";,爲什麼不呢?爲什麼函數調用時無法正確傳遞參數?

+1

在這裏閱讀答案:http://stackoverflow.com/questions/4968406/JavaScript的財產ACCES s-dot-notation-vs-brackets – epascarello

回答

4

使用Bracket notation

object屬性名稱可以是任何有效的JavaScript字符串或任何可以轉換爲字符串的字符串,包括空字符串。但是,只能使用方括號表示法訪問任何不是有效JavaScript標識符的屬性名稱(例如,具有空格或連字符的屬性名稱,或以數字開頭的屬性名稱)。 當要動態確定屬性名稱時,此符號也非常有用(直到運行時才確定屬性名稱)。

collection[id][prop] = value; 

代替,

collection[id].prop=value; 
+0

爲什麼'artist'不能將prop的值傳遞到集合[id] .prop中,使其成爲'collection [id]。「artist」'? –

+0

@it_is_a_literature:這正是支架符號所做的:動態屬性名稱。你已經用這種方式來使用'id'。同樣的事情適用於'prop'。 – Thilo

+5

因爲在世界上是如何解析應該知道你的意思是一個變量而不是字符串?這就是點和括號表示法的工作原理。 – epascarello

0

更改的行collection[id].prop=value;

collection[id][prop]=value;

var collection = { 
    "5439": { 
    "album": "ABBA Gold" 
    } 
}; 

function updateRecords(id, prop, value) { 
    if (prop !== "tracks" && value !== "") { 
    collection[id][prop] = value; 
    } 
    return collection; 
} 
updateRecords(5439, "artist", "ABBA"); 
相關問題