重温JavaScript(lesson16):Boolean与布尔值

大家好,我们一起重温JavaScript。在前面的学习中我们知道Object是JS中所有对象的父对象,我们也学习了对象的两个重要方法:一个是toString(),一个是valueOf()。

toString用于返回对象的描述字符串,在必要的时候我们可以对其进行重写。valueOf返回对象的值的描述信息。如果你忘记了,请学习之前的内容。

本次我们要学习与Boolean()构造器相关的内容。

1.Boolean作为构造器使用

我们来看如下的代码片段:

var b = new Boolean();
console.log(typeof b);
//object

这里所创建的b是一个对象,而不是一个基本类型的布尔值。

如果要转换成基本数据类型的布尔值,可以调用它的valueOf()方法,如下代码所示:

var boolVal = b.valueOf();
console.log(boolVal);
//false
console.log(typeof boolVal);
//boolean

如上代码中我们看到了当将b转换为基本类型后,再使用typeof检查其类型则结果为boolean。

注意:在实际开发中我们很少使用new Boolean()的方式创建对象

2.Boolean作为函数使用

Boolean作为函数使用可以将一些非布尔值转换为布尔值。效果相当于两次取反操作(!!value)

我们看一下如下的代码:

var boolVal1 = Boolean('test')
console.log(boolVal1)
//true

var boolVal2 = Boolean("")
console.log(boolVal2)
//false

var boolVal3 = Boolean({})
console.log(boolVal3)
//true

var boolVal4 = Boolean(false)
console.log(boolVal4);
//false

var boolVal5 = Boolean(new Boolean(false));
console.log(boolVal5)
//true

通过以上代码我们看到,Boolean能够把一个非空字符串转换为true,而空串的转换结果是false。能够把空对象转换为true,false经过转换仍然是false。Boolean类型的对象转换后得到结果为true,不管这个Boolean对象的值是什么。那么普遍的规律是什么呢?

除了6种falsy值外,其他所有的值都会转换为truthy值。6种falsy值是:"",null,undefined,0,NaN,false

关于Boolean(),我们就说这么多,我们再来看看简单的布尔类型相关的内容:

3.布尔类型

3.1其他类型转换为布尔类型

布尔类型只有两种值:true和false。JS中有三种逻辑运算:逻辑非(!)、逻辑或(||)和逻辑与(&&)都属于布尔运算。非就是对原来的布尔值取反,逻辑或的特点是“一真即真,都假才假”,逻辑与的特点是“一假即假,都真才真”。

如果我们对一个非布尔类型的值进行逻辑运算,那么这个值在计算过程中就会被转换为布尔值,而正如前面说到的,我们可以借助于两次取反将任何值转换为布尔类型值。

我们看代码:

var a = null;
console.log(!a)
//true
console.log(!!a);
//false
var b = 'New_Name';
console.log(!b)
//false
console.log(!!b)
//true

我们看到,如果某个值原来为falsy值,那么双重取反后得到false,如果某个值为truthy值,那么双重取反后得到true

3.2逻辑操作的惰性求值

逻辑操作的惰性求值是指:在一个连续的逻辑操作中,操作结果在最后一个操作完成之前就确定下来了,那么操作就不再继续执行了,JS引擎停止对后续表达式的求值。

在一些面试题中,你可能会看到这样的题目:给你一个逻辑表达式,问你该逻辑表达式的执行结果。其实这样的题目就是在考察逻辑操作的惰性求值。我们看例子:

let name = 'js'
let res1 = true || (name='New_Name');  
console.log(res1)
//true
console.log(name)
//js
let res2 = true && (name='重温新知');
console.log(res2);
//重温新知
console.log(name);
//重温新知

我们看到res1的结果为true,是因为惰性求值,逻辑或运算的第一个运算数为真值,后面的表达式不再执行,因此name仍然为js。而res2的结果为“重温新知”,是因为逻辑与操作符在第一个操作数为真的时候也要对第二个操作数检查,因此会执行对name的重新赋值。

下面我们看一下和布尔值有关的面试题

4.相关面试题

  1. 0||1得到的结果,0&&1得到的结果?

    答案:1,0

    console.log(0||1)
    //1
    console.log(0&&1)
    //0
    
  2. 1&&2||0得到的结果,0||2&&1得到的结果?

    答案:2,1

    console.log(1&&2||0);
    //2
    console.log(0||2&&1);
    //1
    

来一张导图总结一下今天分享的内容:

图片

我们这次的分享就到这里,下次再会。如有错误,请不吝指正。温故而知新,欢迎和我一起重温旧知识,攀登新台阶~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

重温新知

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值