【发布时间】:2017-11-12 22:28:18
【问题描述】:
关于可选参数,我注意到 babel 的一个有点奇怪的转译决定。以下 ES6 代码:
function myFunction(x = 2, y = 3) {}
被转译为
function myFunction() {
var x = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 2;
var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 3;
}
我很快就要举行一次演示,说明 ES6 语法有多短和更简洁,以及它在 ES5 中的外观(通常通过 Babel)。但对我来说,这似乎有点强迫,而且性能也低得多。有理由不这样做吗?:
function myFunction(x, y) {
x = x === undefined ? 2 : x;
y = y === undefined ? 3 : y;
}
【问题讨论】:
-
是的。想象一个函数,您将在其中传递 undefined 作为参数。这就是需要长度检查的原因。
-
@JaredSmith:如果您将
undefined作为具有默认值的参数值传递,则使用默认值,而不是undefined。 -
对于您的演示,我不会将 ES2015 语法与 ES5 等效项在转译时的外观进行比较。相反,我会将 ES2015 语法与您在 ES5 中实际编写的语法进行比较,这看起来不太像 Babel 在许多情况下所做的(特别是看看它对
class所做的)。就新语法的真正好处而言,这提供了更多信息。我想我们都同意,您上面的第一个代码块比您的上一个代码块更简洁(许多人也会认为更清晰,但这更主观)。 -
你说得对,这主要是我的目标,但如果我要测试 babel 中的可选参数并且有人说“不,那不是真的,它可以用更短的方式编写”我现在会知道该说什么。
-
Babel 的目标不是简洁,而是符合规范。
标签: javascript ecmascript-6 babeljs transpiler