如何评估对象文字中的键?

时间:2016-05-17 18:13:57

标签: javascript object-literal

这是我的功能

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 }; } 引用名称,第二个goldgold遇到var gold = bin.gold时引用在执行上下文中。行结束后总是不gold = number,返回的结果应该是{5: 5}而不是{gold: 5}

3 个答案:

答案 0 :(得分:5)

使用此表示法{ gold: gold, silver: silver }冒号前面的单词将始终是名称,它永远不会引用变量。

如果要使用变量作为对象属性的名称,可以这样做:

var gold = 5;
var obj = {};
obj[gold] = gold;

这导致了 Object {5: 5}

答案 1 :(得分:1)

否,因为默认情况下不计算对象键。该属性将在您命名时给出确切的名称。但是,使用ES2015,您可以使用computed property names,它允许您使用动态值命名属性。

(请注意,这仅适用于支持新语法的浏览器):

&#13;
&#13;
var gold = 5;
var obj = {
  [gold]: gold
};

document.write('<pre>' + JSON.stringify(obj, null, 2) + '</pre>');
&#13;
&#13;
&#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;
}