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

为什么('0'?'a':'b')的行为不同于('0'== true?'a':'b')[重复]

朱明知
2023-03-14
问题内容

为什么以下两个语句的结果不同?

('0' ? 'a' : 'b') /* -> 'a' */
('0' == true ? 'a' : 'b') /* -> 'b' */

编辑:

我应该补充一点,我怀疑将“ 0”第一条语句强制转换为要比较的布尔值-这应该与“‘0’== true”完全相同,显然这是不正确的。


问题答案:

首先,为了完整性:

('0' ? 'a' : 'b')

'a'的,因为'0'是一个非空字符串,这始终计算结果为true

字符串:如果参数为空字符串(其长度为零),则结果为 false; 否则为 false 。否则结果为 true

现在到'0' == true

这里将进行两次类型转换。我们可以在规范的第11.9.3节“抽象平等比较算法”中遵循这一要求。

操作数表示为xyx == y)。

在我们的例子中,x是一个字符串('0')和y一个布尔值(true)。因此,执行步骤7:

如果Type(y)为Boolean,则返回比较结果x == ToNumber(y)。

将布尔值转换为数字时,将进行以下转换:

布尔值:如果参数为 true, 则结果为 1 。如果参数为 false, 则结果为 +0

现在我们有

'0' == 1

符合步骤5中的条件:

如果Type(x)为String,Type(y)为Number,则返回比较结果ToNumber(x)== y。

如何将字符串转换为数字更为复杂,但是当然也可以在规范中找到。

所以最后的比较是

0 == 1

这是false(步骤1. a。vi。)



 类似资料:
  • 我尝试了一些代码在Java中交换两个整数,而不使用第三个变量,即使用XOR。 以下是我尝试的两个交换函数: 该代码产生的输出如下: 我很想知道,为什么会有这样的说法: 和这个不一样?

  • 问题内容: 我尝试了一些代码,使用XOR在Java中交换两个整数而不使用第三个变量。 这是我尝试的两个交换函数: 这段代码产生的输出是这样的: 我很好奇,为什么这样说: 与这个不同吗? 问题答案: 问题是评估的顺序: 参见JLS第15.26.2节 首先,对左操作数求值以产生一个变量。 如果该评估突然完成,则赋值表达式由于相同的原因而突然完成;右边的操作数不会被评估,并且不会发生赋值。 否则,将保存

  • 然而,今天我在处理一些代码时,意外地发现以下两个交换给出了不同的结果: 这让我难以置信。有人能给我解释一下这里发生了什么吗?

  • 我正在阅读SICP的树递归,其中是通过线性递归计算的。 我们还可以制定一个迭代过程来计算斐波那契数。其思想是使用一对整数a和b,初始化为Fib(1)=1和Fib(0)=0,并重复应用同时变换 不难证明,在应用该变换n次后,a和b将分别等于Fib(n1)和Fib(n)。因此,我们可以使用该过程迭代计算斐波那契数 (由Emacs Lisp重写,代替Scheme) “设置a b=a和b=a,我很难把我的

  • 然而,今天我在处理一些代码时,意外地发现以下两个交换给出了不同的结果: 这让我难以置信。有人能给我解释一下这里发生了什么吗?

  • 本文向大家介绍if(a-b <0)和if(a 相关面试题,主要包含被问及if(a-b <0)和if(a 时的应答技巧和注意事项,需要的朋友参考一下 并且可能意味着两个不同的东西。考虑以下代码: 运行时,将仅打印。发生的事情显然是错误的,但是溢出并变为,这是负面的。 话虽如此,请考虑一下数组的长度确实接近。中的代码如下所示: 确实接近,所以(是)可能溢出并变成(即负数)。然后,将 下溢 相减回正数。