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 相关文章推荐
JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型
Oct 11 Javascript
JQuery 实现在同一页面锚点链接之间的平滑滚动
Oct 29 Javascript
JavaScript中Number.MIN_VALUE属性的使用示例
Jun 04 Javascript
jquery实现图片上传之前预览的方法
Jul 11 Javascript
jQuery实现拖拽可编辑模块功能代码
Jan 12 Javascript
JavaScript中严格判断NaN的方法
Feb 16 Javascript
解决Vue2.x父组件与子组件之间的双向绑定问题
Mar 06 Javascript
JavaScript事件冒泡与事件捕获实例分析
Aug 01 Javascript
Bootstrap-table自定义可编辑每页显示记录数
Sep 07 Javascript
详解React 服务端渲染方案完美的解决方案
Dec 14 Javascript
ES6模板字符串和标签模板的应用实例分析
Jun 25 Javascript
为什么JavaScript中0.1 + 0.2 != 0.3
Dec 03 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的urlencode()URL编码函数浅析
2011/08/09 PHP
PHP使用json_encode函数时不转义中文的解决方法
2014/11/12 PHP
PHP实现的通过参数生成MYSQL语句类完整实例
2016/04/11 PHP
php封装的单文件(图片)上传类完整实例
2016/10/18 PHP
php 自定义错误日志实例详解
2016/11/12 PHP
PHP大文件切割上传功能实例分析
2019/07/01 PHP
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.2 0
2008/03/22 Javascript
js 自定义的联动下拉框
2010/02/07 Javascript
Javascript异步表单提交,图片上传,兼容异步模拟ajax技术
2010/05/10 Javascript
JavaScript面向对象之Prototypes和继承
2012/07/12 Javascript
浅析JavaScriptSerializer类的序列化与反序列化
2016/11/22 Javascript
JS实现京东首页之页面顶部、Logo和搜索框功能
2017/01/12 Javascript
angularjs实现多张图片上传并预览功能
2017/02/24 Javascript
angular中实现控制器之间传递参数的方式
2017/04/24 Javascript
jQuery时间戳和日期相互转换操作示例
2018/12/07 jQuery
解决微信小程序调用moveToLocation失效问题【超简单】
2019/04/12 Javascript
vue打开子组件弹窗都刷新功能的实现
2020/09/21 Javascript
[03:16]DOTA2完美大师赛小组赛精彩集锦
2017/11/22 DOTA
[48:47]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[44:40]Serenity vs Pain 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Django中Model的使用方法教程
2018/03/07 Python
python实现邮件发送功能
2019/08/10 Python
python中Lambda表达式详解
2019/11/20 Python
Python使用uuid库生成唯一标识ID
2020/02/12 Python
西班牙网上书店:Casa del Libro
2016/11/01 全球购物
双立人美国官方商店:ZWILLING集团餐具和炊具
2020/05/07 全球购物
介绍一下write命令
2012/09/24 面试题
优秀毕业生推荐信
2013/11/02 职场文书
小学生美德少年事迹
2014/02/02 职场文书
擅自离岗检讨书
2014/02/11 职场文书
2015年全国助残日活动方案
2015/05/04 职场文书
大学生就业指导课心得体会
2016/01/15 职场文书
《大禹治水》教学反思
2016/02/22 职场文书
教你用Python写一个植物大战僵尸小游戏
2021/04/25 Python
Java并发编程之Executor接口的使用
2021/06/21 Java/Android
解决Git推送错误non-fast-forward的方法
2022/06/25 Servers