用于检查对象属性的Javascript“not in”运算符

时间:2011-11-01 20:25:35

标签: javascript object properties operators

JavaScript中是否存在任何“not in”运算符来检查对象中是否存在属性?我无法在Google或SO周围找到任何相关信息。这是我正在处理的一小段代码,我需要这种功能:

var tutorTimes = {};
$(checked).each(function(idx) {
    id = $(this).attr('class');
    if(id in tutorTimes) {

    }
    else {
        //Rest of my logic will go here
    }
});

正如你所看到的,我会把所有内容都放在else语句中。设置if / else语句只是为了使用else部分......

,这似乎是错误的

4 个答案:

答案 0 :(得分:266)

  

我设置if / else语句只是为了使用else部分......

只是否定你的情况,你会在else内得到if逻辑:

if (!(id in tutorTimes)) { ... }

答案 1 :(得分:26)

正如Jordão所说,只是否定它:

if (!(id in tutorTimes)) { ... }

注意:上述测试是否tutorTimes具有在原型链中以id,任何地方指定名称的属性。例如,"valueOf" in tutorTimes返回 true ,因为它在 Object.prototype 中定义。

如果要测试当前对象中是否存在属性,请使用hasOwnProperty:

if (!tutorTimes.hasOwnProperty(id)) { ... }

或者,如果你有一个 hasOwnPropery 的密钥,你可以使用它:

if (!Object.prototype.hasOwnProperty.call(tutorTimes,id)) { ... }

答案 2 :(得分:13)

两种快速的可能性:

if(!('foo' in myObj)) { ... }

if(myObj['foo'] === undefined) { ... }

答案 3 :(得分:0)

我个人找到

if (id in tutorTimes === false) { ... }

更容易阅读
if (!(id in tutorTimes)) { ... }

但两者都可以。