1.從 ECMAScript 5 開始,有三種原生的方法用于列出或枚舉對象的屬性:
for...in:該方法依次訪問一個對象及其原型鏈中所有可枚舉的屬性
let obj = {a:1,b:2,c:3};for(let iinobj) {? console.log("obj."+ i +" = "+ obj[i]);}// "obj.a = 1"http:// "obj.b = 2"http:// "obj.c = 3"
Object.keys(O):該方法返回一個數組,它包含了對象O自身的所有可枚舉屬性的名稱
letobj = {0:"a",1:"b",2:"c"};console.log(Object.keys(obj));? ? //["0","1","2"]
Object.getOwnPropertyNames(O):該方法返回一個數組,它包含了對象O所有擁有的屬性(包括不可枚舉)的名稱
varobj =Object.create({}, {getFoo: {value:function(){returnthis.foo; },enumerable:false}});obj.foo =1;obj.prototype = {a:1,b:2,c:3};console.log(Object.getOwnPropertyNames(obj).sort());//["foo", "getFoo", "prototype"]
console.log(Object.getOwnPropertyNames('asdfgc'));//["0","1","2","3","4","5","length"]
2.區(qū)別
如果你只要獲取到可枚舉屬性,查看Object.keys或用for...in循環(huán)(還會獲取到原型鏈上的可枚舉屬性,不過可以使用hasOwnProperty()方法過濾掉)
functionobject(){this.color ="red";}object.prototype = {a:1,b:2,c:3};varobj =newobject();for(varpropinobj) {console.log(prop);// "color" "a" "b" "c"}for(varpropinobj) {if( obj.hasOwnProperty(prop)){console.log(prop);// "color"} }console.log(Object.keys(obj));//["color"]
前端學習群:543761540? 點擊鏈接加入群【前端交流總群③】:https://jq.qq.com/?_wv=1027&k=47bGc0u