本文为 《JavaScript 新书:探索 ES2016 与 ES2017》的内容章节,你可以点击链接查看完整目录。
ECMAScript 2017 新特性提议 – 。
概述
参数后面跟的逗号现在是合法的:
function foo( param1, param2, ) {}
同样,函数调用时参数后面跟的逗号也是合法的:
foo( 'abc', 'def', );
对象字面量和数组字面量后面跟的逗号
对象字面量后面跟的逗号会被忽略:
let obj = { first: 'Jane', last: 'Doe', };
数组字面量后面跟的逗号也会被忽略:
let arr = [ 'red', 'green', 'blue', ]; console.log(arr.length); // 3
为什么要这么做,有什么用? 有两个好处。
首先,重新排列元素项比较简单,如果你要改变最后一个元素项的位置,你不必添加和删除逗号。
其次,它帮助版本控制系统跟踪实际发生的变化。例如,从:
[ 'foo' ]
修改为:
[ 'foo', 'bar' ]
这么做,版本控制系统会标记 foo
行和 bar
行为已更改,尽管唯一真正的变化是添加了后面的一行。
特性:允许在参数定义和函数调用后面使用逗号
考虑到 后面跟的逗号 可选的和可忽略的好处,这个特性也被引入到了函数参数定义和函数参数调用中。
例如,以下函数声明在 ECMAScript 2015(ES6) 中会导致语法错误,但现在 ECMAScript 2017(ES8) 是合法的:
function foo( param1, param2, ) {}
类似地,下面这个调用foo()
现在在语法上也是合法的:
foo( 'abc', 'def', );
解构中的尾随逗号
在使用解构赋值时,尾随逗号也可以用于左侧:
// 带有尾后逗号的数组解构 [a, b,] = [1, 2]; // 带有尾后逗号的对象解构 var o = { p: 42, q: true, }; var {p, q,} = o;
不合法的尾随逗号
仅仅包含逗号的函数参数定义或者函数调用会抛出 SyntaxError。 而且,当使用剩余参数的时候,并不支持尾随逗号。例如:
function f(,) {} // SyntaxError: missing formal parameter (,) => {}; // SyntaxError: expected expression, got ',' f(,) // SyntaxError: expected expression, got ',' function f(...p,) {} // SyntaxError: parameter after rest parameter (...p,) => {} // SyntaxError: expected closing parenthesis, got ','
同样,使用剩余参数时,出抛出 SyntaxError:
var [a, ...b,] = [1, 2, 3]; // SyntaxError: rest element may not have a trailing comma
JSON 中的尾随逗号
对象中的尾后逗号仅仅在 ECMAScript 5 中引入。由于 JSON 基于 ES5 之前的语法, JSON 中并不支持尾随逗号。
下面两行都会抛出 SyntaxError:
JSON.parse('[1, 2, 3, 4, ]'); JSON.parse('{"foo" : 1, }'); // SyntaxError JSON.parse: unexpected character // at line 1 column 14 of the JSON data
去掉尾后逗号,使 JSON 正确解析:
JSON.parse('[1, 2, 3, 4 ]'); JSON.parse('{"foo" : 1 }');
部分原文来自:
最新评论
写的挺好的
有没有兴趣翻译 impatient js? https://exploringjs.com/impatient-js/index.html
Flexbox playground is so great!
感谢总结。
awesome!
这个好像很早就看到类似的文章了
比其他的教程好太多了
柯理化讲的好模糊…没懂