gpt4 book ai didi

javascript - jslint错误: Unexpected 'in' .与undefined比较,或者使用hasOwnProperty

转载 作者:行者123 更新时间:2023-12-03 03:45:21 24 4
gpt4 key购买 nike

我有以下 javascript 函数,但 jslint 检查失败

  function hasActiveX() {
return ('ActiveXObject' in window);
}

jslint 错误

Unexpected 'in'. Compare with undefined, or use the hasOwnProperty method instead.

我应该忍受 jslint 错误,还是有更好的方法来确定 ActiveXObject?我找不到 jslint 标志来跳过此检查?

最佳答案

忽略该错误。 “in”运算符在 ECMA 262-5.1 / June 2011 中有明确定义。秒-11.8.7

'someProperty' in anObject 似乎只有三种结果,其中之一是:truefalse >TypeError 异常被抛出。当其计算结果为 true 时,则 anObject 中肯定存在 'someProperty' 。当它的计算结果为 false 时,anObject 中肯定不存在 'someProperty' 。当抛出 TypeError 时,anObject 中肯定不存在 'someProperty',因为 anObject 要么为 null,要么根本不是对象。这一切对我来说似乎都很清楚。当我想知道一个对象是否有一个属性,并且我不关心该属性是该对象自己的属性还是被继承时,并且我不关心该属性的值是什么,那么我只需查找 对象中的“someProperty”

警告

警告:有些人会让您检查 anObject.someProperty !== undefined 但这并不是真正检查对象是否具有该属性。它所做的是检查对象是否具有属性并且该属性的值NOT未定义。有些人会让您检查 anObject.hasOwnProperty('someProperty'); 但这只会告诉您该对象是否具有该属性并且具有 以某种方式继承了它。不相信我?请尝试以下操作:

console.log(document.body.tagName);
// BODY

console.log(document.body.hasOwnProperty('tagName'));
// false, it's inherited

console.log('tagName' in document.body);
// true, it does have the property

document.body.wobbles = undefined;
// new property added to document.body

console.log('wobbles' in document.body);
// true, it does have the property

console.log(document.body.wobbles !== undefined);
// false, the value really IS undefined

我写了一篇关于“in”运算符的文章,其中有更多详细信息。如果您想阅读它,请访问: http://matthewkastor.blogspot.com/2012/09/Unexpected--in---Compare-with-undefined--or-use-the-hasOwnProperty-method-instead.html最重要的是,如果对象可能为空或不是对象,您应该忽略此错误并将其包装在 try catch block 中。

function hasProperty(prop, obj) {
try {
return prop in obj;
} catch(e) {
return e;
}
}

关于javascript - jslint错误: Unexpected 'in' .与undefined比较,或者使用hasOwnProperty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6824895/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com