!

  • ! 可以用来对一个值进行非运算

所谓非运算就是指对一个布尔值进行取反操作。

  • true 变 false,false 变 true

    1. var a = true;
    2. a = !a;
    3. console.log(a); // false

    如果对一个值进行两次取反,它不会变化

    1. var a = true;
    2. a = !!a; // true
  • 如果对非布尔值进行取反,则会将其转换为布尔值,然后在去反,

  • 我们可以利用该特点,来将一个其它的数据类型转换为布尔值
  • 可以为一个任意数据类型取两次反,来将其转换为布尔值。原理和 Boolean()函数 一样。

    1. var a = 10;
    2. a = !!a; // true
    3. console.log(typeof a); // boolean

    &&

  • && 可以对符号两侧的值进行与与运算并返回结果

  • 运算规则:

    • 两个值中只要有一个值为 false 就 返回 false
    • 只有两个值都为 true 时,才返回 true
      1. var a = true && true; // true
      2. a = false && true; // false
      JS 中的 与 属于短路的 与
  • 如果第一个值为 false,则不会看第二个值

    1. var a = flase && true; // flase

    第一个值为 true,会检查第二个值

    1. var a = true && flase; // false

    第一个值为 false,不会检查第二个值

    1. var a = false && true; // false

    ||

  • || 可以对符号两侧的值进行或运算并返回结果

  • 运算规则:

    • 两个值中只要有一个 true,就返回 true
    • 如果两个值都为 false,才返回 false
      1. var a = true || false; // true
      2. a = flase || false; // flase
      JS 中的 或 属于短路的 或
  • 如果第一个值为 true,则不会检查第二个值


&& || 非布尔值的情况

  • 对于非布尔值进行 与 或 运算时,
  • 会先将其转换为 布尔值,然后在运算,并且 返回原值,不会返回 true 和 false

与 运算:(找 flase)

  • 如果第一个值为 true,则必然返回第二个值
  • 如果第一个值为 false,则直接返回第一个值

    1. var result = 1 && 1; // 返回 1
    2. result = 0 && 1; // 返回 0

    或 运算:(找 true)

  • 如果第一个值为 true,则直接返回第一个值

  • 如果第一个值为 false,则返回第二个值
    1. var result = 0 || 1; // 返回 0
    2. result = "" || 1 // 返回 1