flom
@flom

Непонятное поведение Javascript в простых ситуациях. Растолкуйте

Мне конечно после C++ сложно бывает находить подобные ошибки в коде. Но все таки: чем объясняется подобное поведение JS?

Пример первый. В обоих случаях ожидалось true:
var flag = true;
flag &= true;
alert(flag);//говорит "1"

var flag = true;
flag = flag && true;
alert(flag);//говорит "true"


Примет второй. Сравнение на «равенство» двух объектов-дат всегда возвращает false. При этом <= и < возвращают разные значения. Непонятно.
alert(new Date == new Date);//говорит "false"
alert(new Date <= new Date);//говорит "true"
alert(new Date >= new Date);//говорит "true"
alert(new Date < new Date);//говорит "false"
alert(new Date > new Date);//говорит "false"
  • Вопрос задан
  • 2615 просмотров
Пригласить эксперта
Ответы на вопрос 2
@shsmad
Быть может потому что
flag &= true;
это
flag = flag & true;
а вовсе не
flag = flag && true;
(количество амперсандов посчитайте).

По поводу дат. Вот такой код работает:
var a = new Date;
var b = a;
alert(a == b); // true
Ответ написан
Wott
@Wott
>flag &= true;

здесь преобразование типов Boolean -> Number

>alert(new Date == new Date);//говорит «false»

каждый элемент — новый обьект, надо смотреть в какой последовательности они создаются.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы