JavaScript权威指南(第6版) --- 自学笔记(8) --- 布尔值

布尔值
真或假、开或关、是或否、这个类型只有2个值(保留字): true 和 false。

(1)js程序中,比较语句的结果通常都是布尔值,如下:

var a;
console.log(a == 4); // false
a = 4;
console.log(a == 4); // true

(2) js程序的控制结构中,通常也会用到布尔值,如下:

var a = 4;
if(a == 4) {
    console.log("变量a的值是4。");
} else {
    console.log("变量a的值不是4。");
}
结果:变量a的值是4。

(3)任意js的值都可以转为布尔值

 // undefined, null, 0, -0, NaN, "", false 会被转换成false,所有其他对象都会转换成true
console.log("---------- 以下都会被转换成false ----------");
console.log(Boolean(undefined));
console.log(Boolean(null));
console.log(Boolean(0));
console.log(Boolean(-0));
console.log(Boolean(NaN));
console.log(Boolean(""));
console.log(Boolean(false)); // 自然是false
console.log("---------- 以下都会被转换成true ----------");
console.log(Boolean(Math.PI));
console.log(Boolean("false"));
console.log(Boolean(new Array()));
console.log(Boolean({}));

false和 (undefined, null, 0, -0, NaN, "")有时被称作为"假值",其他值被称为"真值"。
js期望使用一个布尔型时,假值会被当做false,真值会被当做true处理。
我们看下面示例:

var bool;
console.log("bool的实际值 = " + bool);
if(bool == null) {  // 判断相等符("=="),会认为undefined和null相等,所以此处返回true
    console.log("bool == null");
} else {
    console.log("bool = " + bool);
}
if(bool === null) {  // 严格相等运算符("==="),会认为undefined和null是不同的,所以此处返回false
    console.log("bool == null");
} else {
    console.log("bool = " + bool);
}
if(bool) { // 此处,只要o不是false或者其他假值,就会转换成true,否则转换成false
    console.log("bool是一个真值。");
} else {
    console.log("bool是一个假值。");
}

运行结果:
bool的实际值 = undefined
bool == null
bool = undefined
bool是一个假值。

我们定义了一个变量bool,并未进行任何赋值,实际上此时 bool的实际值是:undefined
此处简单介绍 undefined和null,他们都表示值得空缺,尽管两者不同,但往往可以互换,判断相等符("==")认为两者是相等的,但严格相等运算符("===")可以区分它们。

布尔值的操作运算:
"&&"运算符,执行了逻辑与操作,当且仅当两个操作数都是真时,它才返回true,否则返回false。
"||"运算符,执行了布尔或操作,当两个操作数其中之一为真时,它才返回true,只有当两个操作数都是假值时才返回false。
"!"一元操作符,执行布尔非操作,如果操作数是真值,则返回false,如果操作数是假值,则返回true。

"&&"运算符 和 "||"运算符 都是短路操作
拿"&&"运算符举例,当第一个操作数是false时,不会去判断第二个操作数,而直接返回false。
自己可以想想 "||"运算符 的短路情况。

var num = 1;
if(!(false && (++num))) {
    console.log("num = " + num);
}
// 运行结果:num = 1

if(true || (++num)) {
    console.log("num = " + num);
}
// 运行结果:num = 1

可以看出 ++num没有被执行过,这就是短路。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值