Помощник
|
Вопрос знатокам, я бы сказал даже, что это вопрос ГУРУ |
nikitammf
|
Сообщение
#1
|
||
|
|
||
|
|||
alexdrob |
25.6.2010, 17:08;
Ответить: alexdrob
Сообщение
#2
|
|
я конечно не ГУРУ ) но а почему должно быть не false?
['0'] = 0 но 0 = false test = false != false ответ? они равны, а значит результат проверки false )) |
|
|
Alcorn |
25.6.2010, 17:16;
Ответить: Alcorn
Сообщение
#3
|
|
[PHP]
alert(0==false); // true alert(0!=false); // false [/PHP] |
|
|
nikitammf
|
Сообщение
#4
|
|
[PHP]
alert(!!0)//false alert(!!['0'])//true [/PHP] |
|
|
Alcorn |
25.6.2010, 18:01;
Ответить: Alcorn
Сообщение
#5
|
|
!!0 тоже самое, что и Boolean(0).
|
|
|
alexflasher |
26.6.2010, 1:27;
Ответить: alexflasher
Сообщение
#6
|
|
я конечно не ГУРУ ) но а почему должно быть не false? ['0'] = 0 Потомучто при явном приведении к булеву получаем alert(Boolean(['0']) != false); //true А без явного приведения, к булеву приводится не массив, а его единственный элемент (в данном случае). Лично для меня это тоже странно. |
|
|
alexdrob |
26.6.2010, 2:55;
Ответить: alexdrob
Сообщение
#7
|
|
Потомучто при явном приведении к булеву получаем а там нет явного приведения, если взять c++ то выполните char ch = "5"; int n; n = ch*5; и будет ошибка. а теперь js var ch = "5"; var n; n = ch * 3; что получится? сначала ch приведётся к численному типу, а потом умножится. В js неявные преобразования виной видимо. например alert(['3','2']=='3,2'); равны |
|
|
Alcorn |
26.6.2010, 3:59;
Ответить: Alcorn
Сообщение
#8
|
|
Boolean() = !! Значение, переданное в качестве параметра, при необходимости, приводится к булевому виду. Если аргумент не указан или равен: 0, -0, null, false, NaN, undefined, или пустая строка (""), то объект инициализуется как false. Все остальные значения, включая объекты и строку "false" создают объект с начальным значением true. [PHP] alert(!!parseInt('0')); // false // '0' приводится к нулю alert(!!'0'); // true // строка '0' - нет [/PHP] В данном случае строковое значение (кроме пустой строки) параметра !! не инициализируется в false в !!. А в случае ==, при сравнении операнды неявно приводятся к одному типу, в результате - [PHP] alert('000000' == false); // true // строку '000000' приводим к числу, получаем 0 и далее к false, false равно false alert('000000'.toString() == false); // true // тоже самое alert('1' == true); // true // '1' приводим к 1 и далее true равно true alert('111111' == true); // false // '111111' приводим к числу, получаем те же самые 111111, к булевому привести не можем, что соответственно не равно true [/PHP] |
|
|
alexflasher |
26.6.2010, 14:14;
Ответить: alexflasher
Сообщение
#9
|
|
а там нет явного приведения, если взять c++ то выполните char ch = "5"; и будет ошибка.int n; n = ch*5; а теперь js var ch = "5"; что получится? сначала ch приведётся к численному типу, а потом умножится.var n; n = ch * 3; Это уже из другой оперы, си++ типизированный язык, а js нет. Вы попробуйте в си сравнить ['0'] и false, я уверен, что будет тот же результат (нет возможности проверить) Как я понимаю != не обращает внимания, что второй операнд - булев и начинает сначала приводить массив к стрингу (элементы через запятую), а затем эту стрингу к булеву. Это также объясняет равенство ['3','2'] и 3,2'. |
|
|
alexdrob |
26.6.2010, 15:28;
Ответить: alexdrob
Сообщение
#10
|
|
|
Как я понимаю != не обращает внимания, что второй операнд - булев и начинает сначала приводить массив к стрингу (элементы через запятую), а затем эту стрингу к булеву. Это также объясняет равенство ['3','2'] и 3,2'. я вам это и хотел сказать)
|
|
|
||
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Во что сегодня инвестировать? Делимся своими приносящими прибыль вариантами |
73 | traveliver | 4850 | Вчера, 14:45 автор: spomoni |
|
Mondiad - это глобальная рекламная сеть с широкими возможностями для паблишеров и рекламодателей! [🎁 Эксклюзивный бонус] | 16 | Mondiad | 4375 | 10.4.2024, 18:15 автор: Mondiad |
|
Контекст окупается - и вы это увидите Грамотная настройка Директа и Google Ads |
71 | knezevolk | 45426 | 26.3.2024, 14:14 автор: knezevolk |
|
Во что Вы играете? | 399 | Vmir | 67840 | 23.3.2024, 12:51 автор: Alexand3r |
|
"Извините, что ожидание затянулось, но не думайте, пожалуйста, что мы про вас забыли. Мы заводим задачи по всем обращениям и контролируем работу над ними самым тщательным образом." Вопрос |
0 | kuz999 | 1243 | 5.2.2024, 14:06 автор: kuz999 |
Текстовая версия | Сейчас: 19.4.2024, 6:32 |