首页 > TAG信息列表 > 不可枚举
可枚举属性&对某些函数执行结果分析
JavaScript中的可枚举属性与不可枚举属性 enumerable:true 可枚举 Object.defineProperty(kxy, "sex", { value: "female", enumerable: false }); 属性的枚举性会影响以下几个函数的结果: for…in :遍历对象的每一个可枚举属性,包括原型链上面的可枚举属性(也是可枚举JS获取对象属性的各种方式和区别(自身/原型属性、可枚举/不可枚举)
对象的属性有自身属性和原型属性之分,自身属性是对象自己的属性,原型属性是存在于原型链上的属性。 可以用Object.prototype.hasOwnProperty()判断是自身属性还是原型属性。(in操作符只可以判断对象是否有某个属性,不能判断是自身的,还是原型上的) 对象属性也有可枚举和不可枚举之分,可枚一道面试题:怎么判断一个对象是{}
这个问题有个坑:假如对象的属性是通过Object.defineproperty()定义的,然后设置为不可枚举。 这种情况下: 1)Object.keys()不可以获取到不可枚举属性 2)for in 不可遍历不可枚举属性 3)JSON.stringify忽略不可枚举属性 所以上面几种都不可用,而正确的应该是用Reflect.ownKeys()这个方法,这JSON.stringify 函数与 Object.defineProperty 的坑:不可枚举属性无法写入
例子 const obj = {} Object.defineProperty(obj, 'prop', { value: 10 }) JSON.stringify(obj) // 输出:{} 原因 好多博客介绍的是 “不可枚举” 的属性不会写入字符串,我也知道 function、日期、正则等无法写入,可万万没想到自己写的 Object.defineProperty 函数也是造成 JSON