gpt4 book ai didi

Javascript for-in 和内置属性

转载 作者:行者123 更新时间:2023-12-02 06:42:12 25 4
gpt4 key购买 nike

为什么在使用 for-in 控制 block 时,javascript 对象的内置属性没有被迭代,而用户定义的属性却被迭代?

例如:

var y = 'car';
for (var j in y)
{
console.log(j);
}

将打印:

0
1
2

即使 String.prototype 具有长度、替换、子字符串等属性。

但是,如果扩展原型(prototype),任何新属性都会被迭代:

String.prototype.foo = 7;
var y = 'car';
for (var j in y)
{
console.log(j);
}

将打印:

0
1
2
foo

最佳答案

基本上,内置属性在内部被标记为“不可枚举”。这自然意味着它们不会被枚举。

编辑:正如 Andy 友好地指出的那样,您可以使用 defineProperty 在当前版本的 JavaScript 中设置 enumerable : false。但是,Opera 似乎根本不支持这个; IE 8 仅在 DOM 对象上支持它,Safari 仅在-DOM 对象上支持它(defineProperty on MDN(查看文件底部以获得浏览器支持))。

所有这些跨浏览器的乐趣意味着如果您需要一致的浏览器支持,您可能不应该依赖这种行为。

这是定义不可枚举属性的方法:

Object.defineProperty(String.prototype, "foo", {value : 7, enumerable : false});

您实际上不需要包含 enumerable : false——调用 defineProperty 时默认为 false

关于Javascript for-in 和内置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5940837/

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