Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.03.2021, 16:25
Аспирант
Отправить личное сообщение для vitek-82 Посмотреть профиль Найти все сообщения от vitek-82
 
Регистрация: 18.03.2017
Сообщений: 30

Приведение массива к Bool
Здравствуйте. Знаю что вопрос может быть обсуждался, но всё же, плиз, объясните. Перечитал, перегуглил, есть объяснения, но я не понимаю их.

Вот собственно вопрос:

console.log(![] == true);//false
console.log([] == true);//false
console.log(![]);//false


??? СПАСИБО
Ответить с цитированием
  #2 (permalink)  
Старый 29.03.2021, 17:01
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,744

Тут все дело в преобразованиях типа и приоритете операций.
Начнем с 3.
Есть операция !. Она требует, что бы ее операнд был типа воolean. Поэтому операнд преобразуется к этому типу. Любой объект (а массив, даже пустой - это объект) преобразуется к true. !true дает false.

1 - должно быть понятно. выполняется (![]) == true. Т.е false == true дает false.

Теперь 2. У операции == свои правила преобразования типов
Если типы операндов разные и не числа и не строки, то к ним применяется операция toPrimitive(). Для массивов в этом случае используется операция toString . [1,2,3].toString() - дает "1,2,3". А
[].toString() - дает "" - пустую строку.
true.toPrimitive() - преобразуется в число 1
Т.е мы сравниваем "" == 1
В этом случае, когда сравниваются строка и число, делается попытка преобразовать строку в число "" - преобразуется в 0
В итоге имеем 0 == 1 - false.

По этой же причине
console.log([1] == 1) // true
console.log([2] == 2) // true

Последний раз редактировалось voraa, 29.03.2021 в 17:11.
Ответить с цитированием
  #3 (permalink)  
Старый 29.03.2021, 21:33
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,584

voraa всё хорошо расписал, добавлю только, что в современном js никто уже не использует ==, только ===.
__________________
29375, 35
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите , элементы массива по порядку из другого массива Rost_shat Javascript под браузер 9 28.07.2018 20:03
Соединение массива Artur_Hopf Общие вопросы Javascript 4 07.06.2018 16:48
Обход многомерного массива с задержкой после каждого цикла Walk Общие вопросы Javascript 2 14.08.2017 16:17
Помогите к js коду, написать html код Modrih Элементы интерфейса 8 16.06.2015 18:08
(bool ? num1 : num2) - как сделать такое для операции сравнения > ? Owyn Общие вопросы Javascript 8 03.05.2013 11:29