Object.keys(obj)
參數(shù)obj:要返回其可枚舉屬性的對象
返回值:對象本身的可枚舉屬性組成的數(shù)組
for..in 語句
以任意順序遍歷一個對象的除symbol以外的可枚舉屬性
區(qū)別
object.keys(obj)只包括對象本身的屬性
for...in遍歷包括對象繼承自原型對象的屬性
實例
// 構(gòu)造函數(shù)
function test(name, age) {
this.name = name;
this.age = age;
}
// 實例化一個對象
const mytest = new test('zs', 18)
// 為構(gòu)造函數(shù)添加原型方法
test.prototype.action = () => {
console.log('我是test原型上的方法')
}
const arr = ['a', 'b', 'c']
// 傳入夠著函數(shù),返回空數(shù)組
console.log(Object.keys(test)) // []
// 傳入實例對象,返回實例對象的所有屬性名
console.log(Object.keys(mytest)) // ['name','age']
// 傳入數(shù)組,返回索引
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() 方法會直接在一個對象上定義一個新屬性,
或者修改一個對象的現(xiàn)有屬性,并返回此對象
//定義一個不可枚舉的屬性
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}