摘要:JavaScript对象可以看做属性的集合,我们经常会检测集合中成员的所属关系——判断某个属性是否存在于某个对象中。可以通过in运算符、hasOwnPreperty()和propertyIsEnumerable()方法来完成这个工作,甚至仅通过属性查询也可以做到这一点。

脚本宝典收集整理的这篇文章主要介绍了

js实例教程-JavaScript的检测属性介绍

脚本宝典小编觉得挺不错的,现在分享给大家,也给大家做个参考,希望能帮助你少写一行代码,多一份安全和惬意。

小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过。

JavaScript对象可以看做属性的集合,我们经常会检测集合中成员的所属关系——判断某个属性是否存在于某个对象中。可以通过in运算符、hasOwnPreperty()和propertyIsEnumerable()方法来完成这个工作,甚至仅通过属性查询也可以做到这一点。

in运算符的左侧是属性名(字符串),右侧是对象。如果对象的自有属性或继承属性中包含这个属性则返回true:

var o={x:1}

"x" in o; //true:"x"是o的属性

"y" in o; //false:"y"不是o的属性

"toString"in o;//true:o继承toString属性

对象的hasOwnProperty()方法用来检测给定的名字是否是对象的自有属性。对于继承属性它将返回false:

var o={x:1}

o.hasOwnProperty("x"); //true:o有一个自有属性x

o.hasOwnProperty("y"); //false:o中不存在属性y

o.hasOwnProperty("toString"); //false:toString是继承属性

propertyIsEnumerable()是hasOwnProperty()的增强版,只有检测到是自有属性且这个属性的可枚举性为true时它才返回true。某些内置属性是不可枚举的。通常由JavaScript代码创建的属性都是可枚举的,除非在ECMAScript 5中使用一个特殊的方法来改变属性的可枚举性,随后会提到:

var o=inherit({y:2});

o.x=1;

o.propertyIsEnumerable("x"); //true:o有一个可枚举的自有属性x

o.propertyIsEnumerable("y"); //false:y是继承来的

Object.prototype.propertyIsEnumerable("toString"); //false:不可枚举

除了使用i n运算符之外,另一种更简便的方法是使用“!==”判断一个属性是否是undefined:

var o={x:1}

o.x!==undefined; //true:o中有属性x

o.y!==undefined; //false:o中没有属性y

o.toString!==undefined; //true:o继承了toString属性

然而有一种场景只能使用in运算符而不能使用上述属性访问的方式。in可以区分不存在的属性和存在但值为undefined的属性。例如下面的代码:

var o={x:undefined} //属性被显式赋值为undefined

o.x!==undefined //false:属性存在,但值为undefined

o.y!==undefined //false:属性不存在

"x" in o //true:属性存在

"y" in o //false:属性不存在

delete o.x;//删除了属性x

"x" in o//false:属性不再存在

注意,上述代码中使用的是“!==”运算符,而不是“!=”。“!==”可以区分undefined和null。有时则不必作这种区分:

//如果o中含有属性x,且x的值不是null或undefined,o.x乘以2.

if (o.x!=null) o.x*=2;//如果o中含有属性x,且x的值不能转换为false,o.x乘以2.

//如果x是undefined、null、false、""、0或NaN,则它保持不变

if (o.x) o.x*=2;

好了,今天的文章就到这里,本文由Web前端精髓为您提供,喜欢的同学记得点击收藏或者点赞哦!

JavaScript对象可以看做属性的集合,我们经常会检测集合中成员的所属关系——判断某个属性是否存在于某个对象中。可以通过in运算符、hasOwnPreperty()和propertyIsEnumerable()方法来完成这个工作,甚至仅通过属性查询也可以做到这一点。

in运算符的左侧是属性名(字符串),右侧是对象。如果对象的自有属性或继承属性中包含这个属性则返回true:

var o={x:1}

"x" in o; //true:"x"是o的属性

"y" in o; //false:"y"不是o的属性

"toString"in o;//true:o继承toString属性

对象的hasOwnProperty()方法用来检测给定的名字是否是对象的自有属性。对于继承属性它将返回false:

var o={x:1}

o.hasOwnProperty("x"); //true:o有一个自有属性x

o.hasOwnProperty("y"); //false:o中不存在属性y

o.hasOwnProperty("toString"); //false:toString是继承属性

propertyIsEnumerable()是hasOwnProperty()的增强版,只有检测到是自有属性且这个属性的可枚举性为true时它才返回true。某些内置属性是不可枚举的。通常由JavaScript代码创建的属性都是可枚举的,除非在ECMAScript 5中使用一个特殊的方法来改变属性的可枚举性,随后会提到:

var o=inherit({y:2});

o.x=1;

o.propertyIsEnumerable("x"); //true:o有一个可枚举的自有属性x

o.propertyIsEnumerable("y"); //false:y是继承来的

Object.prototype.propertyIsEnumerable("toString"); //false:不可枚举

除了使用i n运算符之外,另一种更简便的方法是使用“!==”判断一个属性是否是undefined:

var o={x:1}

o.x!==undefined; //true:o中有属性x

o.y!==undefined; //false:o中没有属性y

o.toString!==undefined; //true:o继承了toString属性

然而有一种场景只能使用in运算符而不能使用上述属性访问的方式。in可以区分不存在的属性和存在但值为undefined的属性。例如下面的代码:

var o={x:undefined} //属性被显式赋值为undefined

o.x!==undefined //false:属性存在,但值为undefined

o.y!==undefined //false:属性不存在

"x" in o //true:属性存在

"y" in o //false:属性不存在

delete o.x;//删除了属性x

"x" in o//false:属性不再存在

注意,上述代码中使用的是“!==”运算符,而不是“!=”。“!==”可以区分undefined和null。有时则不必作这种区分:

//如果o中含有属性x,且x的值不是null或undefined,o.x乘以2.

if (o.x!=null) o.x*=2;//如果o中含有属性x,且x的值不能转换为false,o.x乘以2.

//如果x是undefined、null、false、""、0或NaN,则它保持不变

if (o.x) o.x*=2;

好了,今天的文章就到这里,本文由Web前端精髓为您提供,喜欢的同学记得点击收藏或者点赞哦!

觉得可用,就经常来吧!Javascript技巧 脚本宝典 欢迎评论哦! js技巧,巧夺天工,精雕玉琢。小宝典献丑了!

总结

以上是脚本宝典为你收集整理的

js实例教程-JavaScript的检测属性介绍

全部内容,希望文章能够帮你解决

js实例教程-JavaScript的检测属性介绍

所遇到的程序开发问题,欢迎加入QQ群277859234一起讨论学习。如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典网站推荐给程序员好友。 本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。

80%的人都看过