細談布爾操作符

邏輯非(!)

  • 能夠應用於ECMAScript中的任何值
  • 不管這個值是什麼數據範例,這個操縱符都邑返回一個布爾值
  • 邏輯非操縱符宰衡會將它的操縱數轉化成一個布爾值,然後對其求反

邏輯與(&&)

  • 能夠應用於任何範例的操縱數
  • 在有一個操縱數不是布爾值的情況下,邏輯與操縱就不肯定返回布爾值
  • 屬於短路操縱
  • 不能在邏輯與操縱中應用未定義的值,會致使毛病

邏輯或(||)

  • 能夠應用於任何範例的操縱數
  • 如果有一個操縱數不是布爾值,邏輯或也不肯定返回布爾值
  • 屬於短路操縱

一些其他思索

當同時有邏輯或和邏輯與時,或許同時有多個與操縱和同時有多個或操縱時實行遞次是如何的?

起首明白優先級:! > && > ||

  1. NaN && 1 || 0 // 0 :起首實行NaN && 1,效果是NaN,然後實行NaN || 0,終究效果是0
  2. NaN || 1 && 0 // 0:起首實行1 && 0,效果是0,然後實行NaN || 0,終究效果是0
  3. 1 && NaN && 2 // NaN:根據從左到右的遞次實行,終究效果是NaN

總結幾個場景

1、邏輯或的應用場景

function test(num) {
    var newNum = num || 1
    console.log(newNum)
}
test()  // 1
test(4) // 4
test(0) // 1

  1. 傳的是空對象,求值效果為false,返回第二個操縱數
  2. 傳的是數值4,對象,返回第一個操縱數
  3. 傳的是數值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
  1. 第一個操縱數返回undefined,不會對背面的操縱數求值,直接返回undefined
  2. 第一個操縱數返回“{}”,第二個操縱數返回undefined,直接返回undefined
  3. 第一個操縱數返回“{num: {}}”,第二個操縱數返回“{}”,第三個操縱數返回undefined,返回第三個操縱數
  4. 返回末了一個操縱數

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
  1. 相當於console.log(undefined||0),返回第二個操縱數
  2. 同上
  3. 同上
  4. 相當於console.log(1||0),返回第一個操縱數
    原文作者:pitaojin
    原文地址: https://segmentfault.com/a/1190000015038229
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞