我正面临一个奇怪的问题。我有两个数字(都是1),它们不相等。等号不等 - javascript
> step.id
> Number {[[PrimitiveValue]]: 1}
>
> $scope.process.currentStep
> Number {[[PrimitiveValue]]: 1}
>
> step.id === $scope.process.currentStep
> false
我正面临一个奇怪的问题。我有两个数字(都是1),它们不相等。等号不等 - javascript
> step.id
> Number {[[PrimitiveValue]]: 1}
>
> $scope.process.currentStep
> Number {[[PrimitiveValue]]: 1}
>
> step.id === $scope.process.currentStep
> false
虽然您的问题确实缺乏细节,但您的问题似乎是由于使用了===
。这是一个严格的检查机制,这意味着它不执行类型/对象转换。所以如果这两个实体不是同一个对象,那么它们是不相等的。通过这个逻辑,从控制台。
"1"==1
true
"1"===1
false
看起来他的控制台正在调用它们,如果他们输入'Number',那么虽然你是对的,但在这里看起来不是这样。直到我们看到一个可重现的例子,我们不知道 – Jamiec
可悲的是这并没有改变任何东西。我将它转换为一个字符串进行比较。没有别的东西似乎在工作。 变量从黑匣子出来,我只知道“typeof”的类型或在chrome控制台中打印出来。但与“toString”它的作品。 也许将它封装起来很容易,以便于以后修复。 – harmoniemand
该解决方案似乎对我来说有点肮脏,但现在它的工作原理,它是封装,以解决它很容易。
我写了一个数字类型的扩展来比较两个数字。
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
});
对于这类问题,您创建一个[最小,完整和可验证的示例](http://stackoverflow.com/help/mcve)非常重要。 – Jamiec