將“false”,"true","0","1"轉換為布爾


mass framework在最新版使用種子模塊加載節點的屬性來判定是什么環境:

<script type="text/javascript" debug="true" src="/scripts/mass.js"></script>

當頁面一載入此腳本時,它通過 scripts = DOC.getElementsByTagName( "script" );node = scripts[ scripts.length - 1 ];得到此節點,然后我們使用getAttribute("debug")來得到這個值。

我計划此屬性只能有四個合法的值,true, false, 0, 1,其他值或者不存在此屬性,則認為$["@debug"]為false。但不要忘記,通過getAttribute得到的值都是字符串,然后Boolean("false")的結果為true,因此剩下的問題是如何轉換這四個值!

方法一,使用eval, Function進行解析

 var bool = node.getAttribute("debug") 
 $["@debug"] = /^(false|true|1|0)$/i.test(false) ? eval("0,"+bool) : false;

方法二,使用JSON.parse

//由一群的糖果男孩提供
 var bool = node.getAttribute("debug") 
 $["@debug"] = /^(false|true|1|0)$/i.test(false) ? JSON.parse(bool) : false;

不過JSON有兼容問題,而且這是種子模塊,來不及調用其他模塊……

方法三,使用正則

 var bool = node.getAttribute("debug") ;
 var match = bool.match(/^(true|1)$|^(false|0)$/)
 $["@debug"] = !!(bool && bool[1])

方法四,直接利用等號與短路

//由一群的abcd提供 沒有用到轉換,但很滿足我框架的需求
 var str = node.getAttribute("debug") ;
 $["@debug"] = str =='true' || str=='1';

然后方法四完勝。這事情告訴我們,不要把情況想得太復雜……


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM