前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ES6知识库汇总二

ES6知识库汇总二

作者头像
j_bleach
发布2019-07-02 11:17:48
3380
发布2019-07-02 11:17:48
举报
文章被收录于专栏:前端加油站

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/j_bleach/article/details/70761711

对象

1.字面量可以定义变量

代码语言:javascript
复制
var lastWord = 'last word';

var a = {
  'first word': 'hello',
  [lastWord]: 'world'
};

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

代码语言:javascript
复制
var target = { a: 1, b: 1 };

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

Object.assign(target, source1, source2);//返回target
target // {a:1, b:2, c:3}

合并多个对象

将多个对象合并到某个对象。

代码语言:javascript
复制
const merge =
  (target, ...sources) => Object.assign(target, ...sources);
如果希望合并后返回一个新对象,可以改写上面函数,对一个空对象合并。

const merge =
  (...sources) => Object.assign({}, ...sources);

3.遍历对象 Object.keys(),Object.values(),Object.entries() ES5 引入了Object.keys方法,返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键名。 4.Null 传导运算符(不能用) 编程实务中,如果读取对象内部的某个属性,往往需要判断一下该对象是否存在。比如,要读取message.body.user.firstName,安全的写法是写成下面这样。

代码语言:javascript
复制
const firstName = (message
  && message.body
  && message.body.user
  && message.body.user.firstName) || 'default';

这样的层层判断非常麻烦,因此现在有一个提案,引入了“Null 传导运算符”(null propagation operator)?.,简化上面的写法。

代码语言:javascript
复制
const firstName = message?.body?.user?.firstName || 'default';

Symble

1.由于每一个 Symbol 值都是不相等的,这意味着 Symbol 值可以作为标识符,用于对象的属性名,就能保证不会出现同名的属性。注意,Symbol 值作为对象属性名时,不能用点运算符。 2.消除魔术字符串。魔术字符串指的是,在代码之中多次出现、与代码形成强耦合的某一个具体的字符串或者数值。风格良好的代码,应该尽量消除魔术字符串,该由含义清晰的变量代替。 常用的消除魔术字符串的方法,就是把它写成一个变量。

代码语言:javascript
复制
var shapeType = {
  triangle: 'Triangle'
};

function getArea(shape, options) {
  var area = 0;
  switch (shape) {
    case shapeType.triangle:
      area = .5 * options.width * options.height;
      break;
  }
  return area;
}

getArea(shapeType.triangle, { width: 100, height: 100 }); 上面代码中,我们把Triangle写成shapeType对象的triangle属性,这样就消除了强耦合。

如果仔细分析,可以发现shapeType.triangle等于哪个值并不重要,只要确保不会跟其他shapeType属性的值冲突即可。因此,这里就很适合改用 Symbol 值。

代码语言:javascript
复制
const shapeType = {
  triangle: Symbol()
};

3.Symbol.for()与Symbol()这两种写法,都会生成新的Symbol。它们的区别是,前者会被登记在全局环境中供搜索,后者不会。Symbol.for()不会每次调用就返回一个新的 Symbol 类型的值,而是会先检查给定的key是否已经存在,如果不存在才会新建一个值。

Set

1.数组去重 const set = new Set([1, 2, 3, 4, 4]); 扩展运算符(…)内部使用for…of循环,所以也可以用于 Set 结构。

Map

它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适。

像遍历一个map一样遍历一个object是可行的,但奇妙的是–还会有一些坑潜伏在暗处。 Map更容易使用,并且增加了一些可集成的优势。然而object是以随机顺序遍历的,map是以插入的顺序遍历的。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年04月25日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 对象
  • Symble
  • Set
  • Map
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档