在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 }