2016-01-13 62 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 
});