Object.keys方法之详解

这篇具有很好参考价值的文章主要介绍了Object.keys方法之详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Object.keys方法之详解

Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致。

语法

Object.keys(obj)

参数

要返回其枚举自身属性的对象。

返回值

一个表示给定对象的所有可枚举属性的字符串数组。

描述

Object.keys() 返回一个所有元素为字符串的数组,其元素来自给定的 object 上面可直接枚举的属性。这些属性的顺序与手动遍历该对象属性时的一致。

示例

一、传入对象,返回属性名
let obj= {name:"张三",age:25,address:"深圳",getName:function(){}}
console.log(Object.keys(obj));  // ["name", "age", "address","getName"]

常用操作

Object.keys(obj).map((key)=>{
  console.log(key,obj[key]);  //key=>属性名  obj[key]=>属性值
}) 

扩展

// 类数组对象
const obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.keys(obj)); // console: ['0', '1', '2']

// 具有随机键顺序的类数组对象
const anObj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.keys(anObj)); // console: ['2', '7', '100']

问题:为什么Object.keys的返回值会自动排序?

Object.keys在内部会根据属性名key的类型进行不同的排序逻辑。分三种情况:
1、如果属性名的类型是Number,那么Object.keys返回值是按照key从小到大排序
2、如果属性名的类型是String,那么Object.keys返回值是按照属性被创建的时间升序排序。
3、如果属性名的类型是Symbol,那么逻辑同String相同

二、传入字符串,返回索引
var str = 'ab1234';
console.log(Object.keys(obj));  //[0,1,2,3,4,5]
三、传入数组,返回索引
var arr = ["a", "b", "c"];
console.log(Object.keys(arr)); // ["0", "1", "2"]
四、构造函数,返回空数组或者属性名
function Pasta(name, age, gender) {
      this.name = name;
      this.age = age;
      this.gender = gender;
      this.toString = function () {
            return (this.name + ", " + this.age + ", " + this.gender);
    }
}
console.log(Object.keys(Pasta)); //console: []

var spaghetti = new Pasta("Tom", 20, "male");
console.log(Object.keys(spaghetti)); //console: ["name", "age", "gender", "toString"]
五、getFoo 是一个不可枚举的属性
const myObj = Object.create({}, {
  getFoo: {
  	// enumerable: true, // 如果为true 就是可枚举属性 默认为false 不可枚举
    value() { return this.foo; }
  }
});
myObj.foo = 1;
console.log(Object.keys(myObj)); // console: ['foo']

如果你想获取一个对象的所有属性,甚至包括不可枚举的,可以使用 Object.getOwnPropertyNames

扩展 :Object.values()和Object.keys()是相反的操作,把一个对象的值转换为数组

Object.values方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历( enumerable )属性的键值。

Object.entries方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历( enumerable )属性的键值对数组。

参考链接

https://zhuanlan.zhihu.com/p/40601459文章来源地址https://www.toymoban.com/news/detail-723592.html

到了这里,关于Object.keys方法之详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SAP Fiori开发中的JavaScript基础知识15 - 原型,object,constructor,class,继承

    本文将介绍JavaScript中的核心概念 - 原型,并会介绍基于原型的应用场景object,constructor,class,继承。 本文会将这几个核心概念汇总在一篇博客中,因为这些概念是触类旁通的,希望对你有帮助。 在JavaScript中,几乎所有的东西都是对象,每个对象都有一个 特殊的内部属性

    2024年04月23日
    浏览(122)
  • Object.keys()

    目录 1、Object.keys() 是什么?  2、Object.keys(obj) 用法:         2.1  如果对象是一个对象,会返回对象的属性名组成的数组;         2.2  如果对象是一个数组,则返回索引组成的数组:         2.3   如果是字符串,返回索引值数组         2.4  常用技巧 3、Obj

    2024年01月16日
    浏览(35)
  • 解决 JavaScript 输出为 [object Object] 的问题

    🙈作者简介:练习时长两年半的Java up主 🙉个人主页:程序员老茶 🙊 ps:点赞👍是免费的,却可以让写博客的作者开兴好久好久😎 📚系列专栏:Java全栈,计算机系列(火速更新中) 💭 格言:种一棵树最好的时间是十年前,其次是现在 🏡动动小手,点个关注不迷路,感

    2024年02月04日
    浏览(43)
  • vue的双向绑定Object.definedProperty(obj,key,{set,get})

    vue的代码方式

    2024年02月06日
    浏览(33)
  • Python 中出现AttributeError: ‘Event‘ object has no attribute ‘key‘

    《python编程从入门到实践》中在学习外星人入侵项目中运行程序时出现报错 AttributeError: \\\'Event\\\' object has no attribute \\\'key\\\' 错误代码如下: 运行错误提示 导致错误的原因为“ #按Q键退出游戏”这部分程序中“elif event.key == pygame.K_q:”这句语句写在了与 事件类型 “event.type == pygame

    2024年02月11日
    浏览(74)
  • JavaScript之Object.defineProperty()

    经常使用的定义与赋值方法 obj.prop =value 或者 obj[\\\'prop\\\']=value Object.defineProperty() 的作用就是直接在一个对象上定义一个新属性,或者修改一个已经存在的属性 obj 需要定义属性的当前对象 prop 当前需要定义的属性名 desc 属性描述符 一般通过为对象的属性赋值的情况下,对象的属

    2024年02月09日
    浏览(36)
  • Stable Diffusion出现错误: AttributeError: ‘NoneType‘ object has no attribute ‘keys‘

    Stable Diffusion的ControlNet插件的 style风格迁移模型 在第一次使用时需要在启动器后台下载1.6G的文件,但可能是因为网络原因导致下载的文件不完整,然后我们再次加载是就会出现 AttributeError: ‘NoneType’ object has no attribute ‘keys’ 错误。 去Stable Diffusion的ControlNet的预处理器文件

    2024年02月11日
    浏览(45)
  • hive中get_json_object函数不支持解析json中文key

    今天在 Hive 中 get_json_object 函数解析 json 串的时候,发现函数不支持解析 json 中文 key。 例如: 我们希望的结果是得到姓名对应的值 张三 ,而运行之后的结果为 NULL 值。 我们希望的结果是得到姓名对应的值 张三 ,而运行之后的结果为 18 。 是什么原因导致的呢?我们查看

    2024年02月12日
    浏览(57)
  • JavaScript如何解决返回[object Promise]

    当使用JavaScript中的Promise时,当您尝试访问Promise的值时,您可能会看到返回值为 [object Promise] 的情况。这是因为Promise是一种异步操作,它不能立即返回结果,而是需要等待操作完成后返回结果。 要访问Promise的值,您需要使用Promise的then()方法,该方法接受一个回调函数作为参

    2024年02月12日
    浏览(39)
  • Java8使用stream流给List<Map<String,Object>>分组(多字段key)

    Java8使用 stream流 给ListMapString,Object根据字段key 分组 一、项目场景: 从已得到的List集合中,根据某一元素(这里指map的key)进行分组,筛选出需要的数据。 如果是SQL的话则使用 group by 直接实现,代码的方式则如下: 使用到stream流的 Collectors.groupingBy() 方法。 二、代码实现 1、首

    2024年02月02日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包