枚舉屬性和不可枚舉屬性


 

    在JavaScript中,對象的屬性分為可枚舉和不可枚舉之分,它們是由屬性的enumerable值決定的。可枚舉性決定了這個屬性能否被for…in查找遍歷到。

一、怎么判斷屬性是否可枚舉

  js中基本包裝類型的原型屬性是不可枚舉的,如Object, Array, Number等,如果你寫出這樣的代碼遍歷其中的屬性:

1
2
3
4
var  num = new  Number();
for ( var  pro in  num) {
     console.log( "num."  + pro + " = "  + num[pro]);
}

它的輸出結果會是空。這是因為Number中內置的屬性是不可枚舉的,所以不能被for…in訪問到。

Object對象的propertyIsEnumerable()方法可以判斷此對象是否包含某個屬性,並且這個屬性是否可枚舉。

需要注意的是:如果判斷的屬性存在於Object對象的原型內,不管它是否可枚舉都會返回false。

二、枚舉性的作用

屬性的枚舉性會影響以下三個函數的結果:

for…in

Object.keys()

JSON.stringify

 

 

PropertyIsEnumerable
propertyIsEnumerable()是用來檢測屬性是否屬於某個對象的,如果檢測到了,返回true,否則返回false. 
1.這個屬性必須屬於實例的,並且不屬於原型. 
2.這個屬性必須是可枚舉的,也就是自定義的屬性,可以通過for..in循環出來的. 。

 hasOwnProperty(property)
判斷對象是否有某個特定的實例屬性。必須用字符串指定該屬性

 

TheObject.defineProperty()方法定義了一個新的屬性直接在一個對象,或修改現有的屬性的對象,並返回該對象。

方法

Object.defineProperty(obj, prop, descriptor)
  • obj ,待修改的對象
  • prop ,帶修改的屬性名稱
  • descriptor ,待修改屬性的相關描述
復制代碼
{
    configurable: false,
    enumerable: false,
    writable: false,
    value: null,
    set: undefined,
    get: undefined
}
復制代碼
  1. configurable ,屬性是否可配置。可配置的含義包括:是否可以刪除屬性( delete ),是否可以修改屬性的 writable 、 enumerable 、 configurable 屬性。
  2. enumerable ,屬性是否可枚舉。可枚舉的含義包括:是否可以通過 for...in 遍歷到,是否可以通過 Object.keys() 方法獲取屬性名稱。
  3. writable ,屬性是否可重寫。可重寫的含義包括:是否可以對屬性進行重新賦值。
  4. value ,屬性的默認值。
  5. set ,屬性的重寫器(暫且這么叫)。一旦屬性被重新賦值,此方法被自動調用。
  6. get ,屬性的讀取器(暫且這么叫)。一旦屬性被訪問讀取,此方法被自動調用。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM