1. 逻辑或的本质
image.png
// 脱离分支语句, 单独使用逻辑或
/*
1.先将运算元转成Boolean类型
2.对转成的boolean类型进行判断
* 如果为true, 直接将结果(原始值)返回,不是返回true或者返回false,
比如第一个运算元是why,字符串,转换为布尔
是true,但是返回的时候,返回的是why,而不是true
* 如果为false, 进行第二个运算元的判断
* 以此类推
3.如果找到最后, 也没有找到, 那么返回最后一个运算元
*/
// var name = "why"
// name || 运算元2 || 运算元3
var chineseScore = 95
var mathScore = 99
var test = chineseScore || mathScore
console.log(test)//95
// 本质推导一: 之前的多条件是如何进行判断的
var chineseScore = 95
var mathScore = 99
// chineseScore > 90为true, 那么后续的条件都不会进行判断
if (chineseScore > 90 || mathScore > 90) {}
// 本质推导二: 获取第一个有值的结果
var info = "abc"
var obj = {name: "why"}
var message = info || obj || "我是默认值"
console.log(message)//'abc' 0,nan,空字符串,null undifiend==>false
console.log(message.length)
function foo(name){
//调用的时候希望别人给你传个参数,但是调用的时候没有传的时候,name是undifned,后面再用的时候
//会报错,比如打印name.length的时候,undified没有length属性,就会报错。
//这个时候就要用逻辑或,给他一个默认值
var message = name || "我是默认值"
}
foo()
2. 逻辑与的本质
image.png // 运算元1 && 运算元2 && 运算元3
/*
也可以脱离条件判断来使用
逻辑与的本质
1.拿到第一个运算元, 将运算元转成Boolean类型
2.对运算元的Boolean类型进行判断
* 如果false, 返回运算元(原始值)
* 如果true, 查找下一个继续来运算
* 以此类推
3.如果查找了所有的都为true, 那么返回最后一个运算元(原始值)
*/
// 本质推导一: 逻辑与, 称之为短路与
var chineseScore = 80
var mathScore = 99
if (chineseScore > 90 && mathScore > 90) {}
// 本质推导二: 对一些对象中的方法进行有值判断
var obj = {
name: "why",
friend: {
name: "kobe",
eating: function() {
console.log("eat something")
}
}
}
// 调用eating函数
// obj.friend.eating()
//如果obj里面没有friend这个属性的化,调用obj.friend.eating()会报错
obj && obj.friend && obj.friend.eating && obj.friend.eating()
|| 和 && 返回它们其中一个操作数的值,而非条件判断的结果
3.逻辑非的本质
image.png
var message = "Hello World"
//想把这个message转换成布尔类型,有以下两种方法
console.log(Boolean(message))//true
console.log(!!message)//true
var obj = null
console.log(Boolean(obj))//false
console.log(!!obj)//false
非常感谢王红元老师的(前端基础公开课-学习视频教程-腾讯课堂 (qq.com)
)让我学习到很多前端的知识
网友评论