This question already has answers here:
JavaScript IF statement boolean strict
(3个答案)
3年前关闭。
我有一个很奇怪的问题。我有一个if语句,如下所示:
其中LoginServer.getUserLoggedIn和setUserLoggedIn是:
问题很简单。即使next.requireLogin为true和LoginService.getUserLoggedIn()为false,也不会调用If语句。控制台中的输出如下:
因此,显然“ next.requireLogin &&!LoginService.getUserLoggedIn()”的计算结果为false,但这两个值都是正确的吗?如果有帮助,则在Chrome控制台中,带有“ false”的最后一行将突出显示为紫色。
有人知道怎么了吗?
如果使用
(3个答案)
3年前关闭。
我有一个很奇怪的问题。我有一个if语句,如下所示:
$rootScope.changeView = function(view){
$location.path(view); // path not hash
};
$rootScope.$on('$routeChangeStart', function (event, next) {
console.log(next.requireLogin + " " + LoginService.getUserLoggedIn());
console.log(next.requireLogin && !LoginService.getUserLoggedIn());
if(next.requireLogin && !LoginService.getUserLoggedIn()) {
console.log("No access to panel: not logged in.");
alert("You need to be logged in as an administrator to see this page!");
event.preventDefault();
$timeout(function () {
$rootScope.changeView("/");
}, 500);
}
});
其中LoginServer.getUserLoggedIn和setUserLoggedIn是:
this.setUserLoggedIn = function(value){
sessionStorage.userIsLoggedIn = value;
};
this.getUserLoggedIn = function() {
return sessionStorage.userIsLoggedIn;
};
问题很简单。即使next.requireLogin为true和LoginService.getUserLoggedIn()为false,也不会调用If语句。控制台中的输出如下:
true false
false
因此,显然“ next.requireLogin &&!LoginService.getUserLoggedIn()”的计算结果为false,但这两个值都是正确的吗?如果有帮助,则在Chrome控制台中,带有“ false”的最后一行将突出显示为紫色。
有人知道怎么了吗?
最佳答案
sessionStorage
存储字符串,而不是布尔值。因此,getUserLoggedIn
返回字符串"true"
或"false"
,并且所有非空字符串都是真实的。
更改getUserLoggedIn
以返回布尔值。
this.getUserLoggedIn = function() {
return sessionStorage.userIsLoggedIn == 'true';
};
如果使用
console.log(next.requireLogin, LoginService.getUserLoggedIn())
,您会看到第二个值附近的引号,也许您已经意识到了问题所在。串联时,将丢失类型信息。09-26 13:07