前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JS字符串false转boolean

JS字符串false转boolean

作者头像
用户6182664
发布2020-05-06 14:27:51
13.6K1
发布2020-05-06 14:27:51
举报
文章被收录于专栏:Java程序员那些事

大家都知道在JS的世界里, 0-0null""falseundefinedNaN,这些都可以自动转化为布尔的 false,那么字符串的"false"是不是false呢,答案是否定的,if ("false") 来判断的话,是等于true

所以今天遇到个SB问题,就是后台velocity往前台传参,大家一般都是这么写。

0.背景

代码语言:javascript
复制
var hasAuth = $!auth ; // 这个auth就是利用velocity传到前台的

这么写就有一个风险,那就是,如果后台忘记往前台传这个参数,就造成了如下的

代码语言:javascript
复制
var hasAuth = ; // 语法错误,因为;之前是个空,这是由于velocity木有传参,前台是自然而然的变成了空白,空白!!

1.解决1

那么如何解决这种因为前后端不分离,velocity忘记传到前台而产生的这个问题呢,当当当当,我想到了一个办法就是利用单引号将变量括住,这样后台不传参,我也不怕不怕啦,代码变成了这样

代码语言:javascript
复制
var hasAuth = '$!auth' ; // 这样就好啦,即使后台不传参到前台,我特么也不怕报语法错误了。

2.解决2

然而事情并没有到此结束,因为我发现如果后台没有忘记往前台传参,后台获得的权限绝逼不是true就是false,那么问题来了,代码经过渲染变成了下面这个样纸。

代码语言:javascript
复制
var hasAuth = 'true';

//或者

var hasAuth = 'false';

那么下面再做判断的时候呢

代码语言:javascript
复制
// 1.

var hasAuth = 'true';
if(hasAuth){ //此时的hasAuth是true
  
}

// 2.
var hasAuth = 'false';
if(hasAuth){ //此时的hasAuth还是true
  
}

日了狗了,这该如何是好!!!

3.解决3

我特么灵机一动,那么我用Boolean的构造方法去做处理岂不是就ok了?我特么太聪明了,于是这么写

代码语言:javascript
复制
var hasAuth = Boolean('$!auth');

还是和刚才一样

代码语言:javascript
复制
// 1.当后台传到前台的auth是true时,Boolean('$!auth') === Boolean('true') === true;

var hasAuth = 'true';
if(hasAuth){ //此时的hasAuth是true
  
}

// 2.当后台传到前台的auth是false时,Boolean('$!auth') === Boolean('false') === true;
var hasAuth = 'false';
if(hasAuth){ //此时的hasAuth还是true
  
}

日了狗了,为咩啊

4.解决4

我查阅了一下w3c,发现解释如下

代码语言:javascript
复制
var myBoolean=new Boolean();

// 下面的所有的代码行均会创建初始值为 false 的 Boolean 对象。
var myBoolean=new Boolean();
var myBoolean=new Boolean(0);
var myBoolean=new Boolean(null);
var myBoolean=new Boolean("");
var myBoolean=new Boolean(false);//不带单引号的是false
var myBoolean=new Boolean(NaN);
// 下面的所有的代码行均会创初始值为 true 的 Boolean 对象:
var myBoolean=new Boolean(1);
var myBoolean=new Boolean(true);
var myBoolean=new Boolean("true");
var myBoolean=new Boolean("false");//带单引号的字符串false最终等于true
var myBoolean=new Boolean("Bill Gates");

靠了,这条路也想不通,可爱的一休哥,赶紧想想注意啊!

5.解决5 最终解决方案

灵机一动,哇塞,那么我用字符串去对比字符串总可以了吧?

于是最终的检测方法如下

代码语言:javascript
复制
var hasAuth = '$!auth' === 'true' ;

// 1.$!auth 为 true 时

var hasAuth = 'true' === 'true' ;
console.log(hasAuth);//true

// 2.$!auth 为 false 时

var hasAuth = 'false' === 'true' ;
console.log(hasAuth);//false

当然也可以如下玩

代码语言:javascript
复制
String.prototype.bool = function() { 
    return (/^true$/i).test(this); 
}; 
console.log("true".bool()); 
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java程序员那些事 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0.背景
  • 1.解决1
  • 2.解决2
  • 3.解决3
  • 4.解决4
  • 5.解决5 最终解决方案
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档