你們都知道在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