js中for in遍歷物件屬性

2021-07-09 13:52:59 字數 849 閱讀 2750

for in函式會遍歷物件中的所有可列舉屬性,那麼,問題來了,不可列舉屬性又是什麼?

每個物件的屬性自身,都有乙個屬性,enumerable,若屬性a的屬性值即a.enumerable為false,則屬性a為不可列舉屬性。

為何要定義enumerable屬性呢?就是為了一下三個操作。enumerable屬性值為false的屬性,在以下三個操作中不會被取到:

如何定義乙個屬性的enumerable屬性值呢,舉個例子,下面這段**,便是為物件obj定義了乙個名為d的屬性,而a.enumerable的屬性值為false,即d為不可列舉屬性。

object.defineproperty(obj, 'a', );
我們以為這樣就好啦,可是若之前有人,為prototype加上了一些屬性,比如說,現在有這樣乙個陣列,arr[1,2,3],而陣列arr的prototype之前又被某個人增加了屬性,arr.prototype.someattr="i am some attribute of prototype",這樣,如果我們通過for in遍歷陣列,得到的不只是1,2,3,還有someattr:i am some attribute of prototype.

悲劇了吧,雖然prototype為不可列舉屬性,但其含有的屬性仍然被遍歷了。這樣的情況,我們可以通過以下**的處理,來避免。

for(var i in arr)

}

該段**中,hasownproperty函式的作用,就是「判斷乙個物件是否有你給出名稱的屬性或物件,此方法無法檢查該物件的原型鏈中是否具有該屬性,該屬性必須是物件本身的乙個成員。」

這樣,我們得到的輸出結果便是0:1 1:2 2:3



遍歷js中物件的屬性和值

今天做專案中無意中看到此方法,之前解決的方法是用了模板頁面實現的。在此分享給大家。剛開始的錯誤 如下 for var i 0 i for var j 0 j datalist i filedlist j dataline 首先說一下,datalist裡面放的是物件陣列 filedlist裡面放的是物...

JS遍歷物件屬性的幾種方式

es6中 一共有 5 種方法可以遍歷物件的屬性。for.in for in 迴圈遍歷物件自身的和繼承的可列舉屬性 不含 symbol 屬性 object.keys 返回乙個陣列,包括物件自身的 不含繼承的 所有可列舉屬性 不含 symbol 屬性 的鍵名。陣列中屬性名的排列順序和使用 for.in ...

JS遍歷物件修改屬性名

根據介面返回資料中number屬性值,對資料進行擷取,並改變屬性名.直接上碼 下面是需要處理的資料 let data 根據number值對資料擷取 var num data.value.number 2 var arr data.value.value.slice 0,num 改變屬性的方法 方法一...