资讯专栏INFORMATION COLUMN

细谈布尔操作符

leap_frog / 2340人阅读

摘要:逻辑非可以应用于中的任何值无论这个值是什么数据类型,这个操作符都会返回一个布尔值逻辑非操作符首相会将它的操作数转化成一个布尔值,然后对其求反逻辑与可以应用于任何类型的操作数在有一个操作数不是布尔值的情况下,逻辑与操作就不一定返回布尔值属于短

逻辑非(!)

可以应用于ECMAScript中的任何值

无论这个值是什么数据类型,这个操作符都会返回一个布尔值

逻辑非操作符首相会将它的操作数转化成一个布尔值,然后对其求反

逻辑与(&&)

可以应用于任何类型的操作数

在有一个操作数不是布尔值的情况下,逻辑与操作就不一定返回布尔值

属于短路操作

不能在逻辑与操作中使用未定义的值,会导致错误

逻辑或(||)

可以应用于任何类型的操作数

如果有一个操作数不是布尔值,逻辑或也不一定返回布尔值

属于短路操作

一些其他思考 当同时有逻辑或和逻辑与时,或者同时有多个与操作和同时有多个或操作时执行顺序是怎样的?

首先明确优先级:! > && > ||

NaN && 1 || 0 // 0 :首先执行NaN && 1,结果是NaN,然后执行NaN || 0,最终结果是0

NaN || 1 && 0 // 0:首先执行1 && 0,结果是0,然后执行NaN || 0,最终结果是0

1 && NaN && 2 // NaN:按照从左到右的顺序执行,最终结果是NaN

总结几个场景 1、逻辑或的运用场景
function test(num) {
    var newNum = num || 1
    console.log(newNum)
}
test()  // 1
test(4) // 4
test(0) // 1

传的是空对象,求值结果为false,返回第二个操作数

传的是数值4,对象,返回第一个操作数

传的是数值0,求值结果是false,返回第二个操作数

2、逻辑与的运用场景
function test(obj) {
    var num = obj && obj.num && obj.num.count
    console.log(num)
}
test() //undefined
test({}) //undefined
test({num: {}}) // undefined
test({num: {count: 1}}) // 1

第一个操作数返回undefined,不会对后面的操作数求值,直接返回undefined

第一个操作数返回“{}”,第二个操作数返回undefined,直接返回undefined

第一个操作数返回“{num: {}}”,第二个操作数返回“{}”,第三个操作数返回undefined,返回第三个操作数

返回最后一个操作数

3、逻辑与和或的一起运用场景
function test(obj) {
    var num = obj && obj.num && obj.num.count || 0
    console.log(num)
}
test() //0
test({}) //0
test({num: {}}) // 0
test({num: {count: 1}}) // 1

相当于console.log(undefined||0),返回第二个操作数

同上

同上

相当于console.log(1||0),返回第一个操作数

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/95269.html

相关文章

  • 细谈在HTML中使用JavaScript

    摘要:前言是浏览器的内置脚本语言。避免,在结构生成之前调用节点,而产生错误 前言 JavaScript是浏览器的内置脚本语言。当网页中嵌入了JavaScript脚本,浏览器加载网页时,就会执行脚本,从而操作浏览器,实现各种动态效果 JavaScript代码嵌入网页的方法 1、元素直接嵌入代码 function sayHello() { alert(hello!); ...

    eternalshallow 评论0 收藏0
  • 细谈在HTML中使用JavaScript

    摘要:前言是浏览器的内置脚本语言。避免,在结构生成之前调用节点,而产生错误 前言 JavaScript是浏览器的内置脚本语言。当网页中嵌入了JavaScript脚本,浏览器加载网页时,就会执行脚本,从而操作浏览器,实现各种动态效果 JavaScript代码嵌入网页的方法 1、元素直接嵌入代码 function sayHello() { alert(hello!); ...

    yacheng 评论0 收藏0
  • 细谈sass和less中的变量及其作用域

    摘要:如果存在一个同名的全局变量,这个全局变量也不会被重写,除非同名的局部变量被声明时使用关键字。 博客原文地址:Claiyre的个人博客 https://claiyre.github.io/博客园地址:http://www.cnblogs.com/nuannuan7362/如需转载,请在文章开头注明原文地址------------------------------------------...

    wslongchen 评论0 收藏0
  • 细谈 vue - slot 篇

    摘要:结合我们的例子,子组件则会生成以下代码到目前为止,对于普通插槽和作用域插槽已经谈的差不多了。下面我们将仔细谈谈这块的内容。在看具体实现逻辑前,我们先通过一个例子来先了解下其基本用法然后进行使用页面展示效果如下看着好。本篇文章是细谈 vue 系列第二篇了,上篇我们已经细谈了 vue 的核心之一 vdom,传送门 今天我们将分析我们经常使用的 vue 功能 slot 是如何设计和实现的,本文将围...

    kaka 评论0 收藏0
  • 细谈JavaScript中的一些设计模式

    摘要:注意事项声明函数时候处理业务逻辑区分和单例的区别,配合单例实现初始化构造函数大写字母开头推荐注意的成本。简单工厂模式使用一个类通常为单体来生成实例。 @(书籍阅读)[JavaScript, 设计模式] 常见设计模式 一直对设计模式不太懂,花了一下午加一晚上的时间,好好的看了看各种设计模式,并总结了一下。 设计模式简介 设计模式概念解读 设计模式的发展与在JavaScript中的应用 ...

    30e8336b8229 评论0 收藏0

发表评论

0条评论

leap_frog

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<