js物件中什麼是可列舉性(enumerable)?
概念
可列舉性(enumerable)用來控制所描述的屬性,是否將被包括在for...in迴圈之中。具體來說,如果一個屬性的enumerable為false,下面三個操作不會取到該屬性。
* for..in迴圈
* Object.keys方法
* JSON.stringify方法
enumerable “隱身術”
javascript
var 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屬性的enumerable
為false
,所以一般的遍歷操作都無法獲取該屬性,使得它有點像“祕密”屬性,但還是可以直接獲取它的值。
至於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
JS中event物件中的常見屬性
在事件函式中,其實是可以寫引數的,寫法: <script> var btn = document.getElementById("btn"); btn.onclick = function (event) { var e = event ||