gpt4 book ai didi

javascript - JavaScript 中的属性

转载 作者:太空宇宙 更新时间:2023-11-04 03:10:44 25 4
gpt4 key购买 nike

具有属性的对象相当于关联数组吗?

属性名称可以包含标点符号吗?

obj['http://google.com'] = { ... }

我仍然可以像数组一样访问它 - obj['http://google.com'],但由于斜线和其他内容,不能像对象一样访问它。

基本上我是在问使用这样的对象是否被认为是一种不好的做法。如果是,是否有其他获取关联数组的替代方法?

最佳答案

在 JavaScript 中使用对象作为关联数组存在风险。考虑:

var foo = {};

function putFoo(x, v) {
foo[x] = v;
}

function getFoo(x) {
return foo[x];
}

putFoo("a", "blah");
console.log("a", getFoo("a")); // Yes, "a" is there.
console.log("b", getFoo("b")); // No, "b" is not there.
console.log("toString", getFoo("toString")); // what?

一切都很顺利,直到您到达最后一个console.logtoStringObject.prototype 中的一个方法,对象字面量可以从中获取其方法,因此即使您从未在对象中放置任何名为 toString 的内容,您也可以在控制台上获得一个函数。

您可以通过使用 Object.create(null) 创建对象来解决此问题。这将创建一个没有原型(prototype)的对象,因此不会被 Object 的成员污染。 (关于 Object.create 的文档。)

Here's a question探讨性能问题。简而言之,使用 Object.create(null) 创建对象比使用 {} 创建对象更昂贵,但访问由 Object.create(null) 创建的对象上的键比访问使用 {} 创建的对象更快。

关于javascript - JavaScript 中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20723691/

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