Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.01.2019, 11:45
Интересующийся
Отправить личное сообщение для AlexanderFilatov Посмотреть профиль Найти все сообщения от AlexanderFilatov
 
Регистрация: 14.09.2018
Сообщений: 26

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

Видимо он что-то путает, т.к. при сравнении значений разных типов происходит численное преобразование.Если кто читал и понял, отпишитесь пожалуйста.
Ответить с цитированием
  #2 (permalink)  
Старый 22.01.2019, 12:28
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 843

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 в 13:39.
Ответить с цитированием
  #3 (permalink)  
Старый 22.01.2019, 12:36
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,557

Сообщение от AlexanderFilatov
при сравнении значений разных типов происходит численное преобразование
при не строгом сравнении происходит приведение типов.
используйте ===
Ответить с цитированием
  #4 (permalink)  
Старый 24.04.2019, 09:08
Интересующийся
Отправить личное сообщение для AlexanderFilatov Посмотреть профиль Найти все сообщения от AlexanderFilatov
 
Регистрация: 14.09.2018
Сообщений: 26

Вы всё правильно написали!Я точно так же преобразовывал!Просто я не вижу связи между преобразованием в булевское значение и примерами, где происходит числовое преобразование!?
Ответить с цитированием
  #5 (permalink)  
Старый 27.04.2019, 02:35
Аватар для GayCoder
Аспирант
Отправить личное сообщение для GayCoder Посмотреть профиль Найти все сообщения от GayCoder
 
Регистрация: 28.01.2016
Сообщений: 94

Сообщение от Malleys Посмотреть сообщение
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




Согласно пункту 7.1.2 ToBoolean(argument) возвращает false тогда, и только тогда, когда argument равен одному из следующего: undefined, null, false, +0, -0, NaN или "".
Там еще варианты работают типа:

[0] == 0
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопрос про возможности JS для рисования и анимации macdack Библиотеки/Тулкиты/Фреймворки 3 14.07.2011 23:13
Я как ответить на вопрос - есть ли жизнь на других планетах? TicTac Оффтопик 5 28.04.2011 03:29
Вопрос авторизации. 0931454574 Серверные языки и технологии 8 12.04.2011 10:09
Вопрос на миллион. Ajax и идентификация по адресной строке. 0931454574 AJAX и COMET 5 31.03.2011 10:54
Вопрос по замыканиям Goodfella Общие вопросы Javascript 20 09.03.2011 00:21