gpt4 book ai didi

javascript - 使用保留字作为属性名,重温

转载 作者:IT老高 更新时间:2023-10-28 12:46:26 28 4
gpt4 key购买 nike

保留字可以用作对象的属性名吗?

这个问题是在之前的 Stack Overflow 问题中间接提出的:Browser support for using a reserved word as a property name in JavaScript . Alex Wayne 的答案似乎得到了普遍的共识。 :

You can use those words, but only as strings and not shorthand properties.

foo['class']; // cool
foo.class; // not cool

虽然我认为他们在这方面的知识可能比我多,并且在某些情况下使用保留字可能是一个坏主意,但我认为他们的结论基于两点是错误的:

  • 使用保留字作为“速记”属性测试保留字

  • HTMLFormElement 使得 not 无法在“速记”中使用保留字

首先,使用保留字列表,将每个作为属性添加到 ObjectHTMLElement , 均为 obj["word"]obj.word , 然后检索为 obj["word"]obj.word .在 63 个案例中,所有 8 个测试都正常工作。

其次,HTMLFormElement 需要这项工作,因为它使用速记符号检索其元素。如果 <input name='typeof' value='scalar' />是表单的一个元素,那么 form.typeof == “标量”。

根据我的经验,保留字通常是数据造成的(例如,名为“private”的列),而不是程序造成的。因此,它们会污染 JSON 对象,并从那里污染输入,然后再从那里污染 HTMLFormElement。简而言之,如果没有大量(恕我直言,不必要的)工作,就不可能让保留字被迫以简写形式正确工作。

在我看来这些真正的问题:

  • 需要注意不要与现有的属性冲突,而不是保留字

  • (很多如果不是全部)变量不能是保留字

  • 使用保留字作为属性可能(但不一定)令人困惑

那么这个结论是否正确,即保留字作为属性名称,并以字符串或简写形式访问它们就可以了 - 只要对这种情况应用一点常识?

最佳答案

在 ECMAScript 中,从 ES5 开始,保留字可以用作“在 buff”中的对象属性名称。这意味着在定义对象字面量时不需要将它们“包裹”在引号中,并且可以在对象上取消引用(用于访问、分配和删除),而无需使用方括号索引表示法。

也就是说,保留字仍然可以用作标识符名称。这在规范中非常明确地说明,并且在这里有些强调(如果您不想因阅读实际语言规范而流血)...

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Reserved_Words

The following are keywords and may not be used as variables, functions, methods, or object identifiers, because ECMAScript specifies special behavior for them:

关于javascript - 使用保留字作为属性名,重温,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7022397/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com