Js遍历对象总结
Js遍历对象总结
Js
遍历对象的方法主要有for in
、Object.keys()
、Object.getOwnPropertyNames()
、Reflect.ownKeys()
、Object.getOwnPropertySymbols()
。
for in
for in
语句以任意顺序迭代对象的可枚举属性,包括原型链上的可枚举属性,不包括Symbol
属性。
var obj = {
2: "11",
1: "1",
b: "1111",
a: "111",
[Symbol()]: "11111"
}
Object.prototype.c = "111111"; // 在原型链上增加一个可枚举属性
Object.defineProperty(obj, "d", {value:"1111111", enumerable:false}); // 在obj上增加一个不可枚举属性
console.log(obj); // {1: "1", 2: "11", b: "1111", a: "111", d: "1111111", Symbol(): "11111"}
for( let unit in obj ){
console.log(unit, obj[unit]);
}
/*
1 1
2 11
b 1111
a 111
c 111111
*/
/*
对于迭代时的顺序:
1. 如果属性名的类型是Number,那么属性的迭代顺序是按照key从小到大排序。
2. 如果属性名的类型是String,那么属性的迭代顺序是按照属性被创建的时间升序排序。
3. 如果属性名的类型是Symbol,那么逻辑同String相同。
*/
Object.keys
Object.keys()
方法会返回一个由一个指定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用for...in
循环遍历该对象时返回的顺序一致。类似的,Object.entries()
方法返回一个指定对象自身可枚举属性的键值对数组,Object.values()
方法返回一个指定对象自身的所有可枚举属性值的数组。
var obj = {
2: "11",
1: "1",
b: "1111",
a: "111",
[Symbol()]: "11111"
}
Object.prototype.c = "111111"; // 在原型链上增加一个可枚举属性
Object.defineProperty(obj, "d", {value:"1111111", enumerable:false}); // 在obj上增加一个不可枚举属性
console.log(obj); // {1: "1", 2: "11", b: "1111", a: "111", d: "1111111", Symbol(): "11111"}
var propertyArr = Object.keys(obj);
for( let unit of propertyArr ){
console.log(unit, obj[unit]);
}
/*
1 1
2 11
b 1111
a 111
*/
console.log(Object.entries(obj)); // [["1", "1"],["2", "11"],["b", "1111"],["a", "111"]]
console.log(Object.values(obj)); // ["1", "11", "1111", "111"]
Object.getOwnPropertyNames
Object.getOwnPropertyNames()
方法返回一个由指定对象的所有自身属性的属性名,包括不可枚举属性但不包括Symbol
值作为名称的属性组成的数组。
var obj = {
2: "11",
1: "1",
b: "1111",
a: "111",
[Symbol()]: "11111"
}
Object.prototype.c = "111111"; // 在原型链上增加一个可枚举属性
Object.defineProperty(obj, "d", {value:"1111111", enumerable:false}); // 在obj上增加一个不可枚举属性
console.log(obj); // {1: "1", 2: "11", b: "1111", a: "111", d: "1111111", Symbol(): "11111"}
var propertyArr = Object.getOwnPropertyNames(obj);
for( let unit of propertyArr ){
console.log(unit, obj[unit]);
}
/*
1 1
2 11
b 1111
a 111
d 1111111
*/
Object.getOwnPropertySymbols
Object.getOwnPropertySymbols()
方法返回一个指定对象自身的所有Symbol
属性的数组。
var obj = {
2: "11",
1: "1",
b: "1111",
a: "111",
[Symbol()]: "11111"
}
Object.prototype.c = "111111"; // 在原型链上增加一个可枚举属性
Object.defineProperty(obj, "d", {value:"1111111", enumerable:false}); // 在obj上增加一个不可枚举属性
console.log(obj); // {1: "1", 2: "11", b: "1111", a: "111", d: "1111111", Symbol(): "11111"}
var propertyArr = Object.getOwnPropertySymbols(obj);
for( let unit of propertyArr ){
console.log(unit, obj[unit]);
}
/*
Symbol() "11111"
*/
Reflect.ownKeys
Reflect.ownKeys
方法返回一个由指定对象自身的属性键组成的数组,包括不可枚举属性与Symbol
属性,它的返回值等同于Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target))
。
var obj = {
2: "11",
1: "1",
b: "1111",
a: "111",
[Symbol()]: "11111"
}
Object.prototype.c = "111111"; // 在原型链上增加一个可枚举属性
Object.defineProperty(obj, "d", {value:"1111111", enumerable:false}); // 在obj上增加一个不可枚举属性
console.log(obj); // {1: "1", 2: "11", b: "1111", a: "111", d: "1111111", Symbol(): "11111"}
var propertyArr = Reflect.ownKeys(obj);
for( let unit of propertyArr ){
console.log(unit, obj[unit]);
}
/*
1 1
2 11
b 1111
a 111
d 1111111
Symbol() "11111"
*/
每日一题
https://github.com/WindrunnerMax/EveryDay
参考
https://github.com/berwin/Blog/issues/24
https://www.cnblogs.com/zhaozhou/p/7890527.html
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Enumerability_and_ownership_of_properties
Js遍历对象总结的更多相关文章
- js遍历对象的属性和方法
js遍历对象的属性和方法 一.总结 二.实例 练习1:具有默认值的构造函数 实例描述: 有时候在创建对象时候,我们希望某些属性具有默认值 案例思路: 在构造函数中判断参数值是否为undefined,如 ...
- JS遍历对象或者数组
一.纯js实现 <script> var obj = {"player_id":"GS001","event_id":" ...
- js 遍历对象属性(for in、Object.keys、Object.getOwnProperty) 以及高效地输出 js 数组
js中几种遍历对象的方法,包括for in.Object.keys.Object.getOwnProperty,它们在使用场景方面各有不同. for in 主要用于遍历对象的可枚举属性,包括自有属性. ...
- JS 遍历对象 jQuery遍历对象
jquery for 循环遍历对象的属性: //对象的定义如下: var person={id:"1",name:"springok",age:25}; for ...
- js遍历对象属性
对象虽然与数组一样,都是数据的集合. 因为对象中的数据是处于无序状态,不能像数组那样,使用下标来遍历对象的所有属性. 如果要遍历对象属性,就必须要使用for in 语句. var a={ A1=180 ...
- JS遍历对象和数组总结
在日常工作过程中,我们对于javaScript遍历对象.数组的操作是十分的频繁的,今天把经常用到的方法总结一下! 一.遍历对象 1.使用Object.keys()遍历 返回一个数组,包括对象自身的(不 ...
- JS遍历对象的几种方法
几天前一个小伙伴问我 Object.getOwnPropertyNames() 是干什么用的 平时还真没有使用到这个方法,一时不知如何回答 从方法名称来分析,应该是返回的是对象自身属性名组成的数组 那 ...
- JS遍历对象的属性和值
对于需要动态获取对象的某些属性和对应的值的时候,就需要遍历对象的属性和值. const user = { name: '张三', age: 20, addr: '湖北武汉', sex: '男' } / ...
- 辨析js遍历对象与数组的方法
1 遍历对象的方法? (1) for-in(也可遍历数组,但效率较低,一般用来遍历对象) 示例: // 生成一个原型上有属性并且有可枚举属性与不可枚举属性的对象 const data = Ob ...
- template.js遍历对象的写法
<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>菜鸟 ...
随机推荐
- [转帖]基于MySQL8.0存储过程实现myawr平台的top sql功能
概述 众所周知,MySQL数据库中的performance_schema的事件统计表中的统计数据计算的是累计值,如果想要计算某段时间的TOP SQL是不行的,这里考虑用函数定期取值存进中间表定期将累计 ...
- [转帖]TiDB-merge region相关问题
一.开启region merge # 控制 Region Merge 的 size 上限,当 Region Size 大于指定值时 PD 不会将其与相邻的 Region 合并 pd-ctl confi ...
- [转帖]Use TiFlash
https://docs.pingcap.com/tidb/v5.0/use-tiflash 8 Contributors After TiFlash is deployed, data replic ...
- [转帖]TiUP Cluster 命令合集
https://docs.pingcap.com/zh/tidb/stable/tiup-component-cluster TiUP Cluster 是 TiUP 提供的使用 Golang 编写的集 ...
- [转帖]Python基础之函数(四)
https://www.jianshu.com/p/168e341fb81c 一.函数定义 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段:比如常用的print(),就是内建函数:通 ...
- top的简单学习
获取当前进程的全部线程 jps 获取jvm的进程信息. top -Hp $pid -bn 1 > 1.txt 可以获取当前特定进程的所有子进程. 注意linux与Windows的不太一样. li ...
- 原生js拖拽元素(onmouseup不能够触发的原因)
我们经常会遇见拖拽某一个元素的场景,拖拽也是很常用的: 这次拖拽遇见一个问题,有时在拖拽的时候吗,鼠标松开,元素仍然可以拖拽: 经过查阅资料,发现: 会触发H5原生的拖拽事件.并且不会监听到onmou ...
- go中的类型转换成interface之后如何复原
go中interface转换成原来的类型 首先了解下interface 什么是interface? 如何判断interface变量存储的是哪种类型 fmt 反射 断言 来看下interface的底层源 ...
- 【学习日志】Java基本数据类型的自动装箱和拆箱
// 测试代码 public static void main(String[] args) { Integer a = 1; Integer b = 2; Integer c = 3; Intege ...
- 7.4 C/C++ 实现链表栈
相对于顺序栈,链表栈的内存使用更加灵活,因为链表栈的内存空间是通过动态分配获得的,它不需要在创建时确定其大小,而是根据需要逐个分配节点.当需要压入一个新的元素时,只需要分配一个新的节点,并将其插入到链 ...