Показать сообщение отдельно
  #2 (permalink)  
Старый 22.01.2019, 13:28
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

https://javascript.ru/forum/misc/737...tml#post484870

Согласно пункту 7.2.13 спецификации ECMAScript вычисление происходит так: (пустая строка ToNumber("") согласно 7.1.3 преобразуется в 0)

0 == false // подходит 7-ой пункт -> x == ToNumber(y) -> получаем 0 == 0
0 == 0     // теперь первый пункт -> x === y          -> получаем 0 === 0
0 === 0    // по алгоритму строгого сравнения получаем true
true


"" == false // подходит 7-ой пункт  -> x == ToNumber(y) -> получаем "" == 0
"" == 0     // теперь подходит 5-ый -> ToNumber(x) == y -> получаем 0 == 0
0 == 0      // теперь первый пункт  -> x === y          -> получаем 0 === 0
0 === 0     // по алгоритму строгого сравнения получаем true
true


Сообщение от AlexanderFilatov
Читая книгу "Выразительный JavaScript" столкнулся с таким утверждение автора:"Правила преобразования типов в булевы значения говорят, что 0, NaN и "" считаются false, а все остальные true.
Согласно пункту 7.1.2 ToBoolean(argument) возвращает false тогда, и только тогда, когда argument равен одному из следующего: undefined, null, false, +0, -0, NaN или "".

Последний раз редактировалось Malleys, 22.01.2019 в 14:39.
Ответить с цитированием