翻看一段源码时发现这样一种写法,不知道干什么用的,感觉多此一举,有人知道为什么要这样写吗
IS_DONTENUM_BUGGY = (function() { for (var p in { toString: 1 }) { if (p === 'toString') { return false; } } return true; })(),
翻看一段源码时发现这样一种写法,不知道干什么用的,感觉多此一举,有人知道为什么要这样写吗
IS_DONTENUM_BUGGY = (function() { for (var p in { toString: 1 }) { if (p === 'toString') { return false; } } return true; })(),
16 回答2.8k 阅读✓ 已解决
6 回答4.2k 阅读✓ 已解决
14 回答5.5k 阅读
7 回答1.8k 阅读
14 回答2k 阅读
3 回答987 阅读✓ 已解决
6 回答1.1k 阅读✓ 已解决
涉及到一个概念DontEnum(ES5里称之为Enumerable),即属性不能被for..in循环枚举
for..in不会枚举出
toString,
isPrototypeOf,
valueOf
之类的内置属性,它们是不可枚举的
如果我们重写它们,不同的浏览器(没错,我就是说的IE)结果就会有分歧,需要IS_DONTENUM_BUGGY进行标识。
详情 戳这里