[]==![] 解析過程

1.  !優先級高於== 因此先執行![].html

根據標準:git

The production UnaryExpression : ! UnaryExpression is evaluated as follows:github

  1. Let expr be the result of evaluating UnaryExpression.lua

  2. Let oldValue be ToBoolean(GetValue(expr)).es5

  3. If oldValue is true, return false.code

  4. Return true.htm

  ![] 至關於 false;此時 []==![] 等價於 []==falseget

2. []==false;it

根據標準:io

  1. If Type(x) is Boolean, return the result of the comparison ToNumber(x) == y.

  2. If Type(y) is Boolean, return the result of the comparison x == ToNumber(y).

 此時, []==false 等價於  []==0;

3.[]==0;

根據標準:

    1. If Type(x) is either String or Number and Type(y) is Object,
      return the result of the comparison x == ToPrimitive(y).

      ToPrimitive : http://es5.github.io/index.html#x9.1

若是 最終 []==0 等價於  ""==0;  

4.""==0;

根據標準:

    1. If Type(x) is String and Type(y) is Number,
      return the result of the comparison ToNumber(x) == y.

   根據 ToNumber()  http://es5.github.io/index.html#x9.3

    "" 被轉成0

   此時 ""==0 等價於 0==0;

返回true

相關文章
相關標籤/搜索