最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

casting - Why is 'false' truthy in javascript? - Stack Overflow

programmeradmin0浏览0评论

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?

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?

Share Improve this question edited Sep 22, 2015 at 15:48 StuperUser asked Sep 22, 2015 at 15:09 StuperUserStuperUser 10.9k13 gold badges83 silver badges139 bronze badges 3
  • 4 non empty string is truthy, whatever the chars it contains – Kaiido Commented Sep 22, 2015 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 Commented Sep 22, 2015 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 Commented Sep 22, 2015 at 16:14
Add a comment  | 

6 Answers 6

Reset to default 11

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.

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.

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;

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

Boolean(false) returns false

Boolean('false') returns true

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?

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
发布评论

评论列表(0)

  1. 暂无评论