首页»JavaScript»六个漂亮的 JavaScript6 技巧

老时时彩开奖历史记录: 六个漂亮的 JavaScript6 技巧

来源:techug 发布时间:2016-05-28 阅读次数:

黑龙江时时彩玩法 www.hfebe.com.cn 在这篇文章里,我将演示 6 种 ES6 新特性的使用技巧。在每个段落的末尾,我会指出它们在我的书 Exploring 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

更多内容:

通过 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 中的模板字面量特性,这个特性带给字符串解析模板变量的能力。

更多内容:

遍历 Unicode 表示的字符串

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

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

for (const ch of 'x\uD83D\uDE80y') {
    console.log(ch.length);
}
// Output:
// 1
// 2
// 1

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

> [...'x\uD83D\uDE80y'].length
3

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

更多内容:

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

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

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

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

更多内容:

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

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

const tmpl = addrs => `
    <table>
    ${addrs.map(addr => `
        <tr><td>${addr.first}</td></tr>
        <tr><td>${addr.last}</td></tr>
    `).join('')}
    </table>
`;

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

const data = [
    { first: '<Jane>', last: 'Bond' },
    { first: 'Lars', last: '<Croft>' },
];
console.log(tmpl(data));
// Output:
// <table>
//
//     <tr><td><Jane></td></tr>
//     <tr><td>Bond</td></tr>
//
//     <tr><td>Lars</td></tr>
//     <tr><td><Croft></td></tr>
//
// </table>

更多内容:

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

当 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)) { ··· }

更多信息:

进一步阅读

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

QQ群:WEB开发者官方群(515171538),验证消息:10000
微信群:加小编微信 849023636 邀请您加入,验证消息:10000
提示:更多精彩内容关注微信公众号:全栈开发者中心(fsder-com)
网友评论(共0条评论) 正在载入评论......
理智评论文明上网,拒绝恶意谩骂 发表评论 / 共0条评论
登录会员中心
  • 麻辣财经:大咖热议全面绩效管理,“全”体现在哪儿? 2019-04-25
  • 回复@海之宁:你要懂逻辑会看不懂这篇帖子? 2019-04-25
  • 壮阔东方潮 奋进新时代——庆祝改革开放40年——山西黄河新闻网 2019-04-25
  • 回复@老老保老张工:连马克思都要重构个人所有制也!你不会自以为比马克思还高明吧? 2019-04-25
  • 紫光阁中共中央国家机关工作委员会 2019-04-24
  • 苏州大学研究生支教团网上众筹资助留守儿童 2019-04-24
  • 海淀区第16届樱桃文化节暨四季青镇第22届樱桃节开幕 2019-04-24
  • 中国人为什么一定要买房? 2019-04-23
  • 高清:李娜为2016武汉网球公开赛票务启动仪式助阵 2019-04-23
  • 全国“非遗”保护工作先进名单公布 2019-04-23
  • 《生逢灿烂的日子》:把最好的北京献给你 2019-04-22
  • 关注养老金领取资格认证难:异地居住自证很别扭 2019-04-22
  • 绍兴上虞成立保护知识产权联合执法中心 2019-04-22
  • 本钢集团:以十九大精神为指引做强做优做大国有企业 2019-04-22
  • 台东“孩子的书屋”:撑起偏乡学童翻转命运的机会 2019-04-21
  • 900| 794| 425| 804| 613| 550| 890| 546| 71| 634|