Почему «true» == true показывает false в JavaScript?

MDC описывает== operator as follows:

If the two operands are not of the same type, JavaScript converts the operands then applies strict comparison. If either operand is a number or a boolean, the operands are converted to numbers if possible; else if either operand is a string, the other operand is converted to a string if possible.

Имея это в виду, я бы оценил"true" == true следующее:

Are they of the same type? No Is either operand a number or boolean? Yes Can we convert both to a number? No (isNaN(Number("true")) // true) Is either operand a string? Yes Can we convert the other operand to a string? Yes (String(true) === "true" // true)

Я закончил со строками"true" а также"true", который должен оценить, чтобыtrue, но JavaScript показывает false.

Что я пропустил?

 B T23 авг. 2013 г., 19:01
Должен сказать, я удивлен, и это так глупо, что это происходит. Еще одна причина всегда всегда использовать ===
 zzzzBov06 июл. 2012 г., 16:12
Соответствующий:es5.github.com/#x11.9.1
 João Pimentel Ferreira04 янв. 2019 г., 22:17
@ user1068352 проверь хаос :)dorey.github.io/JavaScript-Equality-Table
 user106835211 апр. 2013 г., 15:33
С таким большим количеством JavaScript, мир - страшное место:if("true" == true) {console.log("yes")} else {console.log("no")}; if("true") {console.log("yes")} else {console.log("no")} --- & GT; "нет да"

Ответы на вопрос(3)

http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3

если один из операндов является логическим, а другой - нет, то логический конвертер - в число 0 или 1.true == "true" ложно

 01 сент. 2017 г., 11:16
Правильно ли я сделал вывод следующим образом? & Quot; истинно & Quot; == истинно становится & quot; истинно & quot; == 1, а затем становится "верным" == & quot; 1 & quot; Вот почему они возвращают false?
Решение Вопроса

"true" преобразуется вNaN, в то время какtrue преобразуется в1, Так что они отличаются.

Как вы сообщили, оба преобразуются в числа, потому что, по крайней мере,true может быть (см. комментарий Эрика Реппена) и затем сравнен.

 06 июл. 2012 г., 16:10
На самом деле в Javascript есть несколько странных объектов, которые ведут себя довольно странно. Например, документы XML в IE & lt; 9 вызывают ошибку при попытке преобразовать их в числа.
 06 июл. 2012 г., 16:02
Вот почему ты никогда не увидишь, как я пишу== true в моем JS - если значение истинно, оно пройдет испытание, и я не скажу ему, что оно должно быть правдой.
 06 июл. 2012 г., 16:04
Да, это правильно. Нет необходимости сравнивать== true, Просто позвольте условному оператору / утверждению оценить правдивость.
 06 июл. 2012 г., 19:32
@ Kolink Итак, подождите - вы говорите мне в Javascriptif(x) можно оценить как истинное времяif(x == true) можно оценить как ложное? о_О
 06 июл. 2012 г., 16:09
Либо против ни Если оба результата приведут к NaN, они переключатся на оценку строки. Если может быть преобразован только один, сравнение числа все еще существует.

== оператор сравнения, определенный в Ecma 5 как

return the result of the comparison x == ToNumber(y). If Type(x) is String and Type(y) is Number, If Type(x) is Boolean, return the result of the comparison ToNumber(x) == y. If Type(y) is Boolean, return the result of the comparison x == ToNumber(y).

Итак, "правда" == true интерпретируется движком js как

"true" == toNumber(true) "true" == 1 toNumber("true") == 1 NaN == 1

=== & GT; ложный

Ваш ответ на вопрос