JS字符串false转boolean的方法(推荐)


Posted in Javascript onMarch 08, 2017

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

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

0.背景

var hasAuth = $!auth ; // 这个auth就是利用velocity传到前台的

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

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

1、解决1

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

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

2、解决2

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

var hasAuth = 'true';

或者

var hasAuth = 'false';

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

1.

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

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

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

3、解决3

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

var hasAuth = Boolean('$!auth');

还是和刚才一样

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,发现解释如下

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 最终解决方案

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

于是最终的检测方法如下

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

JS字符串false转boolean的方法(推荐)

当然也可以如下玩

String.prototype.bool = function() {
    return (/^true$/i).test(this);
};
console.log("true".bool());

以上这篇JS字符串false转boolean的方法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js中parseFloat(参数1,参数2)定义和用法及注意事项
Jan 27 Javascript
jQuery 淡入淡出 png图在ie8下有黑色边框的解决方法
Mar 05 Javascript
Js 时间函数getYear()的使用问题探讨
Apr 01 Javascript
检查输入的是否是数字使用keyCode配合onkeypress事件
Jan 23 Javascript
获取JS中网页各种高宽与位置的方法总结
Jul 27 Javascript
svg动画之动态描边效果
Feb 22 Javascript
详解VUE的状态控制与延时加载刷新
Mar 27 Javascript
Node 自动化部署的方法
Oct 17 Javascript
JavaScript 判断iPhone X Series机型的方法
Jan 28 Javascript
jQuery实现动态添加和删除input框代码实例
Mar 29 jQuery
vue实现固定位置显示功能
May 30 Javascript
新手入门带你学习JavaScript引擎运行原理
Jun 24 Javascript
原生js实现选项卡功能
Mar 08 #Javascript
js, jQuery实现全选、反选功能
Mar 08 #Javascript
基于JQuery的购物车添加删除以及结算功能示例
Mar 08 #Javascript
jQuery插件zTree实现单独选中根节点中第一个节点示例
Mar 08 #Javascript
详谈jQuery中的一些正则匹配表达式
Mar 08 #Javascript
浅谈原生JS实现jQuery的animate()动画示例
Mar 08 #Javascript
jQuery实现选项卡功能(两种方法)
Mar 08 #Javascript
You might like
PHP 字符截取 解决中文的截取问题,不用mb系列
2009/09/29 PHP
php实现文件下载(支持中文文名)
2013/12/04 PHP
ThinkPHP实现将SESSION存入MYSQL的方法
2014/07/22 PHP
在Laravel框架里实现发送邮件实例(邮箱验证)
2016/05/20 PHP
项目实践之javascript技巧
2007/12/06 Javascript
jquery.tmpl JQuery模板插件
2011/10/10 Javascript
javascript设计简单的秒表计时器
2020/09/05 Javascript
jQuery实现批量判断表单中文本框非空的方法(2种方法)
2015/12/09 Javascript
jQuery插件HighCharts实现气泡图效果示例【附demo源码】
2017/03/13 Javascript
vue语法之拼接字符串的示例代码
2017/10/25 Javascript
使用JS判断移动端手机横竖屏状态
2018/07/30 Javascript
纯javascript前端实现base64图片下载(兼容IE10+)
2018/09/14 Javascript
Python全局变量操作详解
2015/04/14 Python
Python创建xml文件示例
2017/03/22 Python
python决策树之C4.5算法详解
2017/12/20 Python
kafka-python批量发送数据的实例
2018/12/27 Python
python使用zip将list转为json的方法
2018/12/31 Python
Python3删除排序数组中重复项的方法分析
2019/01/31 Python
详解python-图像处理(映射变换)
2019/03/22 Python
详解Python对JSON中的特殊类型进行Encoder
2019/07/15 Python
Django如何使用第三方服务发送电子邮件
2019/08/14 Python
Python实现钉钉订阅消息功能
2020/01/14 Python
使用keras2.0 将Merge层改为函数式
2020/05/23 Python
Python爬虫爬取ts碎片视频+验证码登录功能
2021/02/22 Python
Vichy薇姿加拿大官网:法国药妆,全球专业敏感肌护肤领先品牌
2018/07/11 全球购物
Herschel美国官网:背包、手提袋及配件
2020/03/10 全球购物
中间件分为哪几类
2012/03/14 面试题
麦当劳辞职信范文
2014/01/18 职场文书
焦裕禄精神心得体会
2014/09/02 职场文书
标准离婚协议书范文下载
2014/11/30 职场文书
2015年团支书工作总结
2015/04/03 职场文书
幼儿园亲子活动通知
2015/04/24 职场文书
解决redis sentinel 频繁主备切换的问题
2021/04/12 Redis
Apache Calcite 实现方言转换的代码
2021/04/24 Servers
Golang: 内建容器的用法
2021/05/05 Golang
spring 项目实现限流方法示例
2022/07/15 Java/Android