今天,遇到需要将cookie里的某个值转换为JS的布尔值的问题,后来在网上搜到某人写的文章,说用Boolean()可以将值强制转换。于是信以为真,也根本没有怀疑过这里的正确性。代码一直出现莫名奇妙的问题(赋值总是固定的,从来不变)。但就是找不到原因。
经过几番折腾,终于把问题锁定到了Boolean()上,自己写了个小测试,如下:
<script type="text/javascript">
var test = String("true");
alert("(string)true: " + Boolean(test)); //弹出“true”
test = String("false");
alert("(string)false: " + Boolean(test)); //弹出“true”
test = Number(0);
alert("(Number)0: "+ Boolean(test)); //弹出“false”
test = Number(1);
alert("(Number)1: "+ Boolean(test)); //弹出“true”
</script>
真的很奇怪,为什么字符串“false”的结果也是“true”呢。实在是不理解了,于是在http://www.w3school.com.cn/上查找Boolean()的解释。
才知道自己被人忽悠了。w3school里写到
Boolean 对象
您可以将 Boolean 对象理解为一个产生逻辑值的对象包装器。
Boolean(逻辑)对象用于将非逻辑值转换为逻辑值(true 或者 false)。
使用关键词 new 来定义 Boolean 对象。下面的代码定义了一个名为 myBoolean 的逻辑对象:
var myBoolean=new Boolean()
注释:如果逻辑对象无初始值或者其值为 0、-0、null、""、false、undefined 或者 NaN,那么对象的值为 false。否则,其值为 true(即使当自变量为字符串 "false" 时)!
下面的所有的代码行均会创建初始值为 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) var myBoolean=new Boolean(NaN)
下面的所有的代码行均会创初始值为 true 的 Boolean 对象:
var myBoolean=new Boolean(true) var myBoolean=new Boolean("true") var myBoolean=new Boolean("false") var myBoolean=new Boolean("Richard")
这次吃亏着实不小,浪费了很多的时间,却没有找到问题的所在。不过学到了东西总是好的。