当前位置: 移动技术网 > IT编程>开发语言>JavaScript > JavaScript的检测属性介绍

JavaScript的检测属性介绍

2018年09月29日  | 移动技术网IT编程  | 我要评论

中美高铁项目终止,雷政富 ed2k,胡瓜李璇事件

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前端精髓为您提供,喜欢的同学记得点击收藏或者点赞哦!

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网