6个小而美的es6新特性
译者:动静若参商
译文:http://www.zcfy.cc/article/1795
原文:https://davidwalsh.name/es6-features
JavaScript社区中的每个人都喜欢新API、新语法和新特性——可以更优雅,更智能,更有效的完成重要任务。ES6带来了很多好东西,并且在过去的一年里,浏览器厂商们全力以赴的升级浏览器来使它们可用。尽管ES6中有一些大的更新,但是一些小升级也给了我巨大的惊喜。下面这些就是我最喜欢的六个JavaScript新特性。
1. 设置对象变量键值的语法
JavaScript开发者的烦恼之一是不能在对象字面量里设置变量键值——必须要在初始化后对象后增加变量键/值:
// *Very* reduced examplelet myKey = 'key3';let obj = {key1: 'One',key2: 'Two'};obj[myKey] = 'Three';
这个烦恼说好一点是不方便,说差一点是难以阅读以及丑陋无比。ES6给开发者们提供了一个解决方法:
let myKey = 'variableKey';let obj = {key1: 'One',key2: 'Two',[myKey]: 'Three' /* yay! */};
加上一层 [],程序员们就可以在一条对象字面量定义语句就做完所有的事情。
2. 箭头函数
不用了解ES6带来的改变,你也早就知道箭头函数了——它已经是许多话题的中心,给JavaScript程序员造成了一些困扰(至少在开始的时候是这样的)。我可以写出好几篇博客来解释箭头函数的方方面面,但是我最想告诉大家的是,箭头函数是如何压缩简单函数的代码量的:
// Adds a 10% tax to totallet calculateTotal = total => total * 1.1;calculateTotal(10) // 11// Cancel an event -- another tiny tasklet brickEvent = e => e.preventDefault();document.querySelector('div').addEventListener('click', brickEvent);
不用写 function和 return这两个关键词,有时候甚至不需要写 (),箭头函数是简单函数非常好的一个快捷写法。
3. find/findIndex
JavaScript提供了 Array.prototype.indexOf方法,用来获取一个元素在数组中的索引,但是 indexOf方法不能计算目标元素的查找条件。有时候你还会想获取满足查找条件的那个元素本身。输入 find和 findIndex吧——这两个方法可以在一个数组搜索出第一个满足条件的值。
let ages = [12, 19, 6, 4];let firstAdult = ages.find(age => age >= 18); // 19let firstAdultIndex = ages.findIndex(age => age >= 18); // 1
find和 findIndex允许搜索一个计算后的值,也防止了一些不必要的副作用和循环产生的不确定值。
4. 扩展运算符: ...
扩展运算符表示一个数组或者一个可迭代的对象可以在一次调用中将它们的内容分割为独立的参数。比如:
// Pass to function that expects separate multiple arguments// Much like Function.prototype.apply() doeslet numbers = [9, 4, 7, 1];Math.min(...numbers); // 1// Convert NodeList to Arraylet divsArray = [...document.querySelectorAll('div')];// Convert Arguments to Arraylet argsArray = [...arguments];
这个神奇的运算符带来的附加好处是能够把可迭代对象( NodeList, arguments等等)转化为真正的数组——一直以来我们都用 Array.from 或其它的hack方法。
5. 模板字符串
在JavaScript中,我们用连接符或者在一行字符的末尾增加 来创建多行字符串 ,这两种方法都难以维护。许多开发者和框架都开始滥用标签来封装多行字符串模板,其它的则通过DOM和 outerHTML来获取元素的HTML作为一个字符串。
ES6给我们提供了模板字符串,你可以用它和重音符一起轻松的写多行字符串。
// Multiline Stringlet myString = `HelloI'm a new line`; // No error!// Basic interpolationlet obj = { x: 1, y: 2 };console.log(`Your total is: ${obj.x + obj.y}`); // Your total is: 3
当然,除了多行字符串,模板字符串还有其它的能力,比如说简单或者高级的插值。不过,仅仅是优雅的写多行字符串这件事情,已经让我十分欣慰了。
6. 默认参数值
许多服务端语言可以在函数声明中定义默认参数值,比如python和PHP,现在JavaScript也可以了。
// Basic usagefunction greet(name = 'Anon') {console.log(`Hello ${name}!`);}greet(); // Hello Anon!// You can have a function too!function greet(name = 'Anon', callback = function(){}) {console.log(`Hello ${name}!`);// No more "callback && callback()" (no conditional)callback();}// Only set a default for one parameterfunction greet(name, callback = function(){}) {}
如果没有传递无默认值的参数,其它的语言可能会报错,但是JavaScript会将它们设为 undefined。
这六个特性只是ES6中的沧海一粟,却是我们会不假思索的、频繁使用的特性。这些微小的新特性往往得不到人们的关注,却是代码中的核心部分。
6个小而美的es6新特性的更多相关文章
- ES6新特性概览
本文基于lukehoban/es6features ,同时参考了大量博客资料,具体见文末引用. ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代号harmony( ...
- ES6新特性之模板字符串
ES6新特性概览 http://www.cnblogs.com/Wayou/p/es6_new_features.html 深入浅出ES6(四):模板字符串 http://www.infoq.c ...
- Atitit js版本es5 es6新特性
Atitit js版本es5 es6新特性 Es5( es5 其实就是adobe action script的标准化)1 es6新特性1 Es5( es5 其实就是adobe action scrip ...
- ES6新特性:Proxy代理器
ES6新特性:Proxy: 要使用的话, 直接在浏览器中执行即可, node和babel目前还没有Proxy的polyfill;,要使用的话,直接在浏览器中运行就好了, 浏览器的兼容性为:chrome ...
- ES6新特性(函数默认参数,箭头函数)
ES6新特性之 函数参数的默认值写法 和 箭头函数. 1.函数参数的默认值 ES5中不能直接为函数的参数指定默认值,只能通过以下的变通方式: 从上面的代码可以看出存在一个问题,当传入的参数为0或者 ...
- ES6新特性简介
ES6新特性简介 环境安装 npm install -g babel npm install -g babel-node //提供基于node的REPL环境 //创建 .babelrc 文件 {&qu ...
- 轻松学会ES6新特性之生成器
生成器虽然是ES6最具魔性的新特性,但也是最难懂得的一节,笔者写了大量的实例来具体化这种抽象的概念,能够让人一看就懂,目的是希望别人不要重复或者减少笔者学习生成器的痛苦经历. 在说具体的ES6生成器之 ...
- 必须掌握的ES6新特性
ES6(ECMAScript2015)的出现,让前端开发者收到一份惊喜,它简洁的新语法.强大的新特性,带给我们更便捷和顺畅的编码体验,赞! 以下是ES6排名前十的最佳特性列表(排名不分先后): 1.D ...
- 你不知道的JavaScript--Item24 ES6新特性概览
ES6新特性概览 本文基于lukehoban/es6features ,同时参考了大量博客资料,具体见文末引用. ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代 ...
随机推荐
- 《Java 多线程编程核心技术》- 笔记
作为业务开发人员,能够在工作中用到的技术其实不多.虽然平时老是说什么,多线程,并发,注入,攻击!但是在实际工作中,这些东西不见得用得上.因为,我们用的框架已经把这些事做掉了. 比如web开发,外面有大 ...
- Python - 浅谈Python的编译与反编译
1 - Python编译过程涉及的文件 py 源代码文件,由python.exe解释,可在控制台下运行,可用文本编辑器进行编辑: pyc 源代码文件经过编译后生成的二进制文件,无法用文本编辑器进行编辑 ...
- multiprocessing- 基于进程的并行性
介绍 multiprocessing是一个使用类似于threading模块的API支持生成进程的包.该multiprocessing软件包提供本地和远程并发,通过使用子进程而不是线程有效地支持 全局解 ...
- 【ABP杂烩】Extensions后缀扩展方法
1.Extensions介绍 扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用 ...
- 数据库建模&逆向工程工具
工具推荐先走一波: Navicat Premium:https://www.navicat.com.cn/products/navicat-premiumPremium (个人推荐) Navicat ...
- springBoot(9)---定时任务,异步任务
定时任务,异步任务 一.定时任务 1.步骤: 1:在启动类上写@EnableScheduling注解 2:在要定时任务的类上写@component 3:在要定时执行的方法上写@Scheduled(fi ...
- mysql 架构篇系列 3 复制运行状态监控与选项参数说明
一. 概述 在上一篇中,搭建了一主一从的复制架构,这篇通过一些诊断方法来了解复制的运行状态和一些选项参数说明.上次mysql主从服务关机,今天在打开mysql服务,出现了错误信息. 1.首先 启动主从 ...
- Android--多线程之AsyncTask
前言 本片博客将介绍AsyncTask的使用,之前有介绍过线程和进程.而在AsyncTask中,运行在用户界面中,执行异步操作,并且把执行结果发布在UI线程上,且也不需要处理线程和Handler.在本 ...
- linux 命令 — sort、uniq
sort uniq sort:对行或者文本文件排序 uniq:去除重复的行 常用 sort -n file.txt 按数字进行排序 sort -r file.txt 按逆序进行排序 sort -M f ...
- CNN大战验证码
介绍 爬虫江湖,风云再起.自从有了爬虫,也就有了反爬虫:自从有了反爬虫,也就有了反反爬虫. 反爬虫界的一大利器,就是验证码(CAPTCHA),各种各样的验证码让人眼花缭乱,也让很多人在爬虫的过 ...