, 'B', 'C']; a.name = 'Hello'; for (let x in a) { console.log(x); // '0','1','2','name' } for (let y of a) { console.log(y); // 'A', 'B', 'C' }

for...in遍歷的對象的屬性名稱,一個Array數組也是一個對象,它的每一個對象的索引值被視爲一個屬性。當手動給Array對象添加額外的屬性name後,for…in循環將把name包括在內,但Array的length屬性卻不包括在內。而for…of循環只循環集合自己的元素。數組

2. object.keys()

該方法是對象內置的屬性方法,它返回一個數組,數組內包括對象內可枚舉屬性以及方法名稱。數組中屬性名的排列順序和使用 for…in 遍歷該對象時返回的順序一致。svg

// 建立對象
let person = {
	name: "aaa",
	age: "16",
	sayHello: function() {
		console.log("Hello");
	}
};
// 經過調用Object.keys()方法,獲取對象上已定義(可枚舉)的屬性和方法
let keys = Object.keys(person);
console.log(keys); 
//輸出 (3) ["name", "age", "sayHello"]

3. Object.getOwnPropertyNames()

該方法返回一個指定對象全部自身屬性的屬性名(包括不可枚舉屬性但不包括Symbol值做爲名稱的屬性)組成的數組。 數組中枚舉屬性的順序與經過for...in循環(或Object.keys() 迭代該對象屬性時一致,不可枚舉屬性的順序未定義。spa

// 建立對象
let person = {
	name: "aaa",
	age: "16",
	sayHello: function() {
		console.log("Hello");
	}
};
let keys = Object.getOwnPropertyNames(person);
console.log(keys);  
// 輸出 keys ["name", "age", "action"]

嗯,基本就這樣吧,後來一想實際上是很基礎很基礎的東西了,居然沒想起來,最近真的要好好惡補基礎了…code