【问题标题】:if(negetive number) is true? Is something wrong with js?如果(负数)为真? js有什么问题吗?
【发布时间】:2014-05-19 06:17:19
【问题描述】:

js有什么问题吗?

if("hello".indexOf("world")) { // I forgot to add > -1 here
    console.log("hello world");
}

基本上if(-1) 是真的。这怎么可能?我花了一整天的时间来解决这个问题。是否有列出此类内容的列表?或可用于捕获此类内容的工具。

【问题讨论】:

  • 你来自什么语言的负数是假的?
  • 是的。 “正常”或“常规”的事情是任何实数(负数或正数)都是真的。除了零,零总是假的。虽然最好的方法是查看语言规范以确定。

标签: javascript truthiness


【解决方案1】:

根据ECMA 5.1 Standard Specifications,下表用于判断表达式的真实性

+-----------------------------------------------------------------------+
| Argument Type | Result                                                |
|:--------------|------------------------------------------------------:|
| Undefined     | false                                                 |
|---------------|-------------------------------------------------------|
| Null          | false                                                 |
|---------------|-------------------------------------------------------|
| Boolean       | The result equals the input argument (no conversion). |
|---------------|-------------------------------------------------------|
| Number        | The result is false if the argument is +0, −0, or NaN;|
|               | otherwise the result is true.                         |
|---------------|-------------------------------------------------------|
| String        | The result is false if the argument is the empty      |
|               | String (its length is zero); otherwise the result is  |
|               | true.                                                 |
|---------------|-------------------------------------------------------|
| Object        | true                                                  |
+-----------------------------------------------------------------------+

【讨论】:

    【解决方案2】:

    唯一“错误”的数字(因此将评估为 false 并且不会传递“if”语句)是 0。其余的都是“真实的”,甚至是负面的。

    您可以在控制台中使用!!-1 对此进行测试。这意味着将值转换为相反的布尔值,并重复一次。 -1 上的第一个 ! 返回 false,第二个返回 true。这是将表达式转换为其等效布尔值的最常用方法。

    【讨论】:

    • 很好解释。我不知道您可以使用“!!”获取任何对象的布尔值。
    【解决方案3】:

    如前所述,只有 0(考虑数字)等于零。但是是的,在 javascript 中有一个等于 false 的列表,它们是:

    1. 未定义
    2. 空字符串“”
    3. 数字0
    4. 数字NaN

    当与 false 比较时,其他所有内容都返回 false。例如-1 == 假 -> 假

    【讨论】:

      【解决方案4】:

      你可以看到真假值here

      以下值总是假的:

      • 0(零)
      • “”(空字符串)
      • 未定义
      • NaN(一个特殊的 Number 值,意思是 Not-a-Number!)

      所有其他值都是真值,包括“0”(引号中的零)、“假” (引号中的 false)、空函数、空数组和空对象。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-08
        • 2013-03-03
        • 2022-12-23
        • 2011-04-06
        • 2021-09-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多