4

I understand that an empty string is falsy in javascript and a not-empty string is truthy in javascript.

However, why is 'false' truthy in javascript, is there anything explicit in the specification? Is it a performance issue or are there situations where you would want the string 'false' to represent true?

StuperUser
  • 10,555
  • 13
  • 78
  • 137
  • 4
    non empty string is truthy, whatever the chars it contains – Kaiido Sep 22 '15 at 15:10
  • @FrédéricHamidi can you add that as the answer, a lot of answers are the what, rather than a reason why. – StuperUser Sep 22 '15 at 15:12
  • 2
    Note that most languages that permit "truthy"/"falsey" values for strings do *not* try to actually parse the strings. Even in Bash, where `false` is a command that always returns a non-zero error code, the double-brackets `if` construct still evaluates the string `false` as "truthy": `if [[ false ]]; then echo ha; fi`. Only Perl, which attempts to treat strings as numbers whenever such a conversion *might* make sense, actually cares what the contents of a string are when determining its "truthiness", and even there `"false"` is not considered false (`"0"` and `"undef"` are, though). – Kyle Strand Sep 22 '15 at 16:14

6 Answers6

10

is there anything explicit in the specification?

Yes:

The result is false if the argument is the empty String (its length is zero); otherwise the result is true.

James Thorpe
  • 31,411
  • 5
  • 72
  • 93
8

Replying to the last part of your question:

Are there situations where you would want the string 'false' to represent true?

Let's consider I am testing for empty strings in my user input. To achieve that, I issue:

if (!theInput) {
    // Do something.
}

Now do I want that condition to be true if the user enters false in the text box? Of course, I don't.

Frédéric Hamidi
  • 258,201
  • 41
  • 486
  • 479
5

In Javascript any string that is not empty is truthy.

So, when evaluating any non-empty string results in true even when the string itself is 'false'.

You can read more about truthy and falsy values.

If you want to check a string for truthness, you can check it's length.

var val = str.length > 0;
Tushar
  • 85,780
  • 21
  • 159
  • 179
2

The value of a non-empty string is always true.

Boolean(false) returns false

Boolean('false') returns true

Richard Hamilton
  • 25,478
  • 10
  • 60
  • 87
1

It's by definition. It's a string and it is handled as such. No matter the meaning of the string.

If your logic would be applied. Then how about following examples:

"1+3==2"
"humans have four eyes"

Are they also falsy?

nharrer
  • 618
  • 7
  • 21
1

If you consider the Boolean values, false is false and true is true.

Boolean(true) //returns true
Boolean(false) //returns false

But when you are talking about the strings like 'true' and 'false' or any other non-empty string, Javascript will not read them as Booleans and they will be true as all other non-empty strings.

Boolean('true') //returns true
Boolean('false') //returns true
Boolean('blahblahblah') //returns true