【问题标题】:Ternary operator strange behavior while doing comparison of number三元运算符在进行数字比较时的奇怪行为
【发布时间】:2015-11-07 06:44:27
【问题描述】:

基本上,下面的代码是对 rowind 变量进行比较并显示警报,但不知何故,即使它为零,它也会将输出显示为非零,然后它也会将输出显示为“非零”,谁能告诉我可能是什么原因?

<head>
    <script language="javascript" type="text/javascript">

     var rowind = 0;
    var newind = ((rowind == '')) ? "Blank" : "Some number";

    //Output is Blank
    alert(newind);

    </script>
</head>
<body>
</body>
</html>

【问题讨论】:

  • stackoverflow.com/a/359509/760211 解释了相等 (=) 运算符的行为。
  • rowind = '0' 和 rowind == '' 是两个完全不同的东西。
  • 你的代码中没有"Not Zero",怎么会输出呢?
  • 我已经用实际代码更新了我的问题,请您检查一下并告诉我为什么它会显示为空白?
  • 在 Javascript 中 0 == ''true。如果你想要一个理智的比较,请使用===

标签: javascript html ternary-operator


【解决方案1】:

您正在检查变量rowind 是否等于您的条件中的空字符串。

((rowind == '')) // this will return as false since you variable is not an empty string. Rather it contains a string with 0 character

如果要比较字符串,请使用以下内容。

((rowind == '0')) //This will return true since the string is as same as the variable.

更新

您提出的问题与 javascript 类型转换有关。

The MDN Doc

平等 (==)

如果操作数不是相同的 > 类型,相等运算符会转换它们,然后应用严格比较。如果两个操作数都是对象,那么 > JavaScript 比较当操作数 > 引用内存中的同一个对象时相等的内部引用。

上面解释了== 运算符在javaascript 中的工作原理。

在您的示例中,'' 被转换为数字,因为它正在与类型数字变量进行比较。所以 javascript 将'' 视为一个数字,'' 等于 0。因此在您的条件下返回 true。

console.log(0 == '0');  //True
console.log(0 == '');   //True
console.log('' == '0'); //False

以下以strict comparison为例。

console.log(3 == '3') //True
console.log(3 === '3') //False

【讨论】:

  • 我已经用实际代码更新了我的问题,请您检查一下并告诉我为什么它会显示为空白?
  • @SagarShirke 我已根据您更新的问题更新了我的答案。
【解决方案2】:
0 == '' returns true in javascript

左操作数的类型是数字。 右操作数是字符串类型。

在这种情况下,右操作数被强制为 Number 类型:

0 == Number('')

导致

0 == 0  // which definitely is true

是的

0 === '' will return false

作为,标识运算符=== 不进行类型强制,因此在比较时不转换值。

【讨论】:

    【解决方案3】:

    比较的是字符串和'0'不等于''。

    因为 '0' != '' 不会将它们中的任何一个转换为布尔值,因为它们属于同一类型 - 字符串。

    【讨论】:

    • 我已经用实际代码更新了我的问题,请您检查一下并告诉我为什么它会显示为空白?
    猜你喜欢
    • 2013-10-29
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    相关资源
    最近更新 更多