个性化阅读
专注于IT技术分析

如何在JavaScript中检查对象是否具有正确的属性

本文概述

到日期为止, 有3种方法检查对象是否具有属性:

  • 与typeof和undefined比较。
  • 使用hasOwnProperty方法。
  • 在关键字中使用。

与typeof的比较

当开发人员检查对象是否具有属性时, 检查属性的类型是否未定义是最常见的做法之一。

typeof函数返回一个以变量类型名称作为第一个参数的字符串(布尔, 对象, 未定义等)。因此, 你只需要将所需属性的值与” undefined”进行比较。

var myObject = {
    hello: "Hey"
};

if("undefined" === typeof(myObject["hello"])){
    // The property DOESN'T exists
}else{
    // The property exists
}

// Or ...

if(typeof(myObject.hello) === "undefined"){
    // The property DOESN'T exists
}else{
    // The property exists
}

// Or ...

if(typeof(myObject.hello) !== "undefined"){
    // The property exists
}else{
    // The property DOESN'T exists
}

注意:如果对象具有值为undefined的属性, 则不建议使用typeof。为避免混淆, 如果在对象中使用undefined而不是null, 请使用hasOwnProperty。

hasOwnProperty

Javascript对象通常具有hasOwnProperty本机方法。 hasOwnProperty方法返回一个布尔值, 该布尔值指示对象是否具有指定的属性作为第一个参数。

与in运算符不同, 此方法不会检查对象的原型链。

var myObject = {
   hello: "This is my hello string"
};

if(myObject.hasOwnProperty("hello")){
   // myObject has the hello property
}else{
   // myObject doesn't has hello property
}

// False
var hasPropertyHello = myObject.hasOwnProperty("monkey");

// Use hasOwnProperty in arrays too using the index
["hello"].hasOwnProperty(0); // true
// But no the value
["hello"].hasOwnProperty("hello"); // false

in

如果指定的属性在指定的对象中, 则in运算符将返回true。请注意, 可以在对象和数组中使用。

var myObject = {
   hello:"Hello message"
};

if("hello" in myObject){
  // Hello property exists
}else{
  // Hello property exists
}

// False
var isInObject = ("trello" in myObject);

// Use in in arrays too using the index
(0 in ["hello"]); // true
// But not the value
("hello" in ["hello"]); // false

哪种方法更快

如果我们真的想知道哪个更快, 则只有在使用扩展循环和大型对象时, 你才会注意到其中的区别。

根据测试, 与hasofwnProperty和in相比, 与typeof的比较似乎要快得多。

比较有对象

之前的代码片段执行了1000000(1M)次, 表明in和hasOwnProperty方法所花费的时间大约是与typeof和undefined比较所需的时间的两倍。

最后, 我应该使用哪种方法?除非你使用庞大的数据集, 否则该方法无关紧要。玩得开心

赞(0)
未经允许不得转载:srcmini » 如何在JavaScript中检查对象是否具有正确的属性

评论 抢沙发

评论前必须登录!