js 筆記整理

Js中for、for-in、forEach以及for-of的用法及特性對比

for-in

for...in以任意順序遍歷一個對象的可枚舉屬性。因此for-in不適合用來迭代一個Array。同時,for-in是能夠遍歷對象中全部可枚舉屬性的,包括原型鏈上的可枚舉屬性。javascript

let ret = [];
array.num = 6;  //  對象上直接添加屬性
Array.prototype.num = 6;  // 原型鏈中添加屬性
for(let i in array){
  ret.push(array[i])
}
console.log(ret)   //  [ 1, 2, 3, 4, 5, 6, 7 ]

  

若是能夠地設置屬性爲不可枚舉,那麼for-in循環將不會遍歷到這個屬性java

 

let ret = [];
Object.defineProperty(array,"num",{
  enumerable: false,  // 設置屬性不可遍歷
  value: 8
})
for(let i in array){
  ret.push(array[i])
}
console.log(ret)  //  [ 1, 2, 3, 4, 5 ]

 

解決方法:使用hasOwnProperty()
hasOwnProperty()方法能夠檢測一個屬性是存在於實例中,仍是存在於原型中。這個方法只在給定屬性存在於對象實例中時,纔會返回true。 數組

/數組
var arr = ["星期一","星期二","星期三"];
Array.prototype.something = ["放假","休息咯"];
for (var i in arr){
	if(arr.hasOwnProperty(i)){ 
		console.log(arr[i])
	}
}

  

for(最原始的寫法)、 支持 break、continue和return語句)、prototype

forEach 數組的方法,arr.forEach;  forEach(ES5,可是它不支持使用break、continue和return語句)、code

for…in循環數組索引、對象的屬性,但使用 for…in 原型鏈上的全部屬性都將被訪問,用 hasOwnProperty() 方法解決。對象

for…of(ES6,循環數組的元素值)這三個是循環數組(對象數組)的;

blog

定義變量的6種方式

ES5 只有兩種聲明變量的方法:索引

var命令和function命令。ip

ES6 除了添加letconst命令,原型鏈

還有 import命令和class命令。

相關文章
相關標籤/搜索