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

ES6系列--4. 对象的扩展

对象字面量简写法

你可能写过这样的代码:使用和所分配的变量名称相同的名称初始化对象。

let type = 'quartz';
let color = 'rose';
let carat = 21.29;

const gemstone = {
  type: type,
  color: color,
  carat: carat
};

console.log(gemstone);
复制代码

看到重复的地方了吗?type: type、color: colorcarat:carat不显得很冗长吗?

好消息是,如果属性名称和所分配的变量名称一样,那么就可以从对象属性中删掉这些重复的变量名称。

我们来看看!

let type = 'quartz';
let color = 'rose';
let carat = 21.29;

const gemstone = {
  type,
  color,
  carat
};
复制代码

还有一种向对象中添加方法的简写方式。

let type = 'quartz';
let color = 'rose';
let carat = 21.29;

let gemstone = {
  type,
  color,
  carat,
  calculateWorth() { ... }
};
复制代码

在 ES6 中甚至连function 关键字也不需要.

对象Key值构建

有时候我们会在后台取出key值,而不是我们前台定义好的,这时候我们如何构建我们的key值呢。比如我们在后台取了一个key值,然后可以用[ ]的形式,进行对象的构建。

let key='skill';
let obj={
    [key]:'web'
}
console.log(obj.skill);
复制代码

Object.is( ) 对象比较

ES5 比较两个值是否相等,只有两个运算符:相等运算符==和严格相等运算符===。它们都有缺点,前者会自动转换数据类型,后者的NaN不等于自身,以及+0等于-0;

ES6 提出“Same-value equality”(同值相等)算法,用来解决这个问题。Object.is就是部署这个算法的新方法。它用来比较两个值是否严格相等,与严格比较运算符===的行为基本一致。

Object.is('foo', 'foo')
// true
Object.is({}, {})
// false

+0 === -0 //true
NaN === NaN // false

Object.is(+0, -0) // false
Object.is(NaN, NaN) // true

复制代码

Object.assign()

基本使用

Object.assign方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)

Object.assign方法的第一个参数是目标对象,后面的参数都是源对象。

const target = { a: 1 };

const source1 = { b: 2 };
const source2 = { c: 3 };

Object.assign(target, source1, source2);
console.log(target)  // {a:1, b:2, c:3}
复制代码

注意事项

同名属性

如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性。

const target = { a: 1, b: 1 };

const source1 = { b: 2, c: 2 };
const source2 = { c: 3 };

Object.assign(target, source1, source2);
console.log(target)  // {a:1, b:2, c:3}
复制代码

浅拷贝

Object.assign方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。

const obj1 = {a: {b: 1}};
const obj2 = Object.assign({}, obj1);

obj1.a.b = 2;
obj2.a.b // 2
复制代码

上面代码中,源对象obj1a属性的值是一个对象,Object.assign拷贝得到的是这个对象的引用。这个对象的任何变化,都会反映到目标对象上面。

为属性指定默认值

const DEFAULTS = {
  logLevel: 0,
  outputFormat: 'html'
};

function processContent(options) {
  options = Object.assign({}, DEFAULTS, options);
  console.log(options);
  // ...
}
复制代码

面代码中,DEFAULTS对象是默认值,options对象是用户提供的参数。Object.assign方法将DEFAULTSoptions合并成一个新对象,如果两者有同名属性,则option的属性值会覆盖DEFAULTS的属性值。

注意,由于存在浅拷贝的问题,DEFAULTS对象和options对象的所有属性的值,最好都是简单类型,不要指向另一个对象。否则,DEFAULTS对象的该属性很可能不起作用。

相关文章:

  • 技术沙龙|风口之下,经验丰富的“传统开发者”要不要转型区块链开发?(西安)...
  • 中兴智能视觉大数据报道:至2020年人脸识别市场规模增速为166.6%
  • nginx lua模块安装 让nginx支持lua
  • 【知识小结】Git 个人学习笔记及心得
  • python的len函数
  • 基础网络
  • 巧妙的CSS
  • 第五周 网络
  • ASP.NET CORE MVC 2.0 发布到IIS 配置问题
  • 我的JS日记-隐式转换相关知识
  • 流计算独享模式正式邀测
  • 微信小程序接口改版后的登录和会话保持流程
  • Spring Cloud Finchley 正式发布,包含 4 个重大更新!
  • React全家桶项目
  • Linux 配置双网卡绑定,实现负载均衡
  • 网络传输文件的问题
  • 【Leetcode】104. 二叉树的最大深度
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 10个最佳ES6特性 ES7与ES8的特性
  • canvas 绘制双线技巧
  • ComponentOne 2017 V2版本正式发布
  • ECS应用管理最佳实践
  • ES10 特性的完整指南
  • extjs4学习之配置
  • idea + plantuml 画流程图
  • JavaScript新鲜事·第5期
  • laravel5.5 视图共享数据
  • node入门
  • PhantomJS 安装
  • PHP的类修饰符与访问修饰符
  • Redash本地开发环境搭建
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 巧用 TypeScript (一)
  • 使用 @font-face
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 《码出高效》学习笔记与书中错误记录
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​Spring Boot 分片上传文件
  • # Panda3d 碰撞检测系统介绍
  • #微信小程序:微信小程序常见的配置传旨
  • $(selector).each()和$.each()的区别
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (3)选择元素——(17)练习(Exercises)
  • (C语言)球球大作战
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (pojstep1.3.1)1017(构造法模拟)
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (全注解开发)学习Spring-MVC的第三天
  • (一)插入排序
  • (已解决)什么是vue导航守卫
  • ./configure,make,make install的作用(转)
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • @我的前任是个极品 微博分析