【问题标题】:ECMA-262 ReturnIfAbruptECMA-262 ReturnIfAbrupt
【发布时间】:2013-12-30 07:03:02
【问题描述】:

最近,我阅读了 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.Else 如果参数是Completion Record,则令参数为参数。[[值]]。

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

【问题讨论】:

标签: javascript ecma262 ecmascript-6


【解决方案1】:

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

在上述情况下,如果参数是突然完成记录(即它的类型不是正常),则返回。

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

这实质上意味着如果将参数转换为整数成功,则返回该值。否则,传播一个错误值。

【讨论】:

    【解决方案2】:

    根据 ECMAScript 规范。

    术语“突然完成”是指任何带有 [[type]] 的完成 非正常值。

    完成记录是一个“对象”,具有三个数据成员:类型、值和目标。

    还有http://people.mozilla.org/~jorendorff/es6-draft.html#sec-normalcompletion 是完成记录的一个例子。

    仍然不够清楚XD,也许你需要进一步阅读阅读。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多