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

本文概述

  • 与typeof的比较
  • hasOwnProperty
  • in
  • 哪种方法更快
到日期为止, 有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}// Falsevar 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}// Falsevar 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的比较似乎要快得多。
如何在JavaScript中检查对象是否具有正确的属性

文章图片
之前的代码片段执行了1000000(1M)次, 表明in和hasOwnProperty方法所花费的时间大约是与typeof和undefined比较所需的时间的两倍。
【如何在JavaScript中检查对象是否具有正确的属性】最后, 我应该使用哪种方法?除非你使用庞大的数据集, 否则该方法无关紧要。玩得开心

    推荐阅读