將「false」,"true","0","1"轉換爲布爾

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

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

當頁面一載入此腳本時,它經過 scripts = DOC.getElementsByTagName( "script" );node = scripts[ scripts.length - 1 ];獲得此節點,而後咱們使用getAttribute("debug")來獲得這個值。java

我計劃此屬性只能有四個合法的值,true, false, 0, 1,其餘值或者不存在此屬性,則認爲$["@debug"]爲false。但不要忘記,經過getAttribute獲得的值都是字符串,而後Boolean("false")的結果爲true,所以剩下的問題是如何轉換這四個值!node

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

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

方法二,使用JSON.parsespa

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

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

方法三,使用正則code

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

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

//由一羣的abcd提供 沒有用到轉換,但很知足我框架的需求
  var str = node.getAttribute( "debug" ) ;
  $[ "@debug" ] = str == 'true' || str== '1' ;
相關文章
相關標籤/搜索