gpt4 book ai didi

javascript - ReturnIfAbrupt 在 ES6 草案中是什么意思?

转载 作者:可可西里 更新时间:2023-11-01 02:44:04 25 4
gpt4 key购买 nike

我目前正在为 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 甚至都不会引发错误。有人可以确认或帮助我理解真正的含义吗?

最佳答案

ReturnIfAbrupt 指的是突然完成。完成记录包含一个类型和与之关联的值。正常的完成类似于表达式的结果值。除了正常完成之外,函数的返回完成是通常的预期完成。任何其他完成类型都是突然的。那就是抛出,打破,继续。

if (isCompletionRecord(v)) {
if (isAbruptCompletion(v)) {
return v;
} else {
v = v.value;
}
}

按原样实现它,需要将函数包装在 try catch 中。抛出的值将是突然完成。不过,这不是您在 JS 级别看到的东西,它用于在引擎级别实现控制流和非本地控制传输。

我已经在 J​​S 虚拟机中实现了大部分 ES6 规范,这也可能有助于阐明它,这里是 ToInteger:https://github.com/Benvie/continuum/blob/master/lib/continuum.js#L516

function ToInteger(argument){
if (argument && typeof argument === OBJECT && argument.IsCompletion) {
if (argument.IsAbruptCompletion) {
return argument;
}
argument = argument.value;
}
return ToNumber(argument) | 0;
}

关于javascript - ReturnIfAbrupt 在 ES6 草案中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12995554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com