2016-01-13 60 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”的类型或在chrome控制台中打印出来。但与“toString”它的作品。 也许将它封装起来很容易,以便于以后修复。 – harmoniemand

0

该解决方案似乎对我来说有点肮脏,但现在它的工作原理,它是封装,以解决它很容易。

我写了一个数字类型的扩展来比较两个数字。

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 
});