相等的数字并不相等-javascript
我面临一个奇怪的问题。我有两个数字(都是1),它们不相等相等的数字并不相等-javascript,javascript,angularjs,numbers,equals,Javascript,Angularjs,Numbers,Equals,我面临一个奇怪的问题。我有两个数字(都是1),它们不相等 > step.id > Number {[[PrimitiveValue]]: 1} > > $scope.process.currentStep > Number {[[PrimitiveValue]]: 1} > > step.id === $scope.process.currentStep > false 虽然您的问题确实有点缺乏细节,但您的问题似乎是由于使用了=。这是一种严格
> step.id
> Number {[[PrimitiveValue]]: 1}
>
> $scope.process.currentStep
> Number {[[PrimitiveValue]]: 1}
>
> step.id === $scope.process.currentStep
> false
虽然您的问题确实有点缺乏细节,但您的问题似乎是由于使用了
=
。这是一种严格的检查机制,这意味着它不执行类型/对象转换。因此,如果两个实体不是同一个对象,它们就不相等。根据这个逻辑,从控制台
"1"==1
true
"1"===1
false
这个解决方案对我来说似乎有点脏,但现在它可以工作了,而且它是封装的,可以很容易地修复它 我为数字类型编写了一个扩展来比较两个数字
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
});
为这类问题创建一个函数是非常重要的。看起来他的控制台正在调用这两个函数,如果它们都键入
Number
,那么尽管你是对的,但这里的情况与此不同。直到我们看到一个可复制的例子,我们才知道这并没有改变什么。我将把它转换成一个字符串进行比较。其他一切似乎都不起作用。变量来自黑盒,我只知道“typeof”的类型,或者在chrome控制台中打印出来。但使用“toString”它是有效的。也许封装它会很好,以便以后更容易修复。