1. 程式人生 > >js物件中什麼是可列舉性(enumerable)?

js物件中什麼是可列舉性(enumerable)?

概念

可列舉性(enumerable)用來控制所描述的屬性,是否將被包括在for...in迴圈之中。具體來說,如果一個屬性的enumerable為false,下面三個操作不會取到該屬性。
* for..in迴圈
* Object.keys方法
* JSON.stringify方法

enumerable “隱身術”

javascriptvar o = {a:1, b:2};

o.c = 3;
Object.defineProperty(o, 'd', {
  value: 4,
  enumerable: false
});

o.d
// 4

for( var key in o ) console.log( o[key] ); 
// 1
// 2
// 3

Object.keys(o)  // ["a", "b", "c"]

JSON.stringify(o // => "{a:1,b:2,c:3}"

上面程式碼中,d屬性的enumerablefalse,所以一般的遍歷操作都無法獲取該屬性,使得它有點像“祕密”屬性,但還是可以直接獲取它的值。

至於for...in迴圈和Object.keys方法的區別,在於前者包括物件繼承自原型物件的屬性,而後者只包括物件本身的屬性。如果需要獲取物件自身的所有屬性,不管enumerable的值,可以使用Object.getOwnPropertyNames方法

相關推薦

js物件列舉

引言 說到列舉,可能很多人都會想到列舉型別,但在javascript物件中有一個屬性為可列舉性,他是什麼呢? 概念 可列舉性(enumerable)用來控制所描述的屬性,是否將被包括在for…in迴圈之中。具體來說,如果一個屬性的enumerable為false,下面三個操作不會取到該屬性。 for…in迴

js物件什麼是列舉(enumerable)?

概念 可列舉性(enumerable)用來控制所描述的屬性,是否將被包括在for...in迴圈之中。具體來說,如果一個屬性的enumerable為false,下面三個操作不會取到該屬性。 * for..in迴圈 * Object.keys方法 * JSON.stringif

JS 物件屬性"列舉"

物件屬性可列舉,表示該屬性的值不可修改,可認為該屬性是常量。 如何定義不可列舉的屬性? var obj = {name: 'jack', age:23} Object.defineProperty(obj, 'id', {value : '123', enumerable

JS物件屬性的列舉

在JS中,物件的屬性分為可列舉和不可列舉,它是由屬性的enumerable值決定的,true為可列舉,false為不可列舉 JS中預定義的原型屬性一般是不可列舉的,而自己定義的屬性一般可列舉 可以通過propertyIsEnumerable方法判斷該屬性是否可列舉 屬性的列

JavaScriptES6物件之屬性的列舉及遍歷詳解

目錄 可列舉性 屬性的遍歷 可列舉性 物件的每個屬性都有一個描述物件,用來控制該屬性的行為,Object.getOwnPropertyDescriptor方法可以獲取該屬性的描述物件。描述物件的enumerable屬性,稱為可列舉性,如果為true,為可列舉的,如

ES6-物件的擴充套件-屬性的列舉和遍歷

可列舉 物件的每一個屬性都有一個描述物件,用來控制該屬性的行為。Object.getOwnpropertyDescriptor 方法可以獲取該屬性的描述物件。 let obj = { foo: 123 }; Object.getOwnPropertyDescriptor(

關於js物件兩個函式互相呼叫,其中一個為定時器宣告,定時器迴圈報錯問題(記錄一次嘗試新寫法的報錯經歷)附帶無縫輪播圖程式碼

先上之前的錯誤程式碼吧,注意計時器這個方法(是想把之前寫的的輪播圖演示重構一下) var obj = { sleepTime: 2000,//輪播延時 cont: 0,//第幾張 origin: document.getElementsByClassName('main-

關於js物件兩個函式互相呼叫,其中一個為定時器宣告,定時器迴圈報錯問題(記錄一次嘗試新寫法的報錯經歷)

先上之前的錯誤程式碼吧(是想把之前寫的的輪播圖demo重構一下) var obj = { sleepTime: 2000,//輪播延時 cont: 0,//第幾張 origin: document.getElementsByClassName('ma

js物件原型(prototype)的使用方法、替換以及注意事項

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <t

測試js物件都包含了什麼屬性和方法 使用下面函式

function ShowObjProperty(Obj)  {  var PropertyList='';  var PropertyCount=0;  for(i in Obj){  if(Obj.i !=null)  PropertyList=PropertyList+i+'屬性:'+Obj.i+'

JVM 判斷物件是否 “存活” 的演算法 —— 分析演算法

在堆中,幾乎存放著所有的物件例項,那麼回收這些物件例項時,我們需要判斷哪些物件是 “已死” 可以回收的,哪些物件是 “存活” 不需要回收的,下面就來介紹一下 JVM 中如何判斷上述問題的。 基本思路 通過一系列的稱為“GC Roots”的物件作為起始點,從這些節點開

JS列舉屬性與不可列舉屬性

一、怎麼判斷屬性是否可列舉js中基本包裝型別的原型屬性是不可列舉的,如Object, Array, Number等,如果你寫出這樣的程式碼遍歷其中的屬性:var num = new Number(); for(var pro in num) { console.log

js物件擴充套件和屬性的四個特性(上)

# js物件可擴充套件性和屬性的四個特性(上) 一、前言 再次花時間回顧一下基礎,畢竟要想樓建的好,地基就要牢固,嘻嘻! 在開始之前需要具備對prototype、__proto__、constructor有一定得了解,可以看看我之前寫的一篇文章=>通道 之前的使用者管理系統已經差不多了,順便加了個s

js物件擴充套件和屬性的四個特性(下)

# js物件可擴充套件性和屬性的四個特性(下) 一、前言 再次花時間回顧一下基礎,畢竟要想樓建的好,地基就要牢固,嘻嘻! 在開始之前需要具備對prototype、__proto__、constructor有一定得了解,可以看看我之前寫的一篇文章=>通道 之前的使用者管理系統已經差不多了,順便加了個s

(vue.js)vue引用了別的元件 ,如何使this指向Vue物件

Vue中引用了別的元件 ,如何使this指向Vue物件   今天學習Vue元件傳值, 通過建立Vue例項, 廣播和監聽實現傳值, 但是傳值之後無法直接將得到的值應用到Vue物件, 因為這相當於引用改了別的元件, this指向發生改變,所以通過以下辦法解決。 var _this

js方法從json物件獲取特定值

 //從json中獲得key指定值     function getJsonValue(obj,name){         var result = null;         var v

用AOP來讓你的JS程式碼變得更有維護

此文已由作者吳佳祥授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 好吧我承認這是篇任務。 最近看到個訊息,ES2017已經定稿了,心想,我去,還完全沒了解ES2016呢,ES8就定稿了,out了,這可咋辦,趕緊Google(Baidu)去! 不過從ES6(2015)之後,tc39的

js 去掉陣列物件的重複物件

export function deteleObject(obj) { var uniques = []; var stringify = {}; for (var i = 0; i < obj.length; i++) { var keys = Objec

Python判斷物件是否迭代

可使用collections模組的Iterable型別來判斷物件是否可迭代 >>> from collections import Iterable >>> isinstance(1, Iterable) False >>> isinst

JSevent物件的常見屬性

在事件函式中,其實是可以寫引數的,寫法: <script> var btn = document.getElementById("btn"); btn.onclick = function (event) { var e = event ||