JavaScript转换 - 为什么比较“5”> “300”返回true?

时间:2015-08-14 08:43:51

标签: javascript casting

在我的应用程序中有两个文本框

 <input type="text" ng-model="priceSlider.min" /><br/>
 <input type="text" ng-model="priceSlider.max" /><br/>

我的angularjs控制器是:

app.controller('MainCtrl', function($scope) {
    $scope.priceSlider       = {};
    $scope.priceSlider.min   = 100;
    $scope.priceSlider.max   = 400;
    $scope.priceSlider.ceil  = 500;
    $scope.priceSlider.floor = 0;

    $scope.$watch('priceSlider.min',function(newVal,oldVal) {
        if(isNaN($scope.priceSlider.min)) {
            console.log('naan');
            $scope.priceSlider.min=oldVal;
        }

        if($scope.priceSlider.min>$scope.priceSlider.max) {
            console.log($scope.priceSlider.min>$scope.priceSlider.max);
            console.log($scope.priceSlider.min+":"+$scope.priceSlider.max);

            var t = $scope.priceSlider.min;
            $scope.priceSlider.min = $scope.priceSlider.max;
            $scope.priceSlider.max = t;
        }
    }
});

现在大多数情况下,$ watch中的if条件工作正常,但在某些情况下它会失败,例如:如果我在两个文本框中写入200和300,我选择第一个文本框并尝试更改(至5) ,如果显示为真,则来自if的值为5和300,但条件5> 300。 我无法找到为什么会这样。我正在做任何愚蠢的事吗?

请检查一下那个东西。

http://plnkr.co/edit/4Wga7zCIX2udPZa6b0gI

1 个答案:

答案 0 :(得分:3)

当你比较5和300时你得到真实的原因可能是它正在进行字符串比较。

"5" > "300" 
>> true

因此将值转换为整数然后进行比较。使用parseInt(val, 10)Number(val)