调试别人的代码时,发现了这个问题:
一个if-in
语句如何变为true?只发生在Chrome中,IE则返回false。
调试别人的代码时,发现了这个问题:
一个if-in
语句如何变为true?只发生在Chrome中,IE则返回false。
它在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
}
files
属性等效的功能?”,那么答案是否定的。它不支持文件API。微软在这个特定的领域来得比较晚。 - T.J. Crowderin
运算符可用于测试对象内部属性的存在性:
var obj = {
foo: 'baz'
};
console.log('foo' in obj); // true
更多信息:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/in
if(exists(fileInput.files))
。这在IE浏览器中不可用,因为fileInput从IE10开始才被包含。 - Ron van der Heijden