Результаты "правды" и "ложности" сбивают с толку в JavaScript
Я изучаю основы JavaScript. Я смущен результатами "правды" и "ложности". Может ли кто-нибудь объяснить причину этого?
myVariable = undefined ? "truthy" : "falsey";
Результат "falsey" .
myVariable = typeOf someUndefinedVariable ? "truthy" : "falsey";
Результат "правдивый" .
Я ожидал "ложь" вместо второго результата. Почему я стал "правдивым"? Я действительно смущен.
Ответы
Ответ 1
typeof
возвращает имя типа значения, которое всегда является непустой строкой. Непустая строка является правдой.
> typeof someUndefinedVariable
"undefined"
> typeof (typeof someUndefinedVariable)
"string"
> Boolean("undefined")
true
См. также Все значения false в JavaScript
Ответ 2
Во-первых, я объясню, что произошло в коде, который вы показали, просто чтобы убедиться, что вы это поняли. Возможно, вы уже понимаете первую половину, но, поскольку вы говорите, что вы очень смущены, я предполагаю, что вы этого не делаете.
myVariable = undefined ? "truthy" : "falsey";
// result: "falsey"
Здесь вы смотрите на значение undefined
и задаете вопрос: он правдивый или ложный? Исходя из этого вы выбираете строку. Затем вы сохраняете эту строку в myVariable
. Это действительно то же самое, что и этот код:
var myVariable;
if (undefined) {
myVariable = 'truthy';
} else {
myVariable = 'falsey';
}
Так как undefined
всегда ложно, в конце myVariable
содержит строку 'falsey'
.
Вот ваш второй фрагмент кода:
myVariable = typeOf someUndefinedVariable ? "truthy" : "falsey";
// result: "truthy"
Во-первых, я должен указать, что typeOf
не является допустимой функцией или оператором в любой исполняемой среде Javascript, о которой я знаю. Я предполагаю, что это была опечатка, и вы хотели использовать typeOf
вместо этого. Приведенный выше код, как написано, должен вызывать синтаксическую ошибку. Исправлено, у нас есть...
myVariable = typeOf someUndefinedVariable ? "truthy" : "falsey";
// result: "truthy"
И для ясности перепишите его как if/else:
var myVariable;
if (typeof someUndefinedVariable) {
myVariable = 'truthy';
} else {
myVariable = 'falsey';
}
В качестве другого ответчика указал, typeof всегда будет возвращать в качестве строки тип символа, который вы ему даете.
typeof(someUndefinedVariable);
"undefined"
И поскольку все строки, за исключением пустой строки, являются правдивыми, вы получите правдивый ответ.
В Javascript имеется только 7 значений false.
false Boolean false
undefined If a symbol is not defined at all
null A defined symbol, but it has no value inside
0 Numeric positive 0
-0 Numeric negative 0
'' or "" Empty string
NaN Magic value "Not a Number"
Все остальные значения в Javascript являются правдивыми.
- любая строка, кроме пустой строки
- любое число, кроме 0
- любой массив, включая пустой массив
- любой объект, включая пустой объект
- Функции
- и т.д.