[cc создатель]Сравнение не работает

У меня есть массив «флагов» узлов, и я хочу установить позицию своего объекта на первом объекте в этом массиве, он работает, и объект фактически позиционируется, как предполагалось, но когда я делаю сравнение, оно терпит неудачу и регистрирует «НЕТ» .

Строка кода, задающая позицию, работает, но сравнение не проходит, что тут не так?!

start: function () {
        this.node.position = this.flags[0].position;
        this.movement();
    },
    movement: function() {
       if (this.node.position == this.flags[0].position) {  // Problem
           console.log("YES");
       }
       else {
           console.log("No");

Обновление:

Когда я делаю это так, это работает:

if (this.node.position.x == this.flags[0].position.x) // or position.y

person Abdou023    schedule 19.03.2016    source источник


Ответы (1)


Что ж, если вы пишете здесь javascript (и похоже, что вы это делаете), вам следует знать две вещи:

  1. Вы не можете сравнивать объекты с == из коробки

    ({"a":1} == {"a":1}) Возвращает false (вы можете попробовать это сами в своем браузере. В качестве обходного пути вы можете сделать что-то вроде:

    function posCompare(p1, p2){ return p1.x === p2.x && p1.y === p2.y; }

Тогда используйте его вместо == для позиций

  1. Видите, как я использую === вместо ==? Второе, что нужно знать, это использовать только ===. Вы можете узнать разницу, какой оператор равен (== vs ===) следует использовать в сравнениях JavaScript? но я бы нигде не использовал ==. Он медленнее, тут и там могут возникать странные ошибки — просто не используйте его вообще
person Роман Гуйван    schedule 20.03.2016
comment
Подожди секунду. Вы написали, что сравнение position.x-es работает (что неточно, потому что вам нужно проверить обе координаты). Что заставляет вас думать «if (this.node.position.x === this.flags[0].position.x && this .node.position.y == this.flags[0].position.y)' не будет работать? (возможно, значения на самом деле разные??) - person Роман Гуйван; 21.03.2016
comment
Я говорил о ===, а не ==, но да, ваш способ работает, но я не понимаю, почему мой исходный код не будет работать, это огромная проблема, чтобы продолжать сравнивать x && y таким образом. В других игровых движках сравнение позиций работает нормально. - person Abdou023; 21.03.2016
comment
Как я уже говорил, в javascript нет встроенного сравнения объектов. Вы можете импортировать js-библиотеку только для этого, если хотите, или, возможно, определить функцию для проверки на равенство, но, к сожалению, так обстоят дела. - person Роман Гуйван; 21.03.2016