当前位置: 首页 > 面试题库 >

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

上官景铄
2023-03-14
问题内容

给出以下代码:

if ("string") {
    console.log('true!');
}
//logs "true" to the console
if ("string"==true) {
    console.log('true!');
}
//doesn't log anything

为什么会这样?我以为"string"布尔值会被强制转换为数字。因此true变得1"string"NaN。第二条if语句很有意义,但是我不明白为什么第一条语句导致要评估内部循环。这里发生了什么?


问题答案:

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

根据[ECMAScript语言规范]:

## 12.5 if声明

### 语义学

生产 IfStatementif ( 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)


 类似资料:
  • 问题内容: 如果您在Python 3.7中执行以下语句,它将(根据我的测试)打印: 但是,计算结果为。 当然,计算结果为,并计算结果为。 我最初是在测试函数的返回值时发现此问题的,但是在第二种情况下却未返回任何内容-因此,该函数返回了。 这里发生了什么? 问题答案: 这是一个很好的例子,说明为什么不应该直接使用这些方法,因为它们通常不是等效操作符的适当替代;您应该使用运算符来代替相等性比较,或者在

  • http://javapapers.com/core-java/address-of-a-java-object/ 但地址好像不一样。我错过了什么?

  • 为什么在Python中比慢?难道不应该比快吗? 我试图学习模块。从基础开始,我尝试了这些: null 注意:我运行三次,取结果的平均值,然后将时间和代码一起张贴在这里。 这个问题与如何做微基准测试无关(我在这个例子中做了,但我也明白它太基础了),而是为什么检查一个‘真’变量比一个常量慢。

  • 问题内容: 对于我确定的人来说,这是一个简单的答案。有人可以解释为什么此表达式的值为真吗? 问题答案: 因为您使用的是==(相似性)运算符,而PHP将字符串强制为int。 要解决此问题,请使用===(等于)运算符,该运算符不仅会检查值是否相同,还会检查数据类型是否相同,因此“ 123”字符串和123 int不会被视为相等。

  • 问题内容: 我在解析json数据时遇到此错误: 我找不到解决方案。我的json数据是: 我将图像转换为字节数组,如下所示: 我正在将图标从字节数组转换为Bitmap,如下所示: 我反序列化JSON响应的代码: 这是我的ProjectContainer类: 这是Project类: 如果您能帮助我解决这个问题,我将不胜感激。提前致谢 问题答案: 当您尝试解析该字段时会引发Exception ,因为在J

  • 问题内容: 我在解析JSON数据时遇到以下错误: 预期为begin_array,但在第1行第34列处为STRING 我找不到解决办法。我的JSON是以下内容: 这是我的PersonContent类: 以下是人员类别: 这是我反序列化前面提到的JSON数据的代码 我尝试了在这里找到的所有解决方案,但找不到相同的JSON。 问题答案: 错误出现在您收到的json中:您的类需要一个数组,因为 但是然后在