欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JavaScript的检测属性介绍

程序员文章站 2023-10-31 10:21:46
javascript对象可以看做属性的集合,我们经常会检测集合中成员的所属关系——判断某个属性是否存在于某个对象中。可以通过in运算符、hasownpreperty()和pr...

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