栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么if(“ string”)评估“ string”为真,但if(“ string” == true)否?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么if(“ string”)评估“ string”为真,但if(“ string” == true)否?

它被强制转换为布尔值。任何非空字符串的求值为true。

根据[ECMAscript语言规范]:

## 12.5

if
声明

### 语义学

生产 IfStatement

if (
expression
)
Statement
else
语句 的评估如下:

  1. exprRef 为对 expression 值的结果。
  2. 如果ToBoolean(GetValue( exprRef ))为 true ,则
    • 返回评估第一个 Statement 的结果。
  3. 其他,
    • 返回评估第二个 Statement 的结果。

## 9.2 ToBoolean

根据表11,抽象操作ToBoolean将其参数转换为Boolean类型的值:

### 表11-ToBoolean转换

未定义: false
空值: false
布尔值:结果等于输入参数(不转换)。
Number:如果参数为 +0-0NaN ,则结果为 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)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/596828.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号