if(negetive number) is true? Is something wrong with js?

两盒软妹~` 提交于 2020-01-11 11:34:08

问题


Is something wrong with js?

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

Basically if(-1) is true. How is this possible? It took me a whole day to fix this. Is there a list available where these kind of things are listed? Or tools available to catch things like these.


回答1:


As per ECMA 5.1 Standard Specifications, the following table is used to determine the truthyness of an expression

+-----------------------------------------------------------------------+
| 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:


The only number that is "falsey" (and would therefore evaluate to false and not pass an 'if' statement) is 0. The rest are "truthy", even negative ones.

You can test this in the console with !!-1. That means converting the value to the Boolean opposite, and repeat once. The first ! on -1 returns false and the second returns true. This is the most common way to convert an expression to its Boolean equivalent.




回答3:


You can see Truthy and Falsy Values here

The following values are always falsy:

  • false
  • 0 (zero)
  • "" (empty string)
  • null
  • undefined
  • NaN (a special Number value meaning Not-a-Number!)

All other values are truthy, including "0" (zero in quotes), "false" (false in quotes), empty functions, empty arrays, and empty objects.




回答4:


As it was mentioned only 0 (considering numbers) is equivalent to zero. But yes there is list of things which are equal to false in javascript and those are:

  1. false
  2. null
  3. undefined
  4. the empty string ""
  5. the number 0
  6. the number NaN

everything else when comapred to false returns false. e.g. -1 == false -> false



来源:https://stackoverflow.com/questions/22905065/ifnegetive-number-is-true-is-something-wrong-with-js

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!