在數組中經常使用的遍歷方法有for
for in
for of
這三種,前兩種是遍歷數組的下標,而後再經過數組下標來訪問數組的元素。其實對象意識類似的。
讓咱們來看一下數組以及對象的代碼表示。javascript
// Array let arr = ["bob", "18", "man"]; // Object let obj = { name: "bob", age: "18", sex: "man" }
能夠看到他們其實都是一組數據的集合,而且都是一組數據的集合,且不一樣元素之間都是使用逗號進行分割,惟一的區別就只是對象是使用花括號包裹着的,而後數組是使用 方括號包裹着的,再就是對象是經過屬性名(字符串)進行訪問,而對象是經過數組下標(數字)來進行訪問的。然而還有一點就是通常咱們訪問對象屬性的方式都是經過object.property
然而實際上在javascript中會被轉換成爲object["property"]
,因此咱們是否是能夠這麼理解,所謂對象,實際上就上一種特殊的數組。
恩,接下里在繼續談到數組的遍歷問題。
實際上對於數組的遍歷也可使用for in
for of
這兩種方法,前者嘛就是經過訪問對象的屬性名而後來遍歷對象,可是這有一種缺陷,就是對於對象的原型他會一直訪問下去,一直到object.prototype
也就是一直到對象原型的終點。
固然通常咱們是不但願他遍歷對象的原型的,咱們只但願遍歷這個對象自己具備的屬性,因此這是後就要用到了object
的hasOwnProperty方法,任何的對象都會從原型鏈上繼承這個方法,可是這個方法時不受到JavaScript保護的。java
全部繼承了
Object
的對象都會繼承到hasOwnProperty
方法。這個方法能夠用來檢測一個對象是否含有特定的自身屬性;和in
運算符不一樣,該方法會忽略掉那些從原型鏈上繼承到的屬性。數組
這是MDN對這個方法的描述,具體可見Object.prototype.hasOwnProperty
可使用這個方法來過濾原型鏈上的屬性,這是很實用的。prototype