[cc creator]Сравнението не работи

Имам масив от „флагове“ на възли и искам да задам позицията на моя обект на първия обект в този масив, работи и обектът всъщност се позиционира по предназначение, но когато направя сравнението, то се проваля и записва „НЕ“ .

Редът от код, който задава позицията, работи, но сравнението е неуспешно, какво не е наред тук?!

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 (може да опитате сами в браузъра си. Като заобиколно решение можете да направите нещо като:

    функция posCompare(p1, p2){ return p1.x === p2.x && p1.y === p2.y; }

След това го използвайте вместо == за позиции

  1. Вижте как използвам === вместо ==? Второто нещо, което трябва да знаете, е да използвате само ===. Можете да научите разликата Което е равно на оператор (== срещу ===) трябва да се използва в сравненията на JavaScript?, но бих се пазил от == навсякъде. По-бавно е, може да причини странни грешки тук и там - просто не го използвайте изобщо
person Роман Гуйван    schedule 20.03.2016
comment
Изчакай секунда. Написахте, че сравняването на position.x-es работи (което е неточно, защото трябва да проверите и двете координати) Какво ви кара да мислите „ако (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