JavaScript true false在if-else语句中未正确执行
出于某种原因,当我使用真/假值并检查至少一个值是否为真时,if/else语句无法正常工作。 我有这个:JavaScript true false在if-else语句中未正确执行,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,出于某种原因,当我使用真/假值并检查至少一个值是否为真时,if/else语句无法正常工作。 我有这个: $scope.checkValues = function (qId) { var airport = $scope.airports[0].questID; var destAirport = $scope.destAirports[0].questID; var airportVal = isFalseOrUndefined($scope.answers[airport
$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条件并设置范围值
有人看到任何问题吗?您的函数可能应该执行其声称的操作:
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;
}
}
您应该使用===和!==在Javascript中检查相等性时使用运算符。
op1===op2-将检查op1是否显式等于op2
op1!==op2-将检查op1是否显式等于op2
另外:您可以压缩为FalseOrUndefined函数
注意1:您实际上并没有检查val是否未定义。
检查是否有未定义的内容:typeof val==='undefined'
这与检查变量是否为null不同
注意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);
}
我看不出airportVal
的值是真的。相信我,要么不是,要么destAirportVal
是假的。JS在您的环境中并没有从根本上被破坏。@Madbreaks您看到弹出窗口说的是true,这是因为我将鼠标放在airportVal变量上,这里是另一个带有destAirportVal thx的打印屏幕,用于帮助否,但未定义可以指定给truthy值Please。只需在vars上执行一些console.log调用。因为我在任何地方都看不到鼠标光标,所以我不知道你在悬停什么。关于你问题的描述似乎与你的代码不匹配。您说您正在“检查至少一个值是否为真”,但您的代码正在查找其中一个值是否为假。因此,仅仅因为airportVal
为true并不意味着desAirportVal
也为true,因此不会进入if语句。您是否忘记在示例中使用IsFalseOrUndefined函数?这不是答案。另外:''==false;//正确
。不知道“空字符串”是什么意思“false或undefined”?你真的读过我的代码吗?你没有看到额外的=
字符吗?这有很大的区别。别忘了检查undefined的值