1. 程式人生 > >JS中物件屬性的可列舉性

JS中物件屬性的可列舉性

在JS中,物件的屬性分為可列舉和不可列舉,它是由屬性的enumerable值決定的,true為可列舉,false為不可列舉

JS中預定義的原型屬性一般是不可列舉的,而自己定義的屬性一般可列舉

可以通過propertyIsEnumerable方法判斷該屬性是否可列舉

屬性的列舉性會影響以下三個函式的結果:

for ... in ...

Object.keys()

JSON.stringify()

例子:

function Person(){
	this.name = 'kong';
}
Person.prototype = {
	age : 18,
	job : 'student'
}
var a = new Person();
Object.defineProperty(a, 'sex', {
	value : 'men',
	enumerable : false		//定義該屬性不可列舉
})

//for in
for(var k in a){
	console.log(k);
}
//name age job

//Object.keys()
console.log(Object.keys(a));
//['name']

//JSON.stringify()
console.log(JSON.stringify(a));
//{'name' : 'kong'}

//propertyIsEnumerable方法判斷該屬性是否可列舉
console.log(a.propertyIsEnumerable('name'));	//true
console.log(a.propertyIsEnumerable('age'));		//false
console.log(a.propertyIsEnumerable('sex'));		//false

相關推薦

JS物件屬性列舉

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

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物件列舉

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

js物件屬性的型別和屬性的特性

ES5中物件的屬性可以分為資料屬性和訪問器屬性 資料屬性 資料屬性包含以下4個特性: [[configurable]]:表示屬性是否可以被delete,是否可以被重新修改,或者是否可以被修改成訪問器屬性 [[enumerable]]:是否可列舉,是否能通過for in 迴圈返

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

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

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

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

遍歷js物件屬性和值

    今天做專案中無意中看到此方法,之前解決的方法是用了模板頁面實現的。在此分享給大家。問題:通過遍歷屬性名陣列,獲取物件的屬性值失敗剛開始的錯誤程式碼如下:for(var i=0;i<dataList.length;i++) { var dataLine="

解析js的原型鏈和在原型鏈物件屬性查詢

//原型鏈中屬性的查詢 function Person(name,color){ this.name=name; this.color=color; } function Teacher(name,age){ this.name=name; this.age=age;

js--獲取/賦值文字值innerText/textContent、innerHTML的區別,獲取表單的值;js事件物件屬性target於currentTarget

  <body> <div id="box_text"> <p style="color:hotpink;">muzidigbig</p> <p style="color:pink">

JS物件的進化史

階段1 人們習慣用字面量的形式定義物件: var obj = { name: 'zyp', age: 18, like: function() { console.log('愛睡覺!') } /** ES6寫法 ** like() {

js物件引用,淺拷貝,深拷貝--示例

1. 物件引用 var a = {name:'wanger'} var b = a ; a===b // true b.name = 'zhangsan' a.name //'zhangan' 2 .淺拷貝 var a = {name:'wanger'} var b = Object.a

js獲取物件屬性的兩種方法,object.屬性名,[‘屬性名’ ]

1、通過點的方式 2、通過括號的方式 例: <input type="text" value="hello" id="text"/> var oText = document.getElementById("text") (1)通過點的方式   oText.pr

vue陣列物件屬性變化頁面不渲染問題

vue陣列中物件屬性變化頁面不渲染問題:https://www.cnblogs.com/thinkingthigh/p/7789108.html   做checkbox多選功能的時候遇到了一個坑,邏輯怎麼看都對,但是就是有bug,最後發現數組那裡值變了頁面勾選沒有重新渲染。 換了關

解決vue物件屬性改變檢視不更新的問題

問題描述: 頁面input的值修改後,物件的屬性值並未發生變化 問題解決: vue雙向繫結時,writable(屬性值是否可以重寫)預設為false 將其改為true即可。 Object.defineProperty(obj, objKey, { &nbs

js物件轉化成字串、數字或布林值的轉化規則

js中物件可以轉化成 字串、數字、布林值 一、物件轉化成字串: 規則: 1、如果物件有toString方法,則呼叫該方法,並返回相應的結果;(程式碼通常會執行到這,因為在所有物件中都有toString方法) 2、如果物件有valueOf方法,則呼叫該方法,並返回相應的結果; 3、否則丟擲異常。 通常,所有物件

jsjson屬性增刪改查

<script type="text/javascript">     var json = {         "age":24,       

Js物件的深拷貝和淺拷貝

淺拷貝:只拷貝物件的基礎屬性值,對屬性值為物件或陣列的屬性則拷貝指標。  深拷貝:拷貝物件的所有屬性作為一個全新的物件。拷貝前後的物件互不影響。 淺拷貝僅僅是指向被複制的記憶體地址,如果原地址中物件被改變了,那麼深拷貝出來的物件也會相應改變。 一、物件引用 物件引用容易

Vue.js計算屬性和方法的區別

在vue.js中,計算屬性和方法達到的效果是一樣的,但是計算屬性是基於依賴進行快取的,只有message發生改變才會導致reverseMessage發生改變,只要 message 還沒有發生改變,多次訪問 reversedMessage 計算屬性會立即返回之前的計算結果,而不

CSS哪些屬性繼承?

字體系列:font-family,font-size,font-style,font-weight,font-stretch,font-size-adjust; 列表相關:list-style,list-style-image,list-style-position,lis