六个漂亮的 ES6 技巧

通过参数默认值强制要求传参

ES6 指定默认参数在它们被实际使用的时候才会被执行,这个特性让我们可以强制要求传参:

/**

* Called if a parameter is missing and

* the default value is evaluated.

*/

function mandatory() {

throw new Error("Missing parameter");

}

function foo(mustBeProvided = mandatory()) {

return mustBeProvided;

}

函数调用 mandatory() 只有在参数 mustBeProvided 缺失的时候才会被执行。

在控制台测试:

> foo()

Error: Missing parameter

> foo(123)

123

更多内容:

  • 段落: “Required parameters” 。

通过 for-of 循环来遍历数组元素和索引

方法 forEach() 允许你遍历一个数组的元素和索引:

var arr = ["a", "b", "c"];

arr.forEach(function (elem, index) {

console.log("index = "+index+", elem = "+elem);

});

// Output:

// index = 0, elem = a

// index = 1, elem = b

// index = 2, elem = c

ES6 的 for-of 循环支持 ES6 迭代(通过 iterables 和 iterators)和解构。如果你通过数组的新方法 enteries() 再结合解构,可以达到上面 forEach 同样的效果:

const arr = ["a", "b", "c"];

for (const [index, elem] of arr.entries()) {

console.log(`index = ${index}, elem = ${elem}`);

}

arr.enteries() 通过索引-元素配对返回一个可迭代对象。然后通过解构数组 [index, elem] 直接得到每一对元素和索引。console.log() 的参数是 ES6 中的模板字面量特性,这个特性带给字符串解析模板变量的能力。

更多内容:

  • 章节: “Destructuring”
  • 章节: “Iterables and iterators”
  • 段落: “Iterating with a destructuring pattern”
  • 章节: “Template literals”

遍历 Unicode 表示的字符串

一些 Unicode 编码的字由两个 JavaScript 字符组成,例如,emoji 表情:

字符串实现了 ES6 迭代,如果你通过迭代来访问字符串,你可以获得编码过的单个字(每个字用 1 或 2 个 JavaScript 字符表示)。例如:

for (const ch of "xuD83DuDE80y") {

console.log(ch.length);

}

// Output:

// 1

// 2

// 1

这让你能够很方便地得到一个字符串中实际的字数:

> [..."xuD83DuDE80y"].length

3

展开操作符 (...) 将它的操作对象展开并插入数组。

更多内容:

  • 章节: “Unicode in ES6”
  • 段落: “The spread operator (...)”

通过变量解构交换两个变量的值

如果你将一对变量放入一个数组,然后将数组解构赋值相同的变量(顺序不同),你就可以不依赖中间变量交换两个变量的值:

[a, b] = [b, a];

可以想象,JavaScript 引擎在未来将会针对这个模式进行特别优化,去掉构造数组的开销。

更多内容:

  • 章节: “Destructuring”

通过模板字面量(template literals)进行简单的模板解析

ES6 的模板字面量与文字模板相比,更接近于字符串字面量。但是,如果你将它们通过函数返回,你可以使用他们来做简单的模板渲染:

const tmpl = addrs => `

${addrs.map(addr => `

${addr.first}${addr.last}

`).join("")}

`;

tmpl 函数将数组 addrs 用 map(通过箭头函数) join 拼成字符串。tmpl() 可以批量插入数据到表格中:

const data = [

{ first: "", last: "Bond" },

{ first: "Lars", last: "" },

];

console.log(tmpl(data));

// Output:

// //

//

//     Bond

//

//     Lars

//

//

//

更多内容:

  • 博客文章: “Handling whitespace in ES6 template literals”
  • 段落: “Text templating via untagged template literals”
  • 章节: “Arrow functions”

通过子类工厂实现简单的合成器

当 ES6 类继承另一个类,被继承的类可以是通过任意表达式创建的动态类:

// Function id() simply returns its parameter

const id = x => x;

class Foo extends id(Object) {}

这个特性可以允许你实现一种合成器模式,用一个函数来将一个类 C 映射到一个新的继承了C的类。例如,下面的两个函数 Storage 和 Validation 是合成器:

const Storage = Sup => class extends Sup {

save(database) { ··· }

};

const Validation = Sup => class extends Sup {

validate(schema) { ··· }

};

你可以使用它们去组合生成一个如下的 Employee 类:

class Person { ··· }

class Employee extends Storage(Validation(Person)) { ··· }

更多信息:

  • 段落: “Simple mixins”

下面的两个章节提供了很好地概括了 ECMAScript 6 的特性:

  • An overview of what’s new in ES6
  • First steps with ECMAScript 6 [features that are easy to adopt]
时间: 2024-11-08 15:00:20

六个漂亮的 ES6 技巧的相关文章

实力玩家分享《后三组六杀号心得》技巧分析

后三组六杀2码公式 ┿导师Q[8285655]精准一对一指导, 长久盈利轻松賸率95%,已助上千人成功翻盘,欢迎增加,沟通交流!我分享这些不为别的,只为像我一样的人能早日翻盘! 后三直选和定位胆从根本上讲形态是一致的,后三为000-999中选取单一数字进行游戏,定位胆为10个数中选取单一数字.两者的不同在于,在保证同样的中jiang概率下后三可人为操作性大于定位胆.举个例子:保证投注中奖概率为百分之五十的情况下,后三需要投注500个号码,假使我们选择000-499此500个号码,定位胆我们选择0

Linux(六)shell操作实用技巧

一.shell操作日期时间 linux 系统为我们提供了一个命令 date,专门用来显示或者设置系统日期时间的.      语法格式为:      date [OPTION]... [+FORMAT] 或者      date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]      常用的可选项有:      --help 显示辅助信息      --version 显示 date 命令版本信息      -u 显示目前的格林威治时间      -

css学习の第六弹—样式设置小技巧

一.css样式设置小技巧>>1.行内元素水平居中是通过给父元素设置 text-align:center 来实现的.html代码:<body> <div class="txtCenter">我想要在父容器中水平居中显示.</div></body> css代码:<style> .txtCenter{ text-align:center; }</style>>>2.块状元素(定宽)通过设置&quo

es6技巧写法

为class绑定多个值 普通写法 :class="{a: true, b: true}" 其他 :class="['btn', 'btn2', {a: true, b: false}]" 一个值判断a或者判断b 普通写法 if(flg === a || flg === b) 其他 ['a','b'].indexOf(flg) > -1 引用一个组件 普通写法 import a from './a.vue' componets: { a } node写法 com

怎么能知道组六杀一码 实施技巧包括做号技巧等等能和我说说吗

!@22997117 很多新手开始不知道怎么样杀号,通过几年玩的经历,总结简单方便的方法,适合刚开的新手菜鸟.简单方便.易学给大家一起分享. 原文地址:https://blog.51cto.com/14342858/2407029

第六节:mybatis小技巧

本节主要讲解mybatis如下五个方面的内容: foreach 批量插入 模糊查询like的写法 #{}和${}的区别 解决实体类中的属性名和表中的字段名不一致问题 由于每次建立工程比较复杂,可以参考第一节:mybatis入门来搭建一个简单的工程,然后来测试本节内容. 1.foreach foreach是一个动态sql标签,主要解决mapper接口方法的参数是集合数组时如何进行操作.比如根据传入的多个id进行查询,那么sql一般使用 in 关键字,但是多个id如何拼装成一条完整的sql语句?这就

Chrome 开发者工具的六个小技巧

下面是特邀Umar Hansa做的一篇文章.Umar有一个新闻组,我是他的粉丝,他很亲切地应我们要求把这篇约稿写成了新闻组的形式.我将让他介绍一下他自己. 嘿,我是Umar.我喜欢在Twitter(@umaar)上分享web开发相关的小技巧,同时也喜欢通过Dev Tips以gif的形式分享开发的小技巧.Dev Tips是开发者的一个新闻组.现在,它主要是Chrome开发工具相关的内容.开始之前,感谢CSS-Tricks给我机会为自己喜欢的一个组织做点贡献. 这篇文章将涵盖Chrome开发工具的六

ThinkPHP多应用/项目配置技巧(使用同一配置文件)--(十六)

原文:ThinkPHP多应用/项目配置技巧(使用同一配置文件)--(十六) ThinkPHP多应用配置技巧(没有使用分组,这是通过入口文件产生的Home.Admin)----很实用! 比如:现在有Home.Admin应用 问题:前台后台使用数据库的时候,都得各自配置自己的config文件 需求:现在想HOME/Aamin都使用一个公共文件配置文件,统一修改好维护 步骤: 1--在项目根文件夹下(入口文件同级目录下),创建一个公共的config.php文件 <?php -->这里写了配置文件前后

池建强 博客 Mac使用技巧 第一季

第1天: 今天推送的Mac技巧: 使用OS X,我们可以充分利用系统提供的多个Space,把不同的程序放到不同的Space,让我们的系统更有扩展性.如何增加Space呢?四指上推,在桌面的最上方会出现当前的Space,把鼠标移到Space列表的右侧,会出现一个带+号的空间,点击加号,即可增加一个Space.那么如何把某个程序固定在某个Space打开呢?在某个Space打开程序,在Dock中找到这个程序图标,鼠标长按会出现一个菜单,选项-分配给,选“这个桌面”,下次再打开这个程序,就会自动进入设定