调用函数时为什么参数无法正常传递?

时间:2016-09-21 12:09:04

标签: javascript function parameters

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;,prop的值为artist,id的值为5439,因此collection[id].prop=value;应解析为collection[5439].artist="ABBA";,为什么不呢?

2 个答案:

答案 0 :(得分:4)

使用Bracket notation

  

object属性名称可以是任何有效的JavaScript字符串,也可以是任何可以转换为字符串的内容,包括空字符串。但是,任何不是有效JavaScript标识符的属性名称(例如,具有空格或连字符的属性名称,或以数字开头的属性名称)只能使用方括号表示法访问。 当动态确定属性名称时,此表示法也非常有用(直到运行时才确定属性名称。)

collection[id][prop] = value;

代替,

collection[id].prop=value;

答案 1 :(得分: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");