[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Приведение типов
J1upuk
Почему
3 && 4
вернёт 4, тогда как
3 == true
возвращает false???
123456
А документация для кого?


Цитата
Логические операторы, как правило, используются с булевыми значениями и возвращают булево значение.

Однако, в javascript операторы && и || возвращают не булево значение, а один из операндов, определивший значение выражения. Конечно, результат в таком случае может быть и не нулевым.



Цитата
expr1 && expr2 - Возвращает expr1, если оно может быть преобразовано к false; в ином случае возвращает expr2. Так что, при вызове с булевыми значениями, && вернет true только если оба операнда истинны, иначе false.
J1upuk
123456
Не серчай, я только первый день как за JS взялся.) Для PHP'шника это мозгодробительно.( Хотя твой пост на вопрос не ответил. Я знаю что && вернёт последний операнд если оба TRUE или первый на котором заFALSEился, но ведь

Boolean("4");
true
"4" == true
false

bestxp
в PHP будет такое же поведение
J1upuk
bestxp
Отнюдь...

<?php
if ("4" == true)
{
echo 'true';
}
else
{
echo 'false';
}

Результат выполнения - true. В PHP при гибком сравнении - любая строка приведётся к true, кроме "0" и пустой строки, и любое число кроме 0. В JS почему-то что "4" == true что "4" == false - везде вернётся false, но ведь Boolean("4"); возвращает true, почему так? Могу предположить что в JS оператор гибкого сравнения не производит приведения к булеву типу, строку к числу может по принципу утиной типизации, а к булеву - нет. И если уж сравнивать число или строку с булев типом то так:

Boolean("4") == true
true


Цитата
Оператор == :Если два операнда не одного типа, javascript преобразовывает типы и сравнивает строго. Если какой-либо операнд - число или булево значение, то операнды преобразуются в числа; если какой-либо операнд строка - второй преобразуются в строку

Число 4 это не 1 или 0, значит не эквивалентно булев типу, значит false.
123456
Цитата
Boolean("4");
true


true, т.к. преобразование прошло успешно.
А вот этот код вернет false, т.к. преобразование не совершилось.

function a() {  }
console.log(Boolean(a()));


Не знаю на сколько это правильно, но я понимаю это так.
volter9
J1upuk
Я как то задавал вопрос на StackOverflow по этому поводу.

Цитата (J1upuk @ 24.09.2015 - 13:04)
3 == true

Все очень просто. Хоть и значение числа 3 является truthy, но оно является равным true.
Я предполагаю что JS переводит true в Number для слабой (loosely) проверки (т.к. типы значений разные), т.е. 3 == true аналогично 3 == 1 (что является false).

Если попробовать сравнить 1 и true то получим в итоге true т.к. Number(true) == 1. На javascript.ru в справочнике в разделе по операторам есть объяснение оператора "==":
Цитата
Если два операнда не одного типа, javascript преобразовывает типы и сравнивает строго. Если какой-либо операнд - число или булево значение, то операнды преобразуются в числа; если какой-либо операнд строка - второй преобразуются в строку


_____________
Мой блог
webguru111
Всем привет вот нашел отличный материал на приведение типов в javascript http://webdiz.com.ua/osnovy-javascript/pri...ov-v-javascript

_____________
Веду блог webdiz.com.ua как создать сайт. В котором я в доступной форме рассказываю как создать сайт на различных платформах для создания сайтов
VeRTak
webguru111

Цитата (webguru111 @ 20.08.2017 - 12:35)
вот нашел отличный материал


Цитата (webguru111 @ 20.08.2017 - 12:35)
Веду блог


Так нашел или что? Каждую неделю будешь пиарить свой сайт?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.