代码改变世界

JS存在性

2017-04-20 12:27  心猿意‘码’  阅读(167)  评论(0编辑  收藏  举报
var myObject = {
             a:2
         };
         ("a" in myObject);//true
         ("b" in myObject);//false
         myObject.hasOwnProperty("a");//true
         myObject.hasOwnProperty("b");//false

in 操作符会检查属性是否在对象及其[[prototype]]原型链中,hasOwnProperty(...)只会检查属性是否在对象中
当对象没有连接到 Object.prototype ,可以用 Object.prototype.hasOwnProperty.call(myObject,"a")

注意:in 操作符检查的是某个属性名是否存在,对于数组 [2,4,6]来说,包含的属性名是 0,1,2

另外:

propertyIsEnumerable(...)会检查给定的属性是否存在于对象中(而不是原型链上),并且满足可枚举性为true
Object.keys(...)返回一个数组,包含所有可枚举属性
Object.getOwnPropertyNames(...)返回一个数组无论是否可枚举,包含所有属性