上面这段代码里的每个判断,实际上是通过给定的名字来检查属性的值,而并非判断给定的名字所指的属性是否存在。在第一个判断中,当属性值为假值时结果会出错,比如: 0 、 ""(空字符串) 、 false 、 null 和 undefined ,毕竟这些都是属性的合法值。
判断属性是否存在的最好的方法是使用 in 运算符。 in 运算符仅仅会简单地判断属性是否存在,而不去读属性的值,如果实例对象的属性存在、或者继承自对象的原型, in 运算符都会返回 true 。比如:
var object = { count: 0, related: null }; // 好的写法 if ("count" in object) { // 这里的代码会执行 } // 不好的写法:检测假值 if (object["count"]) { // 这里的代码不会执行 } // 好的写法 if ("related" in object) { // 这里的代码会执行 } // 不好的写法,检测是否为 if (object["related"] != null) { // 这里的代码不会执行 }
如果你只想检查实例对象的某个属性是否存在,则使用 hasOwnProperty() 方法。所有继承自 Object 的 JavaScript 对象都有这个方法,如果实例中存在这个属性则返回 true (如果这个属性只存在于原型里,则返回 false )。需要注意的是,在 IE 8 以及更早版本的 IE 中,DOM 对象并非继承自 Object,因此也不包含这个方法。也就是说,你在调用 DOM 对象的 hasOwnProperty() 方法之前应当先检测其是否存在。
// 对于所有非 DOM 对象来说,这是好的写法 if (object.hasOwnProperty("related")) { // 执行这里的代码会 } // 如果你不确定是否为 DOM 对象,则这样来写 if ("hasOwnProperty" in object && object.hasOwnProperty("related")) { // 执行这里的代码会 }
因为存在 IE 8 以及更早版本的 IE 的情形,在判断实例对象的属性是否存在时,我更倾向于使用 in 运算符,只有在需要判断实例属性时才会用到 hasOwnProperty() 。
不管你什么时候需要检测属性的存在性,请使用 in 运算符或者 hasOwnProperty() 。这样做可以避免很多 bug。
以上所述是小编给大家介绍的JavaScript检测原始值、引用值、属性,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
您可能感兴趣的文章: