【问题标题】:Javascript Array.remove() by John Resig - why does it enumerate in for-in statement?John Resig 的 Javascript Array.remove() - 为什么它在 for-in 语句中枚举?
【发布时间】:2017-03-17 17:09:45
【问题描述】:

我刚刚找到了John Resig's Array.remove() 函数。 [看起来他的网站没有正确解析 bb-code,所以很难阅读!]

虽然很漂亮,但问题是'remove()' 方法在加载他的代码后在每个数组的 for-in 语句中枚举。

例如,在添加他的代码之后,这样做:

var a = ["a", "b", "c"];
for (i in a)
{
    console.log(i);
}

你会得到:

0
1
2
remove

为什么 Array 对象的所有其他内置属性和方法都不枚举,有什么方法可以防止 remove() 方法发生这种情况?

Here's a jsfiddle...

【问题讨论】:

  • 请注意,该博文来自近 9 年前。这是古老的;在您确认它仍然相关之前,通常不会关注很久以前有关 JavaScript 的任何内容。
  • @Pointy 那么现在有更好的方法来删除数组元素吗?
  • 代码还不错,但关键是在过去的 9 年里,很多事情都发生了变化。我敢打赌,雷西格先生现在不会用同样的方式编写代码了。
  • 你为什么首先在数组上使用for-in?真的没有意义。我的意思是它有点有效,但它导致的问题超过了好处,而 IMO 实际上并不存在。

标签: javascript arrays methods properties


【解决方案1】:

可以使用Object.defineProperty()添加方法:

Object.defineProperty(Array.prototype, "remove", {
  value: function() { ... }
});

默认情况下,该属性的“可枚举”标志关闭,这意味着它不会出现在for ... in 循环中。

【讨论】:

  • 这正是我正在寻找的答案。谢谢!说真的,如果您知道更好/推荐的“删除”功能,我很想知道它。奇怪的是,这个功能还没有被添加到 JS 中——我认为这是一个非常明显和常见的功能。
猜你喜欢
  • 2013-01-12
  • 1970-01-01
  • 1970-01-01
  • 2017-06-01
  • 2010-09-27
  • 1970-01-01
  • 1970-01-01
  • 2011-09-19
  • 1970-01-01
相关资源
最近更新 更多