我正面臨一個奇怪的問題。我有兩個數字(都是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