js的操作符详解(二)

继续上一篇哈, 这一篇主要说一下以下几个操作符 :

  • 取余操作符(%),

  • 指数操作符(**),

  • 布尔操作符(!),

  • 逻辑与 (&&)

  • 逻辑或 (||)

  • 关系操作符 (>, <,>=,<=)

1. 取余操作符 %

符号是% 这个操作符可以求得两操作数相除的余数

    // 操作数是数字的话正常进行运算
    // 如果操作数是其他一些比较狗的值,则会先调用用 Number 将其转成数字进行运算
    const num = 5;
    console.log(num % 2);   // 1
    console.log(num % '2'); // 1 
    console.log('5' % '2'); // 1
    console.log(num % []);  // NaN
    console.log(num % {});  // NaN
    console.log(num % null);// NaN
    console.log(num % undefined); // NaN

2. 指数操作符 ** 

符号是**  和Math.pow() 这个函数的功能一致, 可以求得数字的n次方

    // 碰到操作数不是数字的还是一样的套路, 调用 Number 转型函数转成数字再做运算
    let num = 3;
    num = num ** 2
    console.log(num); //9
    console.log(Math.pow(3, 2)); //9
    console.log('3' ** '2');  // 9
    console.log('3' ** null); // 1

3. 布尔操作符 ! 

符号是!  对一个值使用布尔操作符可以取得值对应的布尔值, 以此来进行一些逻辑操作

(1) ! 的情况 对值使用!得到该值对应的布尔值取反的结果

    console.log(!1); // 1原本对应的布尔值是 true 取反后得到 false
    console.log(!{});// {}原本对应的布尔值是 true 取反后得到 false
    console.log(!'');// ''原本对应的布尔值是 false 取反后得到 true
    console.log(!'abc');// 'abc'对应的布尔值是 true 取反得到 false

(2) !! 的情况 对值使用!!得到该值对应的布尔值 

    console.log(!!1); // 1原本对应的布尔值是 true 
    console.log(!!{});// {}原本对应的布尔值是 true 
    console.log(!!'');// ''原本对应的布尔值是 false 
    console.log(!!'abc');// 'abc'对应的布尔值是 true 

额外说一点 true对应的数字是1, false对应的数字是0 

现在我有一个需求, 把 undefined 转成0, 你会怎么写?

console.log(+!!undefined); // 0

4. 逻辑与操作符 && 

符号是 && , 如果符号左侧可以是值, 变量, 表达式 , 右侧可以是任何逻辑 , 如果符号左侧成立, 则执行符号右侧的逻辑 , 否则逻辑中单直接返回左侧不成立的结果 .  接下来演示一下 

    console.log(1 && 2); // 1 成立 返回 2
    console.log({} && null); // {} 成立 返回 null
    console.log(undefined && 3); // undefined 不成立 直接逻辑中断 返回undefined

    // 小场景 当我的变量 (假设为 flag)对应的布尔值为 true 时, 我需要发请求 
    // 伪代码 
    flag && axios.get('****')

5. 逻辑或操作符 || 

符号是 || , 如果符号左侧成立直接返回左侧成立的结果 , 这属于逻辑中断, 不会执行右侧的代码,  如果符号左侧不成立返回右侧的结果

    // 左侧成立的结果 逻辑中断右侧代码不会执行
    console.log({} || num++); // 返回{}
    console.log(2 || console.log(sum)); // 返回2
    console.log(1 || []);// 返回1
    // 左侧不成立的结果
    console.log(0 || undefined) // 因为0对应的布尔值是false 所以返回undefined
    console.log(null || null) // null 为false 返回null
    console.log(NaN || 3) // NaN对应的布尔值为false 返回3
    console.log(!!NaN);// 这里验证一下 false

6. 关系操作符 < > >= <=

对比规则 : 

  • 两侧都是数值, 按照数值大小比较
  • 两侧都是字符串, 按照对应的字符编码进行比较
  • 一侧数值一侧字符串 将字符串转成数字
  • 有一侧是对象, 调用对象的vaueOf方法,再根据前面的规则进行比较
  • 有一侧是布尔值, 将布尔值转成数字,再进行比较
    const obj = {}
    obj.valueOf = 3;
    console.log(1 < 2); // true
    console.log('a' < 'b'); // 97 < 98
    console.log('a'.charCodeAt(), 'b'.charCodeAt()); // 输出字符的编码
    console.log('a' < 2); // false 
    console.log(obj < 2); // false 3 < 2
    console.log(true < 2); // false 1 < 2

其他的下一节在说哈......

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值