Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.08.2010, 02:05
Интересующийся
Отправить личное сообщение для mmfStudent Посмотреть профиль Найти все сообщения от mmfStudent
 
Регистрация: 13.04.2009
Сообщений: 13

true or false? два сразу?
Вот интересная задачка, не ясно почему это работает.
alert([0] == false);
if ([0])
    alert(true);

Последний раз редактировалось mmfStudent, 24.08.2010 в 02:42.
Ответить с цитированием
  #2 (permalink)  
Старый 24.08.2010, 02:20
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Потому что при нестрогом сравнении срабатывает приведение типов
[0] → "0" → 0 → false == false


var array = [0];
array.toString = function () {
    return "1";
};

alert(array == false);
Ответить с цитированием
  #3 (permalink)  
Старый 24.08.2010, 02:25
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

читайте справку от истоков
Если вкратце, то при операции сравнения(первая ваша строчка), оба операнда приводятся к числу, и равны оба нулю
в условии же массив приводится к булевому, и становится истиной согласно правилам приведения типа

в таком же варианте, сравнение уже false, так как массив приводится не к нулю, а единице, хотя он также истинен самостоятельно
alert([1] == false); 
alert([1] == 1); 
if ([1]) 
    alert(true);
Ответить с цитированием
  #4 (permalink)  
Старый 24.08.2010, 02:26
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Octane,
ты неверно приводишь типы, для операции сравнения
Цитата:
Если какой-либо операнд - число или булево значение, то операнды преобразуются в числа; если какой-либо операнд строка - второй преобразуются в строку
Ответить с цитированием
  #5 (permalink)  
Старый 24.08.2010, 02:42
Интересующийся
Отправить личное сообщение для mmfStudent Посмотреть профиль Найти все сообщения от mmfStudent
 
Регистрация: 13.04.2009
Сообщений: 13

Сообщение от Gvozd Посмотреть сообщение
читайте справку от истоков
Если вкратце, то при операции сравнения(первая ваша строчка), оба операнда приводятся к числу, и равны оба нулю
в условии же массив приводится к булевому, и становится истиной согласно правилам приведения типа
Спасибо, все ясно.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
буфер обмена в Firefox KOLANICH Общие вопросы Javascript 4 01.07.2010 18:12
Окно открывается только один раз altermann ExtJS 8 22.04.2010 11:55
Правильный ответ или неправильный Kevrat Ваши сайты и скрипты 7 13.01.2010 21:31
Проблема с if...else parzh-junior Элементы интерфейса 18 04.12.2009 17:17
Проблема с оперой Ден Opera, Safari и др. 1 22.03.2009 15:49