如何计算对象文字中的键

How are keys in an object literal evaluated?

本文关键字:文字 对象 何计算 计算      更新时间:2023-09-26

这是我的函数

function goldAndSilver(bin) {
    var gold = bin.gold;
    var silver = bin.silver;
    return { gold: gold, silver: silver };
}

当执行上下文中已经遇到var gold = bin.gold时,为什么第一个gold引用名称,而第二个gold引用。线路运行后,gold = number不总是吗?返回的结果应该是{5: 5}而不是{gold: 5}

使用这种表示法{ gold: gold, silver: silver },冒号之前的单词将始终是名称,它从不引用变量。

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

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

这导致Object {5: 5}

否,因为默认情况下不会计算对象键。属性的名称将与您命名的名称完全相同。但是,使用ES2015,您可以使用计算的属性名称,该名称允许您使用动态值命名属性。

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

var gold = 5;
var obj = {
  [gold]: gold
};
document.write('<pre>' + JSON.stringify(obj, null, 2) + '</pre>');

这是对象表示法。这里":"前面的第一个单词是关键。它总是一根绳子。这就像为要指定的值指定一个名称。第二个是价值。在这种表示法中,不能将变量指定为键。键将始终是常量和字符串。

{ 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;
}