出于某种原因,当我使用true / false值并检查其中至少有一个值是否为true时,if / else语句无法正常工作。 我有这个:
$scope.checkValues = function (qId) {
var airport = $scope.airports[0].questID;
var destAirport = $scope.destAirports[0].questID;
var airportVal = isFalseOrUndefined($scope.answers[airport]);
var destAirportVal = isFalseOrUndefined($scope.answers[destAirport])
if (airportVal == false || destAirportVal == false) {
$surveyNav.skipPage = true;
}
}
function isFalseOrUndefined(val) {
if(val == null || val === false) {
return true;
} else {
return false;
}
}
在下面的图片中,您可以看到airportVal
的值为true,同一场景中destAirportVal
的另一个值为true,但我仍然可以正确使用进入if条件并设置范围值。
有没有人看到任何问题?
答案 0 :(得分:0)
在Javascript中检查相等性时,您应该使用===和!==运算符。 Javascript Comparison and Logical operators
op1 === op2 - 将检查op1是否明确等于op2
op1!== op2 - 将检查op1是否明确等于op2
另外:你可以压缩你isFalseOrUndefined函数
注1:您实际上并未检查val是否未定义。 检查某些内容是否未定义:typeof val ==='undefined' 这与检查变量是否为空
不同注2:请注意,此处的变量并不完全清楚。 $ scope.answers [airport]为false或null时,airportVal将等于true。这是你的意图吗?
$scope.checkValues = function (qId) {
var airport = $scope.airports[0].questID;
var destAirport = $scope.destAirports[0].questID;
var airportVal = isFalseOrUndefined($scope.answers[airport]);
var destAirportVal = isFalseOrUndefined($scope.answers[destAirport])
if (airportVal === false || destAirportVal === false) {
$surveyNav.skipPage = true;
}
}
function isFalseOrUndefined(val) {
return (val === null || val === false);
}
答案 1 :(得分:-2)
你的功能可能应该做它声称做的事情:
function isFalseOrUndefined(val) {
return typeof val === 'undefined' || val === false || val === null || val === ''/* add this if you think it should be falsy*/;
}
但是,测试!val
就足够了:
$scope.checkValues = function (qId) {
var airport = $scope.airports[0].questID;
var destAirport = $scope.destAirports[0].questID;
if (!airport || !destAirport) {
$surveyNav.skipPage = true;
}
}