背景: 從cookie中讀的鍵值爲'false',當把字符串做爲判斷條件時,問題就來了javascript
在JS的世界裏, 0、-0、null、""、false、undefined 或 NaN,這些均可以自動轉化爲布爾的 false,那麼字符串的"false"卻不等於false呢,if("false") 來判斷的話,是等於true的。java
根據W3C的解釋:segmentfault
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");
複製代碼
所以,若是從cookie或者後臺返回數據爲字符串的'false'時,是不能直接做爲判斷條件的。後端
let bool = result === 'false' ? false : true
複製代碼
let bool = {
'true': true,
'false': false
};
bool[ v ] !== undefined ? bool[ v ] : false;
複製代碼
這個應該是最方便、簡潔的方法了cookie
JSON.parse('false') // false
JSON.parse('true') //true
複製代碼
let target = '0'
let bool = !!+target
複製代碼
【討論向】這是目前找到的較好的解決方案,若是有更好、更優雅的方式,歡迎貼過來ui
鏈接地址spa