ES 2015/6 新增内容还是比较多的,这里仅大纲性的列举一下(不一定全面)这些特性。其实,每个点挖进去都会有很多学问在里头,本文旨在汇总,所以不对这些特性进行深层次的讨论及研究。随后若有时间,再单独写几篇博客对常用的点进行深挖,与大家进行深度交流。

箭头函数

箭头函数,通过 => 语法实现的函数简写形式,C#/JAVA8/CoffeeScript 中都有类似语法。与函数不同,箭头函数与其执行下文环境共享同一个 this。如果一个箭头函数出现在一个函数对象内部,它会与这个函数共享 arguments 变量。

  1. // Expression bodies
  2. var odds = evens.map(v => v + 1);
  3. var nums = evens.map((v, i) => v + i);
  4. // Statement bodies
  5. nums.forEach(v => {
  6. if (v % 5 === 0)
  7. fives.push(v);
  8. });
  9. // Lexical this
  10. var bob = {
  11. _name: "Bob",
  12. _friends: ['jim'],
  13. printFriends() {
  14. this._friends.forEach(f =>
  15. console.log(this._name + " knows " + f)); // Bob knows jim
  16. }
  17. };
  18. // Lexical arguments
  19. function square() {
  20. let example = () => {
  21. let numbers = [];
  22. for (let number of arguments) {
  23. numbers.push(number * number);
  24. }
  25. return numbers;
  26. };
  27. return example();
  28. }
  29. square(2, 4, 7.5, 8, 11.5, 21); // returns: [4, 16, 56.25, 64, 132.25, 441]

类 Class

Javascript 并不是引入了一个新的面向对象的对象继承模型,而是基于原型继承的语法糖。其提供了一个更简单和清晰的语法来创建对象并处理继承。

  1. class Rectangle {
  2. constructor(height, width) {
  3. this.height = height;
  4. this.width = width;
  5. }
  6. }

类没有声明提升,必须确保在调用前已经进行了声明。

构造函数 constructor 是一个特殊的方法,其用于创建和初始化类的实例。

静态方法 static 关键字用于声明静态方法

创建子类 extends 关键字用于创建子类,这里要注意:extends 不能用于扩展常规对象(不可构造/非构造的),如果要继承常规对象,可使用 Object.setPrototypeOf()

调用超类 super 关键字可以用来调用父类中的方法

Mix-ins 混合

增强的对象字面量

通过字面量形式可以实现,定义prototype、键值对简写、定义方法等、动态属性名称。

  1. var obj = {
  2. // Sets the prototype. "__proto__" or '__proto__' would also work.
  3. __proto__: theProtoObj,
  4. // Computed property name does not set prototype or trigger early error for
  5. // duplicate __proto__ properties.
  6. ['__proto__']: somethingElse,
  7. // Shorthand for ‘handler: handler’
  8. handler,
  9. // Methods
  10. toString() {
  11. // Super calls
  12. return "d " + super.toString();
  13. },
  14. // Computed (dynamic) property names
  15. [ "prop_" + (() => 42)() ]: 42
  16. };

模板字符串

模板字符串 提供构造字符串的语法糖,在 Prel/python 等语言中也都有类似特性。

  1. // Basic literal string creation
  2. `This is a pretty little template string.`
  3. // Multiline strings
  4. `In ES5 this is
  5. not legal.`
  6. // Interpolate variable bindings
  7. var name = "Bob", time = "today";
  8. `Hello ${name}, how are you ${time}?`
  9. // Unescaped template strings
  10. String.raw`In ES5 "\n" is a line-feed.`
  11. // Construct an HTTP request prefix is used to interpret the replacements and construction
  12. GET`http://foo.org/bar?a=${a}&b=${b}
  13. Content-Type: application/json
  14. X-Credentials: ${credentials}
  15. { "foo": ${foo},
  16. "bar": ${bar}}`(myOnReadyStateChangeHandler);

解构赋值

Destructuring 法是一个Javascript表达式,这使得可以将值从数组或属性从对象提取到不同的变量中。

  1. // list matching
  2. var [a, ,b] = [1,2,3];
  3. a === 1;
  4. b === 3;
  5. // object matching (用新变量名赋值)
  6. var { op: a, lhs: { op: b }, rhs: c }
  7. = getASTNode()
  8. // object matching shorthand
  9. // binds `op`, `lhs` and `rhs` in scope
  10. var {op, lhs, rhs} = getASTNode()
  11. // Can be used in parameter position
  12. function g({name: x}) {
  13. console.log(x);
  14. }
  15. g({name: 5})
  16. // Fail-soft destructuring
  17. var [a] = [];
  18. a === undefined;
  19. // Fail-soft destructuring with defaults
  20. var [a = 1] = [];
  21. a === 1;
  22. // 变量可以先赋予默认值。当要提取的对象没有对应的属性,变量就被赋予默认值。
  23. var {a = 10, b = 5} = {a: 3};
  24. console.log(a); // 3
  25. console.log(b); // 5
  26. // Destructuring + defaults arguments
  27. function r({x, y, w = 10, h = 10}) {
  28. return x + y + w + h;
  29. }
  30. r({x:1, y:2}) === 23
  31. // 对象属性计算名和解构
  32. let key = "z";
  33. let { [key]: foo } = { z: "bar" };
  34. console.log(foo); // "bar"

Default + Rest + Spread

为函数参数提供默认值 & ... 定数量参数

  1. function f(x, y=12) {
  2. // y is 12 if not passed (or passed as undefined)
  3. return x + y;
  4. }
  5. f(3) == 15
  6. function f(x, ...y) {
  7. // y is an Array
  8. return x * y.length;
  9. }
  10. f(3, "hello", true) == 6
  11. function f(x, y, z) {
  12. return x + y + z;
  13. }
  14. // Pass each elem of array as argument
  15. f(...[1,2,3]) == 6

Let + Const

let 用于声明块级作用域变量。 const 用于声明常量。

  1. function f() {
  2. {
  3. let x;
  4. {
  5. // this is ok since it's a block scoped name
  6. const x = "sneaky";
  7. // error, was just defined with `const` above
  8. x = "foo";
  9. }
  10. // this is ok since it was declared with `let`
  11. x = "bar";
  12. // error, already declared above in this block
  13. let x = "inner";
  14. }
  15. }

迭代器

通过 symbol.iterator 可创建自定义迭代器。

  1. let fibonacci = {
  2. [Symbol.iterator]() {
  3. let pre = 0, cur = 1;
  4. return {
  5. next() {
  6. [pre, cur] = [cur, pre + cur];
  7. return { done: false, value: cur }
  8. }
  9. }
  10. }
  11. }
  12. for (var n of fibonacci) {
  13. // truncate the sequence at 1000
  14. if (n > 1000)
  15. break;
  16. console.log(n);
  17. }

生成器 Generators

普通函数使用function声明,而生成器函数使用function*声明。

在生成器函数内部,有一种类似return的语法:关键字yield。二者的区别是,普通函数只可以return一次,而生成器函数可以yield多次(当然也可以只yield一次)。在生成器的执行过程中,遇到yield表达式立即暂停,后续可恢复执行状态。

  1. function* quips(name) {
  2. yield "你好 " + name + "!";
  3. yield "希望你能喜欢这篇介绍ES6的译文";
  4. if (name.startsWith("X")) {
  5. yield "你的名字 " + name + " 首字母是X,这很酷!";
  6. }
  7. yield "我们下次再见!";
  8. }

Unicode

  1. // same as ES5.1
  2. "
  3. ES 2015/6 新特性汇总的更多相关文章

      1. 【转】Spark-Sql版本升级对应的新特性汇总
      1. Spark-Sql版本升级对应的新特性汇总 SparkSQL的前身是Shark.由于Shark自身的不完善,2014年6月1日Reynold Xin宣布:停止对Shark的开发.SparkSQL抛弃原 ...

      1. iOS8 针对开发者所拥有的新特性汇总如下
      1. iOS8 针对开发者所拥有的新特性汇总如下 1.支持第三方键盘 2.自带网页翻译功能(即在线翻译) 3.指纹识别功能开放:第三方软件可以调用 4.Safari浏览器可直接添加新的插件. 5.可以把一个 ...

      1. 21、前端知识点--html5和css3新特性汇总
      1. 跳转到该链接 新特性汇总版: https://www.cnblogs.com/donve/p/10697745.html HTML5和CSS3的新特性(浓缩好记版) https://blog.csdn ...

      1. 【ES】338- ECMAScirpt 2019 新特性汇总
      1. 点击上方"前端自习课"关注,学习起来~ 最近在做的一个活动,大家都可以参与: 送 1600 元超大现金红包啦,走过路过不要错过哦 ~ 最近 ECMAScript2019,最新提案完 ...

      1. Swift3新特性汇总
      1. 之前 Apple 在 WWDC 上已将 Swift 3 整合进了 Xcode 8 beta 中,而本月苹果发布了 Swift 3 的正式版.这也是自 2015 年底Apple开源Swift之后,首个发 ...

      1. iOS6、7、8、9新特性汇总和适配说明
      1. iOS6新特性 一.关于内存警告 ios6中废除了viewDidUnload,viewWillUnload这两个系统回调,收到内存警告时在didReceiveMemoryWarning中进行相关的处理 ...

      1. 2015 Objective-C 新特性
      1. Overview 自 WWDC 2015 推出和开源 Swift 2.0 后,大家对 Swift 的热情又一次高涨起来,在羡慕创业公司的朋友们大谈 Swift 新特性的同时,也有很多像我一样工作上依然 ...

      1. 【CuteJavaScript】ES2019 新特性汇总
      1. 最近 ECMAScript2019,最新提案完成:tc39 Finished Proposals,我这里也是按照官方介绍的顺序进行整理,如有疑问,可以查看官方介绍啦~ 另外之前也整理了 <ES6 ...

      1. H5新特性汇总
      1. H5新特性: 新增选择器 document.querySelector.document.querySelectorAll 拖拽释放(Drag and drop) API 媒体播放的 video 和 ...

    1. 随机推荐

        1. 【Uva 10498】满意值
        1. Description Kaykobad教授把为ACM选手买饭的任务交给了Nasa.Nasa决定买n种不同的食物.然后他询问了m名选手对每种食物的需求量.选手们当然不会给出任何符合逻辑的回答,他们只是 ...

        1. Quartz (二) 和Spring整合
        1. 先给个场景:每五分钟扫描并关闭7天未付款的订单 1.quartz pom.xml依赖 <dependencies> <dependency> <groupId>or ...

        1. IOS(一) 基础控件的介绍以及使用
        1. IOS的界面的制作,相对于Android来说 简洁了很多,虽然创建布局的方式都是两种(代码创建.布局文件) 但是Android中的xml布局文件在某些方面也属于代码创建,因为自己使用到得每一个属性 都 ...

        1. SVN提交后自动推送消息到钉钉群
        1. 钉钉设置机器人配置 1.进入配置机器人入口 2.添加机器人 3.测试WebHook请求 本人使用Postman进行测试 4.配置SVN 4.1 配置 Pre-commit hook 设置提交内容必须包 ...

        1. Centos7.3 安装Mysql5.7并修改初始密码
        1. 1.官方安装文档 http://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/ 2.下载 Mysql yum包 http://dev.mysql.co ...

        1. 深入理解Java常用类----String
        1.      Java中字符串的操作可谓是最常见的操作了,String这个类它封装了有关字符串操作的大部分方法,从构建一个字符串对象到对字符串的各种操作都封装在该类中,本篇我们通过阅读String类的源码 ...

        1. $>_<$
        1. Hello word! 从jdk环境变量的配置,myeclipse的安装,tomcat的部署和使用,面向对象的编程思想,什么是java. 思维从模糊到清晰,一路摸索,不见泰山!

        1. [刷题]算法竞赛入门经典(第2版) 6-9/UVa127 - "Accordian" Patience
        1. 题意:52张牌排一行,一旦出现任何一张牌与它左边的第一张或第三张"匹配",即花色或点数相同,则须立即将其移动到那张牌上面,将其覆盖.能执行以上移动的只有压在最上面的牌.直到最后没有 ...

        1. yii2 resetful 授权验证
        1. 什么是restful风格的api呢?我们之前有写过大篇的文章来介绍其概念以及基本操作. 既然写过了,那今天是要说点什么吗? 这篇文章主要针对实际场景中api的部署来写. 我们今天就来大大的侃侃那些年a ...

        1. Vuejs实例-01使用vue-cli脚手架搭建Vue.js项目
        1. [TOC] 1. 前言 vue-cli 一个简单的构建Vue.js项目的命令行界面 整体过程: $ npm install -g vue-cli $ vue init webpack vue-admi ...