本文概述
到日期为止, 有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比较所需的时间的两倍。
最后, 我应该使用哪种方法?除非你使用庞大的数据集, 否则该方法无关紧要。玩得开心
评论前必须登录!
注册