在对象中指定键时使用字符串's键值对
Using strings when specifying a key in an object's key-value pair
当在对象的键值对中指定键时(使用下面的符号),解释器(显然)允许使用字符串:
var x = { 'color': '#fff' };
但是,不允许使用函数(返回字符串)常规指定密钥:
function s()
{
return 'color';
}
var x = { s(): '#fff' };
我猜想,当使用这种表示法时,字符串必须是静态值。
然而,我找不到关于这方面的JavaScript语言规范。。。
在这种情况下,您应该使用以下方法:
var x = {};
x[s()] = "#fff";
x[foo()] = "#000";
根据这篇MDN文章(我用粗体突出显示):
使用对象初始化器的对象的语法为:
var obj = { property_1: value_1, // property_# may be an identifier... 2: value_2, // or a number... // ..., "property n": value_n }; // or a string
其中,obj是新对象的名称,每个property_i是一个标识符(可以是名称、数字或字符串文字),每个value_i。
因此,在这种文字表示法中,不允许对表达式进行求值,例如通过函数调用来确定属性标识符。
在ECMAScript语言规范中,它被更正式地称为:
属性名称:
- 标识符名称
- 字符串文字
- NumericLiteral
ECMAScript 2015
有了ECMAScript 2015,正如MDN文章中所解释的那样:
从ECMAScript 2015开始,对象初始值设定项语法也支持计算属性名称。这允许您将表达式放在方括号[]中,该表达式将被计算为属性名称。
// Computed property names (ES6) var i = 0; var a = { ["foo" + ++i]: i, ["foo" + ++i]: i, ["foo" + ++i]: i };
ECMAScript 2015语言规范中的正式定义有:
属性名称:
- LiteralPropertyName
- ComputedPropertyName
ComputedPropertyName:
- [AssignmentExpression]
因此,使用ES6,您可以这样重写您的示例:
function s()
{
return 'color';
}
var x = { [s()]: '#fff' };
对象可以使用{}初始化,也可以使用新运算符初始化,如
var x = {};
var y = {foo : 'bar'};
var z = new Object();
访问对象属性时,可以使用。运算符或括号。
var somevalue = y.foo; // 'bar'
var someother = y['foo'] // 'bar'
在你目前的情况下,你会想要这样的东西:
var x = new Object(); // or {}
x[s()] = "#fff";
对象类型
如果您检查x的类型,它将返回"object"。
var typeOfX = typeof x; // 'object'
相关文章:
- 从html标记格式的字符串中提取键值对
- 从字符串javascript中获取键值对
- 将字符串数组转换为键值对对象
- 如何在 javascript 中将管道分隔的字符串解析为键值对
- 来自字符串的 JavaScript 访问键值对
- 如何使用下划线.js编辑具有字符串键值对的对象数组中的字符串
- 如何将 html 放在键值对的字符串中,以便提交到 meteor 中的集合中
- 在对象中指定键时使用字符串's键值对
- JavaScript关联数组-将字符串作为数组键:值对进行传递
- 如何将字符串循环为键值对
- 如何将字符串转换为对象作为键值对
- 在javascript中将字符串拆分为键:值对
- 如何将大字符串对象转换为键/值对块
- 在Javascript和会话存储中对键值对进行字符串化
- 可以在section中使用字符串数组而不是键/值对
- 从字符串解析键/值对
- 我如何分割两个字符串,并使一个键值对在javascript
- 如何将字符串数组转换为对象,以便将这些对象拆分为键值对
- 在Javascript中将键值对操作为字符串
- 如何在字符串中访问Javascript中解析的JSON中的嵌套键值对