【发布时间】:2012-10-11 07:48:53
【问题描述】:
我目前正在为 ES6 草案实施一些填充程序。我想知道是否有人可以告诉我ReturnIfAbrupt 的含义。例如,我对Number.toInt 的实现(调用内部[[ToInteger]] 如下:
if (!('toInt' in Number))
Object.defineProperty(Number, 'toInt', {
value: function toInt(value) {
// ECMA-262 Ed. 6, 9-27-12. 9.1.4
// 1. Let number be the result of calling ToNumber on the input argument.
var number = Number(value);
// 2. ReturnIfAbrupt(number).
// ?
// 3. If number is NaN, return +0.
if (number != number) return 0;
// 4. If number is +0, -0, +Infinity, or -Infinity, return number.
if (number == 0 || 1 / number == 0) return number;
// 5. Return the result of computing sign(number) * floor(abs(number)).
return (n < 0 ? -1 : 1) * Math.floor(Math.abs(number));
},
writable: true,
configurable: true
});
第 2 步是ReturnIfAbrupt(number)。您会注意到我目前有 // ? 用于该步骤,因为我不确定该怎么做。 ReturnIfAbrupt(...) 是什么意思?
我已阅读草稿中关于 ReturnIfAbrupt 的部分,但是我无法理解第 2 步应该做什么做什么,在上面的代码中用什么代替 // ?。
根据我的阅读,可能什么都不应该做,ReturnIfAbrupt 步骤仅仅意味着让 ToNumber 中发生的任何错误向上传播,退出函数。但是,这似乎过于冗长,因为我认为这是不言而喻的。此外,在我看来,ToNumber 甚至不会引发错误。有人可以确认或帮助我理解真正的含义吗?
【问题讨论】:
-
是的,我已经读过了。这对我来说并不完全有意义,但从我能理解的情况来看,在这一步听起来我真的没什么可做的,如果
ToNumber在步骤 1 中抛出错误,它应该传播并且函数应该退出。但是,我真的不明白为什么这需要它自己的步骤,因为它应该被理解。如果是这样,我想确认一下。如果不是这样,我需要帮助理解。 -
您的解释似乎是正确的。我可能遗漏了一些细节,但重要的部分是在我猜想的类型覆盖出现错误的情况下抛出异常。
标签: javascript ecmascript-harmony