为何$scope赋值为空时,{{$scope >=0}}插值显示true?
空字符串与数字比较返回true的原因
你遇到的这个问题是JavaScript隐式类型转换导致的,跟AngularJS的$scope无关,是JS本身的特性:
- 当使用
>=这类关系运算符比较不同类型的值时,JavaScript会自动对操作数进行类型转换,统一成数字类型后再做比较。 - 你的代码里,空字符串
''被转换成数字的结果是0,所以'' >= 0就等价于0 >= 0,结果自然是true。 - 你可以直接在浏览器控制台测试
Number(''),返回值就是0,这也能验证这个转换逻辑。
如果要避免这种不符合预期的判断,你可以:
- 先判断变量类型,比如用
$scope.datachanged === ''来识别空字符串的情况 - 显式把变量转换成数字后再比较,比如
Number($scope.datachanged) >= 0
你的测试代码:
controllers.Ctrl = function ($scope, $rootScope, $timeout, $filter, ajax, $parse) { $scope.datachanged = ''; console.log($scope.datachanged >= 0); // true };
内容的提问来源于stack exchange,提问作者Atilla
相关产品推荐
相关产品推荐

