Почему false == "false" это ложь?
Я все еще изучаю основы javaScript и не понимаю, почему это происходит.
Наличие типа принуждения false == "false"
будет преобразован в:
false == false //true
или же
"false" == "false" //true
Итак, почему false == "false"
ложно?
4 ответа
Вы неправильно поняли правила преобразования типов. false
не преобразуется в строку перед сравнением.
Если Type(x) - Boolean, вернуть результат сравнения ToNumber(x) == y.
false
конвертируется в число, которое дает:
+0 == "false"
… затем …
Если Type(x) равен Number, а Type (y) равен String, вернуть результат сравнения x == ToNumber(y).
... "false"
конвертируется в число, которое дает:
+0 == NaN
... что ложно.
Ответ заключается в том, что "false" - это строка (как отметил Герардо Фурадо в комментариях), тест, который вы проводите, эквивалентен false = "hello".
Javascript не смотрит на слово в строке, чтобы определить, является ли оно логическим, и затем пытается получить значение из этого.
Замечания:
В общем, в javascript теперь предпочтительно использовать оператор ===, чтобы избежать всего этого.
false == "false" // false
потому что логическое ложное значение преобразуется в 0, поэтому мы сравниваем 0 с "ложным" и вывод ложный
Это разные виды предметов. "string"
а также boolean
,
Так:
false.toString() == "false"