JS字符串false转boolean
大家都知道在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

当然也可以如下玩
String.prototype.bool = function() {
return (/^true$/i).test(this);
};
console.log("true".bool());
@落雨
http://ae6623.cn
2015年12月8日00:26:17
JS字符串false转boolean的更多相关文章
- js 字符串转换数字
方法主要有三种转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把值转换成浮点数.只有对 ...
- js 字符串转换成数字的三种方法
在js读取文本框或者其它表单数据的时候获得的值是字符串类型的,例如两个文本框a和b,如果获得a的value值为11,b的value值为9 ,那么a.value要小于b.value,因为他们都是字符串形 ...
- js 字符串转换成数字(转)
转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把值转换成浮点数.只有对String类型调用这些方法,这两个函数才能正确运行:对其他类型返回的 ...
- js字符串转成数字的三种方法
js读取的html代码中获得的值 ,统统是以字符串的形式呈现的,为了方便我们后面对数据的操作,有时候我们有必要进行转换一下. 方法主要有三种 转换函数.强制类型转换.利用js变量弱类型转换. 1. 转 ...
- js 字符串转化成数字
方法主要有三种 转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把值转换成浮点数.只有 ...
- js 字符串转化成数字:(实例:用正则检测大于0的正数,最多保留4位小数)
来源:http://www.cnblogs.com/hwx0807/archive/2011/06/28/2092021.html 实例: function BindSubmitEvent() { / ...
- js字符串 数字 的转换
js 字符串转化成数字 的 三种方法主要有 转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数 ...
- JavaScript进阶(四)js字符串转换成数字的三种方法
js字符串转换成数字的三种方法 在js读取文本框或者其它表单数据的时候获得的值是字符串类型的,例如两个文本框a和b,如果获得a的value值为11,b的value值为9 ,那么a.value要小于b. ...
- js字符串转换成数字与数字转换成字符串的实现方法
转载:点击查看地址 js字符串转换成数字 将字符串转换成数字,得用到parseInt函数.parseInt(string) : 函数从string的开始解析,返回一个整数. 举例:parseInt(' ...
随机推荐
- 「HNOI2018」转盘
「HNOI2018」转盘 现场推出了大部分结论但是只写了 \(40\) 分暴力,被贺指导踩爆,现在还有点怀念 HNOI2018 贺指导对着镜子荒野行动的日子,那几天他云球迷瞎**指点篮球,被送上指导称 ...
- [BZOJ4567][SCOI2016]背单词(Trie+贪心)
1.题意表述十分难以理解,简单说就是:有n个单词,确定一个背的顺序,使总代价最小. 2.因为第(1)种情况的代价是n*n,这个代价比任何一种不出现第(1)种情况的方案都要大,所以最后肯定不会出现“背某 ...
- wxFormBuilder初体验
第一步 打开wxFormBuilder 修改工程信息并保存工程 Name: 工程名 File: 生成代码(.py)文件名 Code_generation: 生成代码类型 第二步 创建窗体 切换至for ...
- VC 调用 Python
//file:py.h BOOL InitPython(); BOOL ClosePython(); ======================== //file:py.cpp #include & ...
- poj 2623 Sequence Median 堆的灵活运用
I - Sequence Median Time Limit:1000MS Memory Limit:1024KB 64bit IO Format:%I64d & %I64u ...
- 怎么改变html中placeholderr的文字颜色
<input type="text" placeholder="这里是提示文本" /> 设置的css代码: ::-webkit-input-plac ...
- MessasgePack:一个小巧高效的序列化方式
MessagePack是一种高效二进制序列化格式.可以在多种语言中进行快速数据交换,比如JSON格式等.它比Json更加小巧,更加高效,可以用于一些结构化数据存储 ,非常适合适用于消息总线,Memor ...
- SQL Structured Query Language(结构化查询语言) 数据库
SQL是Structured Query Language(结构化查询语言)的缩写. SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言. 在使用它时,只需要发出“做什么”的命令,“怎么 ...
- LeetCode152:Maximum Product Subarray
Find the contiguous subarray within an array (containing at least one number) which has the largest ...
- java基础学习总结——接口
一.接口的概念 JAVA是只支持单继承的,但现实之中存在多重继承这种现象,如“金丝猴是一种动物”,金丝猴从动物这个类继承,同时“金丝猴是一种值钱的东西”,金丝猴从“值钱的东西”这个类继承,同时“金丝猴 ...