对于js中枚举属性的判断方式(对象上属性、原型上属性、可枚举不可枚举属性)

var parent = function() {
    this.name = 'Jack';
    this.age = '45';

}
parent.prototype.classify = 'person'
parent.prototype.classify_enumerable = 'person_enumerable'
var myobject = new parent();

Object.defineProperty(myobject, "classify_enumerable", { enumerable: false, value: "classify_enumerable" });
Object.defineProperty(myobject, "enumerable_true", { enumerable: true, value: "enumerable_true" });
Object.defineProperty(myobject, "enumerable_false", { enumerable: false, value: "enumerable_false" });
c(myobject)
// for in 会枚举包括原型链上属性在内的属性全部列举出来
for (var key in myobject) {
    c(key + ':' + myobject[key])
}

//propertyIsEnumerable 可以对所有属性判断是否可以枚举
c(myobject.propertyIsEnumerable('enumerable_true'))
c('classify')
c(myobject.propertyIsEnumerable('classify_enumerable'))

//Object.keys 只能枚举非原型链上的key值
c('Object.keys')
c(Object.keys(myobject))
// Ojbect.getOwnPropertyNames列举非原型链上所有属性
c('Object.getOwnPropertyNames')
c(Object.getOwnPropertyNames(myobject))

//in 所有属性只要在myobject上,包括原型链以及非枚举属性,均为true
c('name' in myobject)
c('age' in myobject)
c('classify' in myobject)
c('enumerable_true' in myobject)
c('enumerable_false' in myobject)

//Object.getOwnProperty 所有非原型链属性只要在myobject上,包括非枚举属性,均为true
c('Objece.hasOwnProperty')
c(myobject.hasOwnProperty('name'))
c(myobject.hasOwnProperty('age'))
c(myobject.hasOwnProperty('classify')) //false 
c(myobject.hasOwnProperty('enumerable_true'))
c(myobject.hasOwnProperty('enumerable_false'))
//该函数用来简写版本的console.log
function c(pro) {
    console.log(pro)
}

打印结果

parent { name: 'Jack', age: '45', enumerable_true: 'enumerable_true' }
name:Jack
age:45
enumerable_true:enumerable_true
classify:person
true
classify
false
Object.keys
[ 'name', 'age', 'enumerable_true' ]
Object.getOwnPropertyNames
[
  'name',
  'age',
  'classify_enumerable',
  'enumerable_true',
  'enumerable_false'
]
true
true
true
true
true
Objece.hasOwnProperty
true
true
false
true
true
[Finished in 0.1s]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值