使用连接的(动态)字符串作为 JavaScript 对象键?

IT技术 javascript syntax object-literal
2021-01-30 02:06:30
var test = "test123"
var test123 ={
    "key" + test: 123
}

此代码不起作用。"key" + test 有什么问题?

6个回答

因为"key" + test是表达式而不是标识符、字符串文字或数字文字,它们是唯一允许作为对象文字中的键的东西。

[]在为这样的动态键创建对象后,您必须使用符号:

var test123 = {};
test123["key" + test] = 123;

标识符基本上是可以称为变量的字符子集(字母、数字_$; 不能以数字开头),而字符串文字是用'括起来的任何字符串"

因此,您可以在对象字面量中使用的唯一类型的键是:

{
  a0:   true, // valid identifier
  $$_:  true, // same
  123:  true, // valid numeric literal
  012:  true, // same (octal)
  0xf:  true, // same (hex)
  "@":  true, // not allowed as an identifier
  '0a': true  // same
}

参考:http : //es5.github.com/#x11.1.5

物业名称

标识符名称

字符串字面量

数字文字

此外,对象字面量中也允许使用数字,例如0or 5e10(但不是-10因为-不是数字字面量的一部分而是一元运算-符)。
2021-03-28 02:06:30
@Felix Kling:确实是这样,谢谢。
2021-03-31 02:06:30

使用 ES6,您可以在对象字面量中定义动态键:

const test = "test123"
const test123 = { [`key${test}`]: 123 };  //{ keytest123: 123 }
谢谢你 - 真的需要一种方法来使这种语法起作用。ES6 是救星!
2021-03-21 02:06:30
这。可以与扩展运算符一起使用
2021-03-27 02:06:30

您可以但不能使用文字符号(ES6 之前)。

var test123 = {};
test123["foo" + "bar"] = 'baz';

test123.foobar === 'baz'; // true
感谢您的简单回答,这正是我正在寻找的:)
2021-03-21 02:06:30

您的代码相当于test123.("key" + test) = 123which 可以更好地帮助您理解为什么它是错误的。

您需要["name"]符号才能通过字符串中的名称访问字段。其他符号(你的和.一个)需要标识符。

Javascript 提供了两种方式来定义对象的属性:

  1. object.propertyName = value;

在这种情况下,propertyName 是不可编辑和不可计算的。您不能执行以下操作:

    object.('property'+'Name')

如你看到的

    object = {propertyName:value};
    object = {'propertyName':value};

他们是平等的

  1. 您可以使用带有“[]”的变量作为属性名称;

你可以做 :

 var a  = "propertyName";
 object[a] = value;

这一次你必须使用一个字符串

object[propertyName] = value;//error
object["propertyName"] = value;//correct
object = {'propertyName':value};//correct
object = {propertyName:value};//correct