最近,我阅读了ECMAScript语言规范。我不打算阅读整个规范,我只是学习了一些部分。我遇到很多问题,其中一个是这样的:

ToLength

1.Let len be ToInteger(argument).
2.ReturnIfAbrupt(len).
3.If len ≤ +0, then return +0.
4.Return min(len, 2^53-1).

据我了解,应该是这样的:
var len = ToInteger(argument); // step 1
len = ReturnIfAbrupt(len);// step 2
// step 3
if(len<=0){
    return +0; //-0 is OK too?
}
return Math.min(len, Math.pow(2,53)-1); // step 4

我不明白ReturnIfAbrupt(len)的含义是什么,我发现了这一点:

ReturnIfAbrupt

1.如果参数是abrupt completion,则返回参数。

2.否则,如果参数是Completion Record,则使参数成为参数。[[值]]。

什么是突然完成,以及它与完成记录之间的区别?他们可以组合一个步骤:如果参数是Completion Record,则返回参数。任何建议都会感激不尽!

最佳答案

我的理解是,在ES 6中,对表达式进行求值时,它会返回完成记录(这是用于说明行为的规范设备),其中包含有关表达式求值结果的信息。

在上述情况下,如果参数是一个突然的完成记录(即其类型为非正常值),则将其返回。

如果参数不是突然完成记录,则返回其值。

从本质上讲,这意味着如果参数到整数的转换正常,则返回该值。否则,输入错误值。

关于javascript - ECMA-262 ReturnIfAbrupt,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20533838/

10-10 16:23