你们都知道在JS的世界里, 0、-0、null、""、false、undefined 或 NaN,这些均可以自动转化为布尔的 false,那么字符串的"false"是否是false呢,答案是否认的,if("false") 来判断的话,是等于true的后端
因此今天遇到个SB问题,就是后台velocity往前台传参,你们通常都是这么写。this
var hasAuth = $!auth ; // 这个auth就是利用velocity传到前台的
这么写就有一个风险,那就是,若是后台忘记往前台传这个参数,就形成了以下的prototype
var hasAuth = ; // 语法错误,由于;以前是个空,这是因为velocity木有传参,前台是天然而然的变成了空白,空白!!
那么如何解决这种由于先后端不分离,velocity忘记传到前台而产生的这个问题呢,当当当当,我想到了一个办法就是利用单引号将变量括住,这样后台不传参,我也不怕不怕啦,代码变成了这样code
var hasAuth = '$!auth' ; // 这样就好啦,即便后台不传参到前台,我特么也不怕报语法错误了。
然而事情并无到此结束,由于我发现若是后台没有忘记往前台传参,后台得到的权限绝逼不是true就是false,那么问题来了,代码通过渲染变成了下面这个样纸。对象
var hasAuth = 'true'; 或者 var hasAuth = 'false';
那么下面再作判断的时候呢blog
1. var hasAuth = 'true'; if(hasAuth){ //此时的hasAuth是true } 2. var hasAuth = 'false'; if(hasAuth){ //此时的hasAuth仍是true }
日了狗了,这该如何是好!!!ci
我特么灵机一动,那么我用Boolean的构造方法去作处理岂不是就ok了?我特么太聪明了,因而这么写字符串
var hasAuth = Boolean('$!auth');
仍是和刚才同样it
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 }
日了狗了,为咩啊io
我查阅了一下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");
靠了,这条路也想不通,可爱的一休哥,赶忙想一想注意啊!
灵机一动,哇塞,那么我用字符串去对比字符串总能够了吧?
因而最终的检测方法以下
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