-4

Я столкнулся с такой ситуацией, что пустая строка это и не тру и не фалс

'' === true // false
'' === false // false

есть ли какое-то объяснение этому ?

  • 3
    потому что это строка, а не булевая переменная? – teran Jun 26 '18 at 12:41
  • @teran Я понимаю что это не булеан переменная, но ведь массив, к примеру, тоже не булеан, но в проверке он тру if ([]) console.log(123) // 123 а если if ('') console.log(123) // ничего – Рома Бойко Jun 26 '18 at 12:46
  • Как ни странно, потому, что пустая строка это и не тру и не фалс – Grundy Jun 26 '18 at 12:46
  • массив, к примеру, тоже не булеан, но в проверке он тру if ([]) так и в вопросе у тебя на if – Grundy Jun 26 '18 at 12:48

1 Answers1

3

Вы используете оператор сравнения ===, который учитывает в том числе и тип данных операндов. И поскольку в с одной стороны у вас строковая переменная, а с другой булевая, результат будет отрицательный. Как и например для 1 === true или 0 === false.

При обычном сравнении == за счет неявного приведения типов вы получите иной результат.

console.log( '' === false) ;
console.log( '' == false);

При обычном сравнении как false вычисляются само false, 0, "", '', null, undefined, NaN. Все остальное равно true, как и упомянутый вами [].

Повторюсь, при сравнении === имеет значение равенство типов данных. В этом и есть вся суть данного оператора.

teran
  • 29,377