在Chrome浏览器中,如何使“if-in”成立?

3

调试别人的代码时,发现了这个问题:

enter image description here

一个if-in语句如何变为true?只发生在Chrome中,IE则返回false。


这是一个检查文件是否存在于fileInput中的代码。例如 if(exists(fileInput.files))。这在IE浏览器中不可用,因为fileInput从IE10开始才被包含。 - Ron van der Heijden
2个回答

5

它在Chrome中评估为true,因为fileInput DOM元素具有files属性。它是File API的一部分。在IE上它是false,因为他们只在IE10中添加了File API。我猜你一定在使用IE9或更早版本。

in运算符的作用是:检查对象是否具有给定名称的属性,无论是自己的属性还是从其原型对象继承的属性。

这里是一个纯JavaScript示例:

var obj = {foo: 42};
console.log('foo' in obj); // true
console.log('bar' in obj); // false

你经常在特性探测中看到这个用法。例如,如果你想知道用户使用的浏览器是否支持在 input 元素上使用 placeholder 属性,你可以查找反射属性:
if ('placeholder' in document.createElement('input')) {
    // It supports the placeholder attribute
}

好的,那么我如何在IE上检查此“文件”属性呢?显然,“in”无法正常工作。 - painotpi
1
它确实可以工作。旧版IE不支持文件API,这就是为什么有那个测试,以检查不支持它的浏览器。 - elclanrs
@badZoke: in在IE中运行良好。你正在使用的IE版本显然没有files属性。(根据caniuse的说法,他们只在IE10中添加了File API。) - T.J. Crowder
@badZoke:没错。IE9不支持它。 - T.J. Crowder
@badZoke:解决什么问题的变通方法?如果你的意思是“IE9是否提供与files属性等效的功能?”,那么答案是否定的。它不支持文件API。微软在这个特定的领域来得比较晚。 - T.J. Crowder
显示剩余2条评论

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接