最近,我阅读了ECMAScript语言规范。我没有打算阅读整个规范,我只是选了一些部分。我遇到了许多问题,其中一个是这样的:
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)的含义是什么,我发现了这个:
1.如果参数是abrupt completion,则返回参数。
2.如果参数是Completion Record,则将参数设为参数。[[value]]。
什么是突然完成,它与完成记录之间的差异?它们可以合并一步:如果参数是Completion Record,那么返回参数。任何建议都会感激不尽!
答案 0 :(得分:1)
根据ECMAScript Spec。
“突然完成”一词是指[[类型]]的任何完成 除正常值以外的其他值。
完成记录是一个“对象”,有三个数据成员:类型,值和目标。
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-normalcompletion 是完成记录的一个例子。
尽管如此,目前尚不清楚XD,也许你需要进一步阅读阅读。
答案 1 :(得分:1)
我的理解是,在ES 6中,当评估表达式时,它返回完成记录(这是一个用于解释行为的规范设备),其中包含有关评估表达式的结果的信息。
在上面的例子中,如果参数是一个突然完成记录(即它的类型不是 normal ),那么它将被返回。
如果参数不是突然完成记录,则返回其值。
这实际上意味着如果将参数转换为整数,则返回该值。否则,提出错误值。