gpt4 book ai didi

javascript - 既然我无法观察到,一个简单的 JS 对象怎么可能包含虚假属性?

转载 作者:行者123 更新时间:2023-12-01 00:24:57 25 4
gpt4 key购买 nike

在谈论 Map 相对于普通旧 JS 对象的优势时,MDN says :

An Object has a prototype, so there are default keys in the map that could collide with your keys if you're not careful. As of ES5 this can be bypassed by using Object.create(null), but this is seldom done.

这是人们通常在互联网上警告的事情。 (另一个经常推荐的解决方案是每次迭代对象的键时都进行 hasOwnProperty 检查)。

由于我无法观察到这个问题,所以我很难理解它。

请参阅下面的代码片段 - 即使我没有通过 Object.create(null) 创建“ map ”,似乎也没有出现任何虚假属性! (我既没有使用实际的Map,也没有包括hasOwnProperty检查。)

const dict = {a: 1, b: 2, c: 3}

document.body.innerHTML = `<pre><code></code></pre>`

for(const key in dict) {
const entry = `dict['${key}'] == ${dict[key]} // true\n`
document.querySelector('code').textContent += entry
}

MDN 文档何时以及如何发出有关 list 的警告?

最佳答案

当对象的原型(prototype)被修改时就会发生这种情况,就像过去许多库所做的那样。您曾经有这样的代码:Array.prototype.merge = function() {};。因此,现在的建议是永远不要调整 native 原型(prototype),而是首先子类化/扩展对象。例如class MyObj extends Object

Object.prototype.serialize = function() {};

const dict = {a: 1, b: 2, c: 3}

document.body.innerHTML = `<pre><code></code></pre>`

for(const key in dict) {
const entry = `dict['${key}'] == ${dict[key]} // true\n`
document.querySelector('code').textContent += entry
}

关于javascript - 既然我无法观察到,一个简单的 JS 对象怎么可能包含虚假属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59093602/

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