Истинные и ложные ценности
Ложные значения — это значения, которые не совсем ложны, но станут ложными, когда мы попытаемся преобразовать их в логическое значение.
В JavaScript есть только пять ложных значений: null, undefined, ‘ ’, NaN, 0.
Все остальное — это наши так называемые истинные ценности. Таким образом, значения, которые будут преобразованы в истину, например, любое число, отличное от нуля, или любая строка, которая не является пустой строкой, будут преобразованы в истину, когда мы попытаемся преобразовать их в логическое значение.
// <5 falsy values> : 0, '', undefined, null, NaN console.log(Boolean(0)); //false console.log(Boolean(undefined)); //false console.log(Boolean("Amy")); //true console.log(Boolean({})); //true console.log(Boolean("")); //false
Два сценария JavaScript, выполняющих приведение типов к логическим значениям
На практике преобразование в логическое всегда является неявным, а не явным, или, другими словами, всегда является типизированным принуждением, которое JavaScript выполняет автоматически за кулисами.
Но когда именно JavaScript выполняет приведение типов к логическим значениям? Это происходит по двум сценариям.
Во-первых, при использовании логических операторов, а во-вторых, в логическом контексте, например, в условии оператора if-else.
как работает принуждение типа в условии if-else?
// <1> const money = 0; if (money) { console.log("Don't spend it all:( "); } else { console.log("You should get a job!!"); } //You should get a job!! // <2> let height; if (height) { console.log("YAY! Height is defined!"); } else { console.log("Height is UNDEFINED!"); } //Height is UNDEFINED!
‹2› Второй вариант использования этих истинных и ложных значений — проверить, действительно ли переменная определена или нет.
Переменная высоты в этом логическом контексте будет автоматически преобразована в логическое значение. Поскольку высота не определена, а неопределенное значение является ложным, высота здесь будет ложной. Следовательно, блок else будет выполнен.
из моего конспекта лекции "Полный курс JavaScript".