Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
相等的数字并不相等-javascript_Javascript_Angularjs_Numbers_Equals - Fatal编程技术网

相等的数字并不相等-javascript

相等的数字并不相等-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 虽然您的问题确实有点缺乏细节,但您的问题似乎是由于使用了=。这是一种严格

我面临一个奇怪的问题。我有两个数字(都是1),它们不相等

> 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”它是有效的。也许封装它会很好,以便以后更容易修复。