日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript 中遍历对象的属性

發布時間:2024/4/17 javascript 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript 中遍历对象的属性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文鏈接

JavaScript 中遍歷對象的屬性

參考

JavaScript中的屬性:如何遍歷屬性
《JavaScript 高級程序設計》


概述

遍歷 JavaScript 對象中的屬性沒有其他語言那么簡單,因為兩個因素會影響屬性的遍歷:對象屬性的屬性描述符 (property descriptor) 的 [[Enumerable]] 特性為 true (可枚舉)才能被 for-in 訪問;如果在對象本身沒有找到屬性,接下來會在原型鏈上查找,訪問屬性時會沿著整個原型鏈從下到上查找屬性。所以說遍歷屬性時,要考慮這兩個因素。


開始遍歷

先定義兩個類吧:Person 和 Student,后者繼承前者。然后再聲明并初始化一個 Student 的實例 p1。其中自身屬性有 grade(可枚舉) 和 tel(不可枚舉),從原型鏈繼承屬性 type.
可枚舉意思是屬性的 [[Enumerable]] 值為 true,自身的屬性意思是 不是 從 原型鏈 繼承的屬性

// ES3 ES5 function Person(name) {this.name = name; }Person.prototype.type = 'people';function Student(name, grade) {Person.call(this, name);this.grade = grade; }if (Object.setPrototypeOf) {Object.setPrototypeOf(Student.prototype, Person.prototype); } else {Student.prototype = Object.create(Person.prototype);Object.defineProperty(Student.prototype, 'constructor', {enumerable: false,writable: true,configurable: true,value: Student}); }var p1 = new Student('Zero', 'Junior'); Object.defineProperty(p1, 'tel', {value: 123456,enumerable: false }); // ES6+ class Person {constructor(name) {this.name = name;} }Person.prototype.type = 'people';class Student extends Person {constructor(name, grade) {super(name);this.grade = grade;} }var p1 = new Student('zero', 'Junior'); Object.defineProperty(p1, 'tel', {value: 123456,enumerable: false });

遍歷可枚舉的、自身的屬性

使用 Object.keys() 或是 for..in + hasOwnProperty()

// Object.keys()返回可枚舉、自身的屬性 // 再用for..of對返回的數組進行遍歷 for (let prop of Object.keys(p1)){console.log(prop); } // 得到可枚舉、自身+繼承的屬性 for (let prop in p1) {// 過濾繼承屬性if (p1.hasOwnProperty(prop)) {console.log(prop);} }

結果是:name 和 grade 屬性
注: Object.keys() 的使用環境是 ES5+

遍歷所有(可枚舉的&不可枚舉的)、自身的屬性

// 使用 `Object.getOwnPropertyNames()` for (let prop of Object.getOwnPropertyNames(p1)) {console.log(prop); }

結果是:name 、 grade 和 tel 屬性

遍歷可枚舉的、自身+繼承的屬性

// 使用 `for..in` for (let prop in p1) {console.log(prop); }

結果是:name 、 grade 和 type 屬性

遍歷所有的、自身+繼承的屬性

var getAllPropertyNames = (obj) => {var props = [];do {props = props.concat(Object.getOwnPropertyNames(obj));} while (obj = Object.getPrototypeOf(obj));return props; };for (let prop of getAllPropertyNames(p1)) {console.log(prop); }

結果很多:包括自身屬性 name 、 grade 等,繼承屬性 type 、 toString 、valueOf 等


EOF

總結

以上是生活随笔為你收集整理的JavaScript 中遍历对象的属性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。