Javascript 如何计算对象文字中的键?

Javascript 如何计算对象文字中的键?,javascript,object-literal,Javascript,Object Literal,这是我的功能 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}?使用这种表示法{go

这是我的功能

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}

使用此符号
{gold:gold,silver:silver}
冒号前的单词始终是名称,它从不引用变量

如果要使用变量作为对象属性的名称,可以执行以下操作:

var gold = 5;
var obj = {};
obj[gold] = gold;
这导致
对象{5:5}

否,因为默认情况下不会计算对象键。该属性将以您命名的确切名称命名。但是,使用ES2015,您可以使用它来使用动态值命名属性

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

var-gold=5;
var obj={
[黄金]:黄金
};

document.write(''+JSON.stringify(obj,null,2)+'')否,因为默认情况下不会计算对象关键点。该属性将以您命名的确切名称命名。但是,使用ES2015,您可以使用它来使用动态值命名属性

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

var-gold=5;
var obj={
[黄金]:黄金
};

document.write(''+JSON.stringify(obj,null,2)+'')这是对象表示法。这里“:”前面的第一个单词是键。它总是一根弦。这类似于为要指定的值指定名称。第二个是价值。 在这种表示法中,不能将变量指定为键。键将始终是常量和字符串

 var key1='gold';
 var key2='silver';
 var obj={};
 // assuming gold and silver to defined
 obj[key1]=gold;
 obj[key2]=silver;
要将变量指定为键,必须使用方括号表示法

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;
} 
在这两种情况下,obj是相同的。但第二种格式可以在指定值之前已知键名时使用

例如,让我们查看克隆对象的代码(一级):


这是对象表示法。这里“:”前面的第一个单词是键。它总是一根弦。这类似于为要指定的值指定名称。第二个是价值。 在这种表示法中,不能将变量指定为键。键将始终是常量和字符串

 var key1='gold';
 var key2='silver';
 var obj={};
 // assuming gold and silver to defined
 obj[key1]=gold;
 obj[key2]=silver;
要将变量指定为键,必须使用方括号表示法

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;
} 
在这两种情况下,obj是相同的。但第二种格式可以在指定值之前已知键名时使用

例如,让我们查看克隆对象的代码(一级):


请注意,JavaScript只使用字符串作为对象键,因此上面代码的结果对象将是
{“5”:5}
。它只使用字符串,但其语法允许不带引号的标识符,
5
是有效的属性标识符,正如
gold
sliver
一样。在支持它的浏览器中,您也可以使用计算名称:,
{[gold]:gold}
@TimoSta--您确定吗?当我打开chromes控制台并执行
VARx={5:5}
-我在日志中得到
Object{5:5}
output@tymeJV,这是因为控制台不会在属性名称周围显示引号。但是TimoSta是错误的,因为Javascript只使用
String
s作为属性键,它也可以使用:所有字符串和符号值,包括空字符串,都作为属性键有效。属性名称是作为字符串值的属性键。至于数字:整数索引是字符串值的属性注释记号,JavaScript只使用字符串作为对象键,因此上面代码的结果对象将是
{“5”:5}
。它只使用字符串,但其语法允许不带引号的标识符,
5
是有效的属性标识符,正如
gold
sliver
一样。在支持它的浏览器中,您也可以使用计算名称:,
{[gold]:gold}
@TimoSta--您确定吗?当我打开chromes控制台并执行
VARx={5:5}
-我在日志中得到
Object{5:5}
output@tymeJV,这是因为控制台不会在属性名称周围显示引号。但是TimoSta是错误的,因为Javascript只使用
String
s作为属性键,它也可以使用:所有字符串和符号值,包括空字符串,都作为属性键有效。属性名称是作为字符串值的属性键。至于数字:整数索引是一个字符串值属性keyWhat@IrkenInvader所说的。我想你只是好奇代码是如何运行的,但是如果你真的想要
{5:5}
,我会说(在大多数情况下)
{gold:5}
是一个更有意义的对象结构。标题和标记似乎与实际问题没有任何关系。我更新/简化了你的问题。如果你不喜欢,请随时回复。@IrkenInvader说了什么。我想你只是好奇代码是如何运行的,但是如果你真的想要
{5:5}
,我会说(在大多数情况下)
{gold:5}
是一个更有意义的对象结构。标题和标记似乎与实际问题没有任何关系。我更新/简化了你的问题。如果您不喜欢,请随时回复。