它被强制转换为布尔值。任何非空字符串的求值为true。
根据[ECMAscript语言规范]:
## 12.5
if声明
### 语义学
生产 IfStatement :
if (expression
)Statement
else语句 的评估如下:
- 令 exprRef 为对 expression 求 值的结果。
- 如果ToBoolean(GetValue( exprRef ))为 true ,则
- 返回评估第一个 Statement 的结果。
- 其他,
- 返回评估第二个 Statement 的结果。
## 9.2 ToBoolean
根据表11,抽象 *** 作ToBoolean将其参数转换为Boolean类型的值:
### 表11-ToBoolean转换
未定义: false
空值: false
布尔值:结果等于输入参数(不转换)。
Number:如果参数为 +0 , -0 或 NaN ,则结果为 false ;否则结果为 true 。
字符串:如果参数为空字符串(其长度为零),则结果为 false; 否则为 false 。否则结果为 true 。 对象:
真
就
==运算符而言,这很复杂,但要点是,如果将数字与非数字进行比较,则后者会转换为数字。如果将布尔值与非布尔值进行比较,则布尔值首先会转换为数字,然后再应用前面的句子。
有关详细信息,请参见第11.9.3节。
// Call this x == y.if ("string" == true)// Rule 6: If Type(y) is Boolean,// return the result of the comparison x == Tonumber(y).if ("string" == Number(true))// Rule 5: If Type(x) is String and Type(y) is Number,// return the result of the comparison Tonumber(x) == y. if (Number("string") == Number(true))// The above is equivalent to:if (NaN == 1)// And NaN compared to *anything* is false, so the end result is:if (false)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)