javascript 属性检测

这篇博客主要探讨了JavaScript中的属性检测,包括本地属性和本地可枚举属性。文章指出,即使属性判断为true,也不一定意味着可以使用for...in循环或Object.keys()方法进行枚举,特别是当属性键为Symbol类型时。
摘要由CSDN通过智能技术生成
// 测试数据定义
let symbolKey = Symbol('symbolKey');
function Obj(){
	this.ownKey = 1;
	this[symbolKey] = 2;
}
Obj.prototype.prototypeKey = 3;
let o = new Obj();
Object.defineProperty(o, 'unenumerableKey', {
	enumerable: false,
	value: 4
})
  1. in 本地属性或继承属性(Reflect.has(o, prop)

    'ownKey' in o;			// true
    symbolKey in o;			// true
    'prototypeKey' in o;	// true
    'unenumerableKey' in o;	// true
    'undefinedKey' in o;	// false 本地、原型链上都没有的属性
    'ownKey ' in o;			// false 错误的空格
    
  2. Object.prototype.hasOwnProperty() 本地属性

    o.hasOwnProperty('ownKey');			// true
    o.hasOwnProperty(symbolKey);		// true
    o.hasOwnProperty('prototypeKey');	// false 非本地属性
    o.hasOwnProperty('unenumerableKey');// true
    o.hasOwnProperty('undefinedKey');	// false 本地、原型链上都没有的属性
    o.hasOwnProperty('ownKey ');		// false 错误的空格
    
  3. Object.prototype.propertyIsEnumerable() 本地属性且可枚举属性

    o.propertyIsEnumerable('ownKey');			// true
    o.propertyIsEnumerable(symbolKey);			// true
    o.propertyIsEnumerable('prototypeKey');		// false 非本地属性
    o.propertyIsEnumerable('unenumerableKey');	// false 不可枚举属性
    o.propertyIsEnumerable('undefinedKey');		// false 本地、原型链上都没有的属性
    o.propertyIsEnumerable('ownKey ');			// false 错误的空格
    

注: Object.prototype.propertyIsEnumerable() 判断为true的属性不一定可以用 for...inObejct.keys(o) 枚举(例如:Symbol做键的本地属性)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值