问题
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:
- false
- null
- undefined
- the empty string ""
- the number 0
- 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