枚舉屬性和不可枚舉屬性

 

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

1、怎麼判斷屬性是否可枚舉post

  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訪問到。spa

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

須要注意的是:若是判斷的屬性存在於Object對象的原型內,無論它是否可枚舉都會返回false。對象

2、枚舉性的做用blog

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

for…inci

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 ,屬性的讀取器(暫且這麼叫)。一旦屬性被訪問讀取,此方法被自動調用。
相關文章
相關標籤/搜索