Javascrip中的布尔类型是很有趣的,最起码从C#这种强类型语言的角度来说;
首先,用来判断是true还是false,不仅是要用true或false,好像任何对象都可以用来做为布尔判断,是不是有种“天地万物都为我所用”的成就感,上网查查了,从别处抄来总结如下:
1、所有对象都被认为是 true。
2、字符串当且仅当为空(""或'')时才被认为是 false。
3、null 和未定义的均被认为是 false。
4、数字当且仅当为 0 时才是 false 。
所以用起来很是方便应手了,想判断页面中是否有某个对象,真接就来句:
if(button)
{
alert("存在");
}
else
{
alert("SORRY,不存在");
}
今天在蓝色中看到一篇文章,对js 中布尔型及==运算符进行了一番比较分析。
不看不知道,一看吓一跳,平时还真的没有注意到这么细节的东西:
所谓大牛与菜鸟,估计这是重要的区别之一了。
说到布尔型,估计不少人都知道JS中非0即为true,那么请您运行一下下面这两行代码:
你觉得答案是多少呢?
答案是: true true
----对不起,其实答案是 true false,但我相信,上面才是不少人以目中的第一答案。
为了让大家,也为了让我能记住,或者是知道有这么一些我们容易忽略的东西,我将记录一下这些区别或细节:
一、单纯的布尔值运行,的确是非0为true,如:
二、==运算符并不是简单的将非0的转为true,反之为false,反而是:
1、If Type(x) is Boolean, return the result of the comparison ToNumber(x) == y. If Type(y) is Boolean, return the result of the comparison x == ToNumber(y).
也就是说:如果某一个操作数为bool型,那么它会被转换成数字进行比较,而规则是:true->1 false->0
如:
2、If Type(x) is Number and Type(y) is String, return the result of the comparison x == ToNumber(y). If Type(x) is String and Type(y) is Number, return the result of the comparison ToNumber(x) == y.
也就是说某一操作数为字符串,另一个是number时,字符串为转换为number,如:
3、非空字符串会被转换成true(而null和undefined为false),如:
------
说到这里,想起jQuery的$,这个东东选取元素时,结果返回jQuery对象,无论元素是否存在。
因此不能用if($('#id'))来判断是否选取到。而可以用$('#id').length>0来判断.
原文章地址:http://www.blueidea.com/tech/web/2010/7576.asp
------