在讀別人的代碼的時候發(fā)現(xiàn)了使用了Object.keys(obj)的函數(shù)路鹰,因此記錄下用法
Object.keys(obj)會返回一個由傳入對象的可枚舉屬性 組成的數(shù)組,數(shù)組名的排列順序和使用for...in...循環(huán)遍歷該對象返回的順序一致略水。
區(qū)別: for...in....循環(huán)還會枚舉其原型鏈上的屬性
語法
Object.keys(obj)
obj:傳入的對象
返回值:傳入對象可枚舉屬性組成的數(shù)組
例子
//數(shù)組
var a=["a","b","c"]
Object.keys(a) //輸出["0","1","2"]
//對象
var obj={a:1,b:2,c:3}
Object.keys(obj) //輸出["a","b","c"]
//不可枚舉屬性
var obj1={
{},
{getFoo:function(){value:function(){return this.foo}}}
}
obj1.foo="1"
Object.keys(obj1) //輸出foo
注意
在ES5中,如果此方法的參數(shù)不是一個對象,而是一個原始值伞鲫,則會拋出TypeError库物,在ES2015中霸旗,非對象的參數(shù)會強制轉(zhuǎn)換為一個對象
與for... in..的區(qū)別
在上文中對比了Object.keys()和for...in..下面簡單的說明下for..in..的使用
語法
for(variable in object){...}
參數(shù)
variable:每次迭代時,將不同的屬性名分配給變量
object:需要迭代屬性的對象
描述
for..in..枚舉只遍歷可枚舉的屬性戚揭,循環(huán)將迭代對象的所有可枚舉屬性和從他的構(gòu)造函數(shù)的prototype繼承而來
注意
for in不應(yīng)該用來迭代一個下標很重要的Array诱告,不能保證返回的一定是按照循序的索引,但是他會返回所有可枚舉的屬性民晒,包括非整數(shù)名稱和繼承的
例子
var a={a:'1',b:'2',c:'3'}
function test(){this.color='red'}
test.prototype=a
var obj=new test()
var obj=new test() //輸出 color a b c
Object.keys(obj) //輸出["color"]