当前位置: 首页 > 面试题库 >

Javascript对象中的键只能是字符串吗?

胡鸿禧
2023-03-14
问题内容

jshashtable状态:

JavaScript的内置对象的确使用方括号表示属性来提供哈希表功能,前提是您的键是字符串或数字:

据我所知,键只是字符串,(因为数字无论如何都被强制转换为字符串)。我只想检查一下,确保上面所说的是假的(因为键不能是数字)。

ECMA标准是否对此做了任何说明。

还是实现特定于浏览器?


问题答案:

JavaScript的内置对象确实使用属性的方括号表示法提供哈希表功能,前提是您的键是字符串或数字

使用点表示法按名称访问属性:

MemberExpression。 标识符名称

CallExpression。 标识符名称

或括号符号:

MemberExpression [表达式]

CallExpression [表达式]

点符号通过以下语法转换进行解释:

MemberExpression。 标识符名称

在行为上与

MemberExpression [ ]

同样

CallExpression。 标识符名称

在行为上与

CallExpression [ ]

其中, _< identifier-name-
string>_是一个字符串文字,其中包含在处理Unicode转义序列后与IdentifierName相同的字符序列。

因此,当使用点表示法时,点后的位必须符合IdentifierName的条件。但是,在使用方括号时,会提供一个 表达式 ,该表达式将求值并解析为字符串。

简要地说,提供了方括号符号,以便可以使用 表达式 访问属性,例如

var y = {};
var x = 'foo';
y[x] = 'foo value';

在上面,x以方括号提供,以便对其进行求值,并返回字符串’foo’。由于此属性尚不存在y,因此已添加。然后为的foo属性y分配一个值’foovalue’。

一般而言,将评估方括号中的 表达式toString()调用其方法。该值用作属性名称。

在点属性访问方法中,不评估标识符,因此:

y.bar = 'bar value';

创建一个bar具有值的属性bar value

如果要创建数字属性,则:

y[5] = 5;

将评估5,如果发现它不是字符串,则调用(或多或少)Number(5).toString()返回字符串5,该字符串用于属性名称。然后5为其分配值,该值是一个数字。



 类似资料:
  • 问题内容: Douglas Crockford喜欢说在javascript原型面向对象语言中不需要。 他解释说,添加这些代码只是为了使来自基于类(即“ 经典 ”)的面向对象的编程语言的人们感到某种程度的舒适: JavaScript中,我们很难雅 JavaScript是一种原型语言,但是它有一个运算符,试图使它看起来像古典语言。这往往会使程序员感到困惑,从而导致一些有问题的编程模式。 您无需在Jav

  • 我想解析一些JSON,但一个键要么是字符串,要么是对象。 这是我当前的结构:https://github.com/PhillippOhlandt/pmtoapib/blob/master/CollectionItemRequest.go#L10 在这里,“Url”属性不仅可以是字符串,还可以是对象。 我开始为它创建一个自己的结构,覆盖对象案例。 但是这样字符串版本就不行了。有没有一种方法既能处理这

  • 如果我有: 如何在myKey上访问myObj?

  • 所以我们有一个例子,我们会有一个对象,其中key是id(int),值是字符串。但我们注意到,大多数时候,我们根据字符串查找id,所以我们决定将其反转并使字符串成为key,值是id。因为这样就不用遍历每个项目并比较值,我们可以只执行。下面是我们所做的示例。 下面是旧实现的示例: 以下是新实现的示例: 我知道现在字符串是键,可以为相同的字符串获取相同的id。但是现在这个字符串可能非常大(可能性很小,但

  • 问题内容: 您可以使用Python字典等JavaScript对象。真的吗?对象中键查找的性能如何?是O(1)吗?向对象添加键也是恒定时间(散列)吗? 问题答案: 该V8设计文档暗示查询将至少这快,如果不是更快: 大多数JavaScript引擎使用类似字典的数据结构作为对象属性的存储 -每个属性访问都需要动态查找以解析属性在内存中的位置。这种方法通常使访问JavaScript中的属性比访问诸如Jav

  • 问题内容: 阅读了SCJP Tip Line的作者Corey McGlone在javaranch网站上的文章后,我都感到困惑。从字面上看是Strings,由Kathy Sierra(javaranch的联合创始人)和Bert Bates共同编写的《 SCJP Java 6程序员指南》。 我将尝试引用Corey先生和Kathy Sierra女士对String Literal Pool的引用。 1.根