您的位置:首页 > Web前端 > JavaScript

你不知道的JavaScript(八)逻辑运算

2015-05-23 09:54 204 查看
JS的逻辑运算结果和其他一些强类型语言差别比较大,也比较容易让人产生困惑,看下面的例子:

<script type="text/javascript">
var a = 40;
var b = "hello";
alert(!!a);//true
alert(!!b);//true
alert(a && b);//alert hello
</script>


我们定义两个变量a、b,对a、b进行两次取反获取它们转换成boolean类型的值均为true。然后將变量a和变量b做逻辑运算,发现结果竟然不是true,而是”hello”。

为了明确JS逻辑运算的最终结果是怎样的,我们需要先了解一下JS中哪些类型的值在做逻辑判断的时候会被认为是false。

空字符串
""


数值类型(number)中的0和NaN

null类型

undefined类型

boolean类型中的false

<script type="text/javascript">
//alert false
if(""|| 0 || null || undefined || NaN || false )
{
alert(true);
}else
{
alert(false);
}
</script>


执行上面代码对话框中弹出false,其他值在逻辑判断时均被认为是true。

接下来在来解释逻辑运算符||和&&的返回结果是怎么一回事:

事实上,JS以参与逻辑运算的最后一个值作为本次逻辑运算的最终结果,这句话理解起来可能有点困难,我们来看看下面的例子:

var num1 = 40;
var str1 = "hello";
alert(num1 || str1);//40
alert(num1 && str1);//hello


大家都知道 || 运算符是”一真则真”,num1转换为boolean类型为true,已经有一个”true”了,所以 || 运算符后面的部分没有被执行,也就是说str1根本就没有参与该逻辑运算。JS会把num1的值作为本次逻辑运算的结果。

而逻辑运算符&&则是”一假则假”,num1转换为boolean类型为true,能够决定该逻辑运算结果转换为boolean类型真假的是str1。所以JS以str1作为该逻辑运算的结果。

有了这些依据下面的逻辑运算结果就很容易判断了:

var num2 = 0;
var str2 = "wrold";
alert(num2 || str2);//hello
alert(num2 && str2);//0

var num3 = 40;
var str3 = "";
alert(num3 || str3);//40
alert(num3 && str3);//""


num2值为0,转换成boolean类型为false,
num2 || str2
逻辑运算的结果由str2决定。
num2 && str2
逻辑运算中num2 已经为假,str2未参与逻辑运算,所以以num2作为该逻辑运算的结果。下面的一个例子也是同样的道理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: