最近,我阅读了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.如果参数是突然完成,则返回参数。
2.否则,如果参数是完井记录,那么就让参数成为参数。
什么是突然完成,它和完成记录之间的区别?它们可以结合一个步骤:如果参数是完井记录,那么返回argument.Any建议将是感激的!
发布于 2013-12-12 03:24:54
我的理解是,在ES 6中,当计算表达式时,它返回一个完成记录(这是解释行为的规范设备),该记录保存有关表达式结果的信息。
在上述情况下,如果参数是一个突然完成记录(即它的类型不是正常的),则返回它。
如果参数不是突然完成记录,则返回其值。
这在本质上意味着,如果参数转换为整数的转换没有问题,则返回值。否则,将生成一个错误值。
发布于 2013-12-12 03:21:17
根据ECMAScript规范。
“突然完成”一词是指具有[类型]值而非正常值的任何完成。
完成记录是一个“对象”,有三个数据成员:类型、值和目标。
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-normalcompletion是完成记录的一个例子。
尽管如此,enoughXD还不清楚,也许您需要在阅读上进一步阅读。
https://stackoverflow.com/questions/20533838
复制相似问题