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}
是一个更有意义的对象结构。标题和标记似乎与实际问题没有任何关系。我更新/简化了你的问题。如果您不喜欢,请随时回复。