这是我的功能
t <- structure(list(sub = c(1L, 1L, 1L, 1L, 1L, 1L), trialnum = 10:15,
block.x = c(3L, 3L, 3L, 3L, 3L, 3L), lat.x = c(1355L, 1324L,
1861L, 3501L, 1566L, 1380L), block.y = c(5L, 5L, 5L, 5L,
5L, 5L), lat.y = c(1337L, 1470L, 1690L, 1473L, 1402L, 1539L
), diff = c(18L, -146L, 171L, 2028L, 164L, -159L)), .Names = c("sub",
"trialnum", "block.x", "lat.x", "block.y", "lat.y", "diff"), row.names = c(NA,
-6L), class = "data.frame")
为什么第一个function goldAndSilver(bin) {
var gold = bin.gold;
var silver = bin.silver;
return { gold: gold, silver: silver };
}
引用名称,第二个gold
在gold
遇到var gold = bin.gold
时引用值在执行上下文中。行结束后总是不gold = number
,返回的结果应该是{5: 5}
而不是{gold: 5}
?
答案 0 :(得分:5)
使用此表示法{ gold: gold, silver: silver }
冒号前面的单词将始终是名称,它永远不会引用变量。
如果要使用变量作为对象属性的名称,可以这样做:
var gold = 5;
var obj = {};
obj[gold] = gold;
这导致了
Object {5: 5}
答案 1 :(得分:1)
否,因为默认情况下不计算对象键。该属性将在您命名时给出确切的名称。但是,使用ES2015,您可以使用computed property names,它允许您使用动态值命名属性。
(请注意,这仅适用于支持新语法的浏览器):
var gold = 5;
var obj = {
[gold]: gold
};
document.write('<pre>' + JSON.stringify(obj, null, 2) + '</pre>');
&#13;
答案 2 :(得分:0)
这是对象表示法。这里的第一个字是&#39;:&#39;是关键。它始终是一个字符串。这就像为要分配的值指定名称。第二个是价值。 在此表示法中,您不能将变量指定为键。键将始终是常量和字符串。
{ gold: gold, silver: silver }
is same as
var obj = { 'gold': gold, 'silver': silver }
要将变量指定为键,必须使用方括号表示法。
var key1='gold';
var key2='silver';
var obj={};
// assuming gold and silver to defined
obj[key1]=gold;
obj[key2]=silver;
在两种情况下,obj都是一样的。但是,在分配值之前知道密钥名称时,可以使用第二种格式。
例如,让我们看一下克隆一个对象的代码(一个级别):
function clone(original){
var clone={};
for(var key in original){
// Dont know what is the value of key. So we need to use square
//bracket. clone.key would be incorrect to use because it would be
//considered string.
clone[key]=original[key];
}
return clone;
}