当前位置: 首页 > news >正文

ES6 对象方面的新特性

ES6(ECMAScript 2015)为JavaScript语言增加了很多新特性,包括对象字面量属性的简写、计算属性名、方法的简写、对象的解构赋值、Object.assign()方法复制对象属性、Object.is()比较两个值等。以下是一些在ES6中经常使用的对象方法:

  1. Object.assign(target, …sources): 用于将所有可枚举的属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。
javascriptlet obj1 = { a: 1 };
let obj2 = { b: 2 };
let obj3 = { c: 3 };
Object.assign(obj1, obj2, obj3);
console.log(obj1); // { a: 1, b: 2, c: 3 }
  1. Object.create(proto, [propertiesObject]): 使用指定的原型对象及其属性创建一个新的对象。
let person = {isHuman: false,printIntroduction: function() {console.log(`My name is ${this.name}. Am I human? ${this.isHuman}`);}
};let me = Object.create(person);me.name = 'Matthew'; // "name" 是 "me" 的一个属性
me.isHuman = true; // 继承的属性也可以被重写me.printIntroduction();
// 输出: "My name is Matthew. Am I human? true"
  1. Object.defineProperty(obj, propertyName, descriptor): 直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回这个对象。
let obj = {}; // 创建一个新对象Object.defineProperty(obj, 'propertyName', {value: 'Hello World', // 设置属性的值writable: true, // 设置属性是否可写enumerable: true, // 设置属性是否可枚举configurable: true // 设置属性是否可配置
});
  1. Object.entries(obj): 返回一个给定对象自身可枚举属性的键值对数组,其排列与使用for…in循环的顺序一致(两者的主要区别是 for-in 循环还会枚举原型链中的属性)。
let obj = { foo: 'bar', baz: 42 };
for (let [key, value] of Object.entries(obj)) {console.log(`${key}: ${value}`);
}// 输出:
// "foo: bar"
// "baz: 42"
  1. Object.freeze(obj): 可以冻结一个对象。一个被冻结的对象再也不能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结一个对象后,它的原型也不能被改变。冻结对象后,如果尝试修改这个对象,将会抛出TypeError错误。
let obj = { prop: 42 };
Object.freeze(obj);// 下面的操作将会失败,并抛出异常
obj.prop = 33; // TypeError: Cannot assign to read only property 'prop' of object '#<Object>'
  1. Object.getOwnPropertyDescriptor(obj, prop): 返回指定对象上一个自有属性对应的属性描述符。(自有属性指的是直接赋予该对象的属性,不包含从原型链上继承的属性)。
let obj = {property1: 'value1',property2: 'value2'
};let descriptor1 = Object.getOwnPropertyDescriptor(obj, 'property1');
let descriptor2 = Object.getOwnPropertyDescriptor(obj, 'property2');console.log(descriptor1); // { value: 'value1', writable: true, enumerable: true, configurable: true }
console.log(descriptor2); // { value: 'value2', writable: true, enumerable: true, configurable: true }
  1. Object.getOwnPropertyNames(obj): 返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组。
let obj = { a: 1, b: 2, c: 3 };
Object.defineProperty(obj, 'd', {value: 4,enumerable: false
});console.log(Object.getOwnPropertyNames(obj));
// 输出: [ 'a', 'b', 'c', 'd' ]
http://www.lryc.cn/news/345418.html

相关文章:

  • GO语言核心30讲 进阶技术 (第一部分)
  • [力扣题解]225. 用队列实现栈
  • Leetcode—2105. 给植物浇水 II【中等】
  • wordpress外贸建站公司歪建站新版网站上线
  • 关于二手车系统学习--登录模块
  • 若依生成代码的步骤
  • 深度学习论文: LightGlue: Local Feature Matching at Light Speed
  • 全面解析C++11与C++20线程(含内容)
  • 【八股】消息中间件
  • 【17-Ⅰ】Head First Java 学习笔记
  • weblogic 反序列化 [CVE-2017-10271]
  • CoPilot 产品体验:提升 OpenNJet 的控制管理和服务提供能力
  • Leetcode 第396场周赛 问题和解法
  • OC foudation框架(上)学习
  • 【机器学习300问】83、深度学习模型在进行学习时梯度下降算法会面临哪些局部最优问题?
  • 基于springboot的校园管理系统源码数据库
  • 图形网络的自适应扩散 笔记
  • vue基础配置
  • C++基础中的存储类别
  • 【NPM】Nginx Proxy Manager 一键申请 SSL 证书,自动续期,解决阿里云SSL免费证书每3个月失效问题
  • 教你解决PUBG绝地求生游戏中闪退掉线无法重连回去的问题
  • 24 Debian如何配置Apache2(4)LAMP+phpMyAdmin部署
  • centos安装paddlespeech各种报错解决方案
  • 谈基于ATTCK框架的攻击链溯源
  • 在Ubuntu下搭建自己的以太坊私有链
  • 巩固学习4
  • Conda安装rasterio报错
  • linux安装 mysql
  • 暴力法解决最近对问题和凸包问题-实现可视化
  • [Kubernetes] Rancher 2.7.5 部署 k8s