ES2017 函数参数列表和调用尾逗号(Trailing Commas)

10年服务1亿Tian开发工程师

本文为 《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 }');

部分原文来自:

赞(0) 打赏
未经允许不得转载:WEBTian开发 » ES2017 函数参数列表和调用尾逗号(Trailing Commas)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

Tian开发相关广告投放 更专业 更精准

联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏