Chrome中出现意外的Javascript for循环行为

时间:2016-04-13 18:57:04

标签: javascript google-chrome

所以我在chrome选项卡中获得了令人难以置信的奇怪的java脚本行为。该页面是登录后面的,所以我不能发布它,但有人可以解释究竟发生了什么???

for(var z in ""){ console.log(z) }
contains
//undefined

嗯...

var key = ""

for(var i in key){ console.log(i) }
contains
//undefined
Object.getOwnPropertyNames(key)
//["length"]
Object.getOwnPropertySymbols(key)
//[]
window[key]
//undefined

起初我认为这是其中一个JS行为,并准备将其提交给JSWTF,但行为在另一个chrome选项卡中正常运行:

for(var i in ""){ console.log('ran',i) }
//undefined

如何将值分配给空字符串? 它在哪里? 什么是for循环呢?

编辑:firefox中的同一页面在控制台中返回预期的行为。我还没有测试过其他浏览器

1 个答案:

答案 0 :(得分:1)

原始页面上有an ES6 shim,它将contains()函数添加到String原型中。您可以通过执行以下操作来自己完成此操作:

String.prototype.contains = 
    function(e) {
        return this.indexOf(e) > -1;
    };

最终标准化的ES6函数是includes(),因此当开发人员更新垫片时,您可能会看到将来函数名称发生更改。