in、Object.keys

for in

  • 会遍历对象、数组以及该对象原型链上可以枚举的属性
  • 返回的结果都是String类型
  • 在某些情况下,遍历数组的顺序可能是随机的
1234567891011121314
Array.prototype.getLength = function() {    return this.length;};var arr = ['a', 'b', 'c'];arr.name = 'June';Object.defineProperty(arr, 'age', {    enumerable: true,    value: 17,    writable: true,    configurable: true});for(var i in arr) {    console.log(i); }

不推荐在数组中使用for in遍历

如果使用for in遍历对象,我们一般只需要该对象的属性,而不需要该对象原型链上的属性。这时我们可以用hasOwnProperty来筛选

123456789101112131415161718
const person = {    name: 'mark',    sex: 'male'};Object.prototype.age = 20;for (let i in person) {    console.log(i);}// name, sex, agefor (let j in person) {    if (person.hasOwnProperty(j)) {        console.log(j);    }}// name, sex// 拓展,获取对象自身所有属性console.log(Object.getOwnPropertyNames(person))// [name, sex]

Object.keys

  • 返回对象自身可枚举属性所组成的数组
  • 不会遍历对象原型链上的属性以及symbol属性
  • 按顺序遍历
123456789101112131415
function () {    this.name = 'June';}Person.prototype.getName = function() {    return this.name;}var person = new Person();Object.defineProperty(person, 'age', {    enumerable: true,    value: 17,    writable: true,    configurable: true});console.log(Object.keys(person));大专栏  in、Object.keysmment">// ['name', 'age']

如果需要对象所有属性名,推荐使用该方法

for of

  • 支持遍历Array、Array like Object(DOM NodeList、arguments),String、Map、Set等类型
  • 不支持遍历普通对象以及原型链上的属性
  • 遍历的结果为String类型的Value
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
// 1. 不会遍历到对象属性及其原型属性Array.prototype.getLength = function() {    return this.length;};var arr = ['a', 'b', 'c'];arr.name = 'June';Object.defineProperty(arr, 'age', {    enumerable: true,    value: 17,    writable: true,    configurable: true});for(let i of arr) {    console.log(i);     // a,b,c}

// 2. 如果要遍历对象,可与 Object.keys 配合var person = {    name: 'June',    age: 17,    city: 'guangzhou'}for(var key of Object.keys(person)) {    console.log(person[key]);     // June, 17, guangzhou}

//拓展Object.entries()会返回多个由对象属性Key和Value组成的数组const arr = {    name: 'mike',    age: 18};console.log(Object.entries(arr));// [['name', 'mike'], ['age', '18']]

// 3. 配合 entries 输出数组索引和值/对象的键值var arr = ['a', 'b', 'c'];for(let [index, value] of Object.entries(arr)) {    console.log(index, ':', value);    // 0:a, 1:b, 2:c}var obj = {name: 'June', age: 17, city: 'guangzhou'};for(let [key, value] of Object.entries(obj)) {    console.log(key, ':', value);    // name:June,age:17,city:guangzhou}

原文地址:https://www.cnblogs.com/dajunjun/p/11698490.html

时间: 2024-07-31 00:32:24

in、Object.keys的相关文章

遍历对象属性(for in、Object.keys、Object.getOwnProperty)

js中几种遍历对象的方法,包括for in.Object.keys.Object.getOwnProperty,它们在使用场景方面各有不同. for in 主要用于遍历对象的可枚举属性,包括自有属性.继承自原型的属性 var obj = {"name":"Poly", "career":"it"} Object.defineProperty(obj, "age", {value:"forever

javascript中 for in 、for 、forEach 、for of 、Object.keys().

一 .for ..in 循环 使用for..in循环时,返回的是所有能够通过对象访问的.可枚举的属性,既包括存在于实例中的属性,也包括存在于原型中的实例.这里需要注意的是使用for-in返回的属性因各个浏览器厂商遵循的标准不一致导致对象属性遍历的顺序有可能不是当初构建时的顺序.(实例+原型中的可枚举属性) 1.遍历数组 虽然for..in主要用于遍历对象的属性,但同样也可以用来遍历数组元素. 2:for..in和for遍历数组时下标类型不一样 var colors = ['red', 'gree

Object.keys、Object.getOwnPropertyNames区别

定义 Object.keys 定义:返回一个对象可枚举属性的字符串数组: Object.getOwnPropertyNames 定义:返回一个对象可枚举.不可枚举属性的名称: 属性的可枚举性.不可枚举性 定义:可枚举属性是指那些内部 “可枚举” 标志设置为 true 的属性,对于通过直接的赋值和属性初始化的属性,该标识值默认为即为 true,对于通过 Object.defineProperty 等定义的属性,该标识值默认为 false. 例子 var obj = { "prop1":

js Object.keys

Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置.不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的.但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的.为了帮助这两只乐观的青蛙,你被要求写一个程序来判断这两只青蛙是否能够碰面,会在什么时候碰面. 我们把这

in操作符/Object.keys()/ Object.getOwnPropertyNames()

in操作符 1.单独使用,判断是否能通过某个实例访问到某个属性 function Person(){ } Person.prototype.name = "Nicholas"; Person.prototype.age = 29; Person.prototype.job = "Software Engineer"; Person.prototype.sayName = function(){ alert(this.name); }; var person1 = n

for in 与 Object.keys 与 hasOwnProperty区别

1.结论 for in遍历对象所有可枚举属性 包括原型链上的属性 Object.keys遍历对象所有可枚举属性 不包括原型链上的属性 hasOwnProperty 检查对象是否包含属性名,无法检查原型链上是否具有此属性名 2.示例代码 <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8" /> <meta name="viewport

Object.create(null)、Object.create({})、{} 三者创建对象的区别

参考 1.先看看我们经常使用的{}创建的对象是什么样子的: var o = {a:1}; console.log(o) 从上图可以看到,新创建的对象继承了Object自身的方法,如hasOwnProperty.toString等,在新对象上可以直接使用. 2.再看看使用Object.create()创建对象: var o = Object.create(null,{ a:{ writable:true, configurable:true, value:'1' } }) console.log(

Object.keys(),Object.values(),Object.entries()

1. (1)Object.keys() //返回 键 数组 返回数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键名. eg:var obj = {a:1,b:'gy'} Object.keys(obj) // ['a','b'] (2)Object.values() //返回 值 数组 返回数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值 eg1:var obj = {a:1,b:'gy'} Object.values(obj

for in,Object.keys()与for of的用法与区别

Array.prototype.sayLength=function(){ console.log(this.length); } let arr = ['a','b','c','d']; arr.name='数组'; Object.defineProperties(arr,{ type:{ value:true, writable:true, enumerable:true } }) // for in 一般用于遍历对象的属性: 1.作用于数组的for in除了会遍历数组元素外,还会遍历自定义