Javascript 为什么可以用字符串作为标识符来声明属性?什么';做这件事的时候是在引擎盖下面吗?

Javascript 为什么可以用字符串作为标识符来声明属性?什么';做这件事的时候是在引擎盖下面吗?,javascript,Javascript,我在名称(ID)中使用带有连字符的属性已经有一段时间了,因为它们在设置同名HTML标记属性时非常方便 在JavaScript中我们做: var obj = {'prop-with-hyphen': true}; // ✓ obj['prop-with-hyphen'] = true; // ✓ 这是如何工作的?因为当您声明obj时所做的是创建一个JS(像许多语言一样)作为本机构造的东西。基本上,您要设置一个字符串键,然后稍后再引用它。由于键是字符串,因此它可以由您想要的任何字符组成var o

我在名称(ID)中使用带有连字符的属性已经有一段时间了,因为它们在设置同名HTML标记属性时非常方便

JavaScript中我们做:

var obj = {'prop-with-hyphen': true}; // ✓

obj['prop-with-hyphen'] = true; // ✓

这是如何工作的?

因为当您声明
obj
时所做的是创建一个JS(像许多语言一样)作为本机构造的东西。基本上,您要设置一个字符串键,然后稍后再引用它。由于键是字符串,因此它可以由您想要的任何字符组成
var obj={'78*(^&%&*#^$)I*(FG*)(&^':“FOO!”};
是完全有效的(尽管我不知道您为什么想要这样的密钥)


正如您在原始问题的评论中所指出的,在变量名中使用连字符会使减法运算符(
-
)的使用变得相当麻烦。

不允许字符串作为对象键的先例是什么?“为什么可以用连字符声明变量?”-不是。你在问题主体中是这样说的。“还有哪些其他语言也有这种行为?”-可能很多。购物问题都是离题的。想想看,如果连字符(减号)出现,你会如何减去东西可以在变量名和对象键中使用,也可以在您认为方便的任何地方使用。对象用于存储具有非常广泛名称的潜在大型数据集,这些名称有时是事先未知的。变量是仅与开发人员相关的数据的特定标签处理代码。它们本质上是不同的,没有什么令人信服的理由为变量添加更复杂的语法以适应更广泛的名称。。