Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вопрос по преобразованиям типов!? (https://javascript.ru/forum/misc/76555-vopros-po-preobrazovaniyam-tipov.html)

AlexanderFilatov 22.01.2019 12:45

Вопрос по преобразованиям типов!?
 
Всем привет!Читая книгу "Выразительный JavaScript" столкнулся с таким утверждение автора:"Правила преобразования типов в булевские значения говорят, что 0, NaN и "" считаются false, а все остальные true.
Поэтому 0 == false и "" == false."
alert(0 == false); // true
alert("" == false); // true

Видимо он что-то путает, т.к. при сравнении значений разных типов происходит численное преобразование.Если кто читал и понял, отпишитесь пожалуйста.

Malleys 22.01.2019 13:28

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 или "".

j0hnik 22.01.2019 13:36

Цитата:

Сообщение от AlexanderFilatov
при сравнении значений разных типов происходит численное преобразование

при не строгом сравнении происходит приведение типов.
используйте ===

AlexanderFilatov 24.04.2019 09:08

Вы всё правильно написали!Я точно так же преобразовывал!Просто я не вижу связи между преобразованием в булевское значение и примерами, где происходит числовое преобразование!?

GayCoder 27.04.2019 02:35

vanished


Часовой пояс GMT +3, время: 16:46.