2016-01-13 2 views
-1

У меня возникла странная проблема. У меня есть два числа (оба 1), и они не равны.Равные числа не равны - javascript

> step.id 
> Number {[[PrimitiveValue]]: 1} 
> 
> $scope.process.currentStep 
> Number {[[PrimitiveValue]]: 1} 
> 
> step.id === $scope.process.currentStep 
> false 
+3

Очень важно, чтобы вы создали [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) для такого рода вопросов. – Jamiec

ответ

0

Хотя ваш вопрос действительно не хватает подробно немного, ваша проблема, как представляется, в связи с использованием ===. Это строгий механизм проверки, что означает, что он не выполняет преобразование типа/объекта. Поэтому, если два объекта имеют не один и тот же объект, они не равны. По этой логике, с консоли.

"1"==1 
true 
"1"===1 
false 
+0

Похоже, его консоль вызывает оба, если они набирают 'Number', поэтому, хотя вы правы, здесь не похоже. Пока мы не увидим воспроизводимый пример, мы не знаем – Jamiec

+0

, к сожалению, это ничего не меняет. Я собираюсь преобразовать его в строку для сравнения. ничего больше, похоже, не работает. Переменные выходят из черного ящика, и я знаю только тип «typeof» или распечатываю их в хром-консоли. Но с «toString» это работает. Возможно, будет полезно инкапсулировать его, чтобы было легче исправить его позже. – harmoniemand

0

Решение кажется немного грязным для меня, но на данный момент оно работает, и оно инкапсулируется, чтобы легко его исправить.

Я написал расширение для Number-Type для сравнения двух чисел.

Object.defineProperty(Number.prototype, 'Equals', { 
    value: function (compareTo) { 
     'use strict'; 

     var number = this; 
     if (typeof (number) === 'number' || typeof (compareTo) === 'number') { 
      return number === compareTo; 
     } 

     return number.toString() === compareTo.toString(); 
    }, 
    writable: true, 
    configurable: true, 
    enumerable: false 
}); 
Смежные вопросы