为ES7&ES7+新特性立一个Note

前言

ES6较ES5来说可能是一个较大的版本变动,增添了很多特性或者语法糖,使得整个JS语言的使用体验又向前迈了一大步,但是ES6(ECMAScript2015)之后,每一年都会有新的语言强化版本更新出现,所谓的ES7等,这些变动都没有再像ES6那么多。加之很多新特性在正式发布之前就一定会至少有两个成熟的实现支持,使得在ES6之后,新增特性版本上就变得很模糊了,尤其是在Node环境中,有些时候对于一些小的地方的新特性你都已经写了很多次了都有可能不知道用的到底是哪个版本了。

我本地和开发环境都已经迁移和更新到了Node的最新LTS版本8.9.4对新版本的语法支持都做得已经很好了,以下特性虽然归在ES6之后的版本,但是Node已经有了支持。而对于语言的新语法特性来说,个人认为最好的方式就是理解语言重要部分之外多关注语言,然后多积累吧。所以我把这篇文章当做是一个对ES6之后的语法的一些“小地方”的一个笔记,记录积累那些小的特性或者语法,当然一些重要的地方比如说像共享内存原子操作等这种,感觉内容很多的块就不会在这里记了。

以前刚学PY的时候觉得python中的装饰器这种这么骚气的语法糖为啥JS不弄一个,结果一查JS的Decorator(装饰器)草案已经提出了。

不管是哪一款优秀的开源框架还是哪一门优秀并且开发者使用的多的语言,往前发展都会对其他优秀的框架语言进行借鉴,这种看似竞争实则携手发展的面貌对于开发者来说本身就是一份回馈也是一份督促。

开始

  • **表示乘方
console.log(2**3)//输出8
  • Trailing commas(函数参数的尾逗号)

之前数组的最后一个元素和对象的最后一个属性后面都可以加逗号,现在函数的最后一个参数后面可以加逗号了

function f(
    a,
    b,
)
  • 数组新增了includes()方法

在之前判定数组中是否包含某个元素的方式是indexOf,返回值如果是-1则表示没有包含,现在[].includes(ele)返回值为Bollean可以判断是否包含了。

let a = [1,2,3]
a.includes(1)//返回值为true
a.includes(4)//返回值为false
  • str.padStart()str.padEnd()

字符串新增了两个方法,参数是number,表示当字符串的长度达不到方法的参数的长度时在末尾或者开头用空格补齐长度

let b = 'abc'
b.padStart(5)//返回值为'  abc'
b.padEnd(5)//返回值为'abc  '
  • 对象的Rest&Spread

对于数组的REST和Spread已经是经常用的了,对于对象的属性的Rest和Spread与之类似


let {x,y,...z}={x:1,y:2,z:3,d:4}
console.log(x)//1
console.log(z)//输出{ z: 3, d: 4 }

let n = {x,y,...z}
console.log(n)//输出{x:1,y:2,z:3,d:4}
  • Object.values(obj)Object.entries(obj)

在ES5引入了遍历对象key的方法Object.keys(obj)之后再ES8新增了新的对应遍历对象值的方法。三者的返回值都是数组。

Object.values(obj)返回的是对应的value数组

let obj = {a:1,b:2}
Object.values(obj)//输出[ 1, 2 ]
for (let value of Object.values(obj)) {
  console.log(value); // 1, 2
}

Object.entries(obj)返回的是有每一对键值对数组组成的数组。

let obj = {a:1,b:2}
Object.entries(obj)//输出[ [ 'a', 1 ], [ 'b', 2 ] ]
for (let [key, value] of Object.entries(obj)) {
  console.log([key, value]); // ['a', 1], ['b', 2]
}
  • Object.getOwnPropertyDescriptors(obj)获取属性信息

由之前的Object.getOwnPropertyDescriptor(obj,'propName')而来返回的是对象所有属性的描述信息,返回值是一个对象。

let a = {x:1,y:1,z:2}
Object.getOwnPropertyDescriptors(a)
||输出值
\/
{ x: { value: 1, writable: true, enumerable: true, configurable: true },
  y: { value: 1, writable: true, enumerable: true, configurable: true },
  z: { value: 2, writable: true, enumerable: true, configurable: true } }
====================================================  
Object.getOwnPropertyDescriptors(a,'x')
||输出值
\/
{ value: 1, writable: true, enumerable: true, configurable: true }

补充:
ES5开始对象的属性都具备了属性描述符

Object.defineProperty定义对象属性

    Object.defineProperty( myObject, "a", {
        value: 2,
            writable: true, 
            configurable: true, 
            enumerable: true
         } );

说明:

  1. writable:是否可写;即值是不是能被set变,严格模式下修改writable:false的属性值是会抛出错误

  2. Configurable是否可用Object.defineProperty来配置,改为false之后则不管是不是严格模式下在想来修改属性描述都会抛出错误,并且被修改为不可配置的这个属性不能用delete myObject.a 这种方式删掉

  3. Enumerable控制的是属性是否会出现在对象的属性枚举中,比如for..in 循环(但是可以通过 in 操作符来判断是否存在),“可枚举”相当于“可以出现在对象的属性遍历中”判断是否可枚举myObject.propertyIsEnumerable( "a" );

  4. 关于in 和 obj.hasOwnProperty()

in 操作符会检查属性是否在对象及其 Prototype 原型链中。相比之下, hasOwnProperty(..) 只会检查属性是否在 myObject 对象中,不会检查 Prototype 链。

  • Async&Await

异步的“终极解决方案”,已经是很常用的东西了,在这里就不过多介绍了。

由于Node的主场景(网络IO和文件IO)和JS的语言特性,异步的处理一直都是一个很大的一块,所以关于异步的总结我会尽快梳理成一篇完整的博客。

后续

后续会有更新和补充。

关于学习,语法这种事情最好的方式就是自己多有意识的多用几次,这样遇到符合使用场景的时候就会可以想到,哪怕细节记得不清了也可以很快解决。由于平时主要在Node端写代码所以测试语法最快的方式就是在node REPL中敲一遍,加深了印象也得到了结果,当然有一个方便查看的表也是很重要的ECMAScript compatibility table

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 224,014评论 6 522
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 95,832评论 3 402
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 171,062评论 0 366
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 60,620评论 1 300
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 69,636评论 6 399
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,148评论 1 314
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,522评论 3 427
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,501评论 0 278
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,032评论 1 324
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,069评论 3 344
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,211评论 1 354
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,848评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,541评论 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,013评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,136评论 1 275
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,712评论 3 380
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,240评论 2 363

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,157评论 0 13
  • 今天,注册简书。
    yxtxjhh阅读 120评论 0 1
  • 路,风尘仆仆像刚干完地里的农活走了好远的路急着回家做饭的母亲 小时候的路,温暖而急切地向前蜿蜒她的身上,洒满了童年...
    郭安安阅读 292评论 23 14
  • 「你会吗?」「不会,但我可以学。」「你知道的吧?」「不知道,但我可以 google. 」百分之九十九的问题可以用这...
    戰敭阅读 196评论 0 0