Object.keys(obj)
参数obj:要返回其可枚举属性的对象
返回值:对象本身的可枚举属性组成的数组
for..in 语句
以任意顺序遍历一个对象的除symbol以外的可枚举属性
区别
object.keys(obj)只包括对象本身的属性
for...in遍历包括对象继承自原型对象的属性
实例
// 构造函数
function test(name, age) {
this.name = name;
this.age = age;
}
// 实例化一个对象
const mytest = new test('zs', 18)
// 为构造函数添加原型方法
test.prototype.action = () => {
console.log('我是test原型上的方法')
}
const arr = ['a', 'b', 'c']
// 传入够着函数,返回空数组
console.log(Object.keys(test)) // []
// 传入实例对象,返回实例对象的所有属性名
console.log(Object.keys(mytest)) // ['name','age']
// 传入数组,返回索引
console.log(Object.keys(arr)) // ['0','1','2']
// for in 遍历实例对象,原型中的属性也会被遍历
for (item in mytest) {
console.log(item) // name age action
}
js对象属性中的可枚举性?
在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的。
如果某个对象的属性是不可枚举的,那么以下三个方法无法作用到这个属性:
for…in
Object.keys()
JSON.stringify
如何给对象定义一个不可枚举的属性
Object.defineProperty() 方法会直接在一个对象上定义一个新属性,
或者修改一个对象的现有属性,并返回此对象
//定义一个不可枚举的属性
Object.defineProperty(mytest,'sex',{
value:'male',
enumerable: false
})
//通过对象.属性的形式可以直接访问到
console.log(mytest.sex)
// 通过for...in、Object.keys(mytest)、JSON.stringify 无法作用到
for(item in mytest){
console.log(item) // name age action
}
console.log(Object.keys(mytest)) //['name','age']
console.log(JSON.stringify(mytest)) // {"name":"zs","age":18}
网友评论