zoukankan      html  css  js  c++  java
  • js运算符的特殊应用

    • 是否包含指定字符: ~
    • 取整: |
    • 取半: >>
    • 成长值评级: ||
    • 判断奇偶: &
    • 交换两个数字的值: ^=
    • 2的n次方: << 和 ** 1 << n-1
    • 是否是指定字符串开头: ! 和 ^
    • 字符串转数字: +
    • 转为 Boolean 值: !!
    • 转为数字类型:~~

    1、是否包含指定字符: ~

    ~"str1".indexOf("str2")
    
    //str1 被查找的字符串
    //str2 查找的字符串
    //如果 str1 不含有 str2 ,则返回数字 0 。

    例子

    var str1='abc';
    var str2='a';
    if(~str1.indexOf(str2)){
      console.log('有'+str2) //有a
    }else{
      console.log('无'+str2)
    }

    2、取整: |

    num | 0
    
    //num为正数时,相当于Math.floor()向下取整
    //num为负数时,相当于Math.ceil()向上取整
    // |后面必须是0,是0达到的是取整的效果,不是0,相当于转换为二进制之后相加的结果
    //(4|4)=4 即转换为二进制之后100 |100  相加得到100=4

    例子

    1.3 | 0 //1

    3、取半: >>

    num >> 1
    
    //num 整数

    例:求 50 的 1/2

    50 >> 1 //25

    4、成长值评级: ||

    需求1:
    成长值为5是1星;
    成长值为10是2星;
    成长值为12是3星;
    成长值为15是4星;
    其他都是0星。

    ({'5':1,'10':2,'12':3,'15':4}[val] || 0);
    
    //val 成长值。

    5、判断奇偶: &

    num & 1      //num 整数
    
    //例子
    var num=3;
    if (num & 1) {
        console.log("num是奇数"); //num是奇数
    } else {
        console.log("num是偶数");
    }

    6、交换两个数字的值: ^=

    方法1:使用位运行符:

    var num1 = 1, num2 = 2;
    num1 ^= num2;
    num2 ^= num1;
    num1 ^= num2;
    console.log(num1,num2); //2 1

    方法2:使用数组:

    var num1 = 1, num2 = 2;
    num1 = [num2, num2 = num1][0];
    console.log(num1,num2); //2 1

    7、2的n次方: << 和 **

    方法1:使用位运行符:

    1 << n-1        //2的n次方
    
    //例子:2的3次方:
    1<<3 //8

    方法2:使用幂运行符:

     x**y    //x的y次方
    
    //例:2的3次方:
    2**3 //8

    方法比较:

    使用 << 的方式可以支持负数,** 需要用括号否则出错。
    使用 ** 比较直观,没研究过 << 方法的任意数的任意次方的规律。

    1<<3 //8
    2**3 //8
    -1<<3 //-8
    -2**3 // 报错
    -(2**3) //-8
    3<<2 //12 错误
    3**2 //9 正确

    8、是否是指定字符串开头: ! 和 ^

    !str1.indexOf("str2")
    
    //例:
    
    var str1='abc';
    var str2='a';
    if(!str1.indexOf(str2)){
      console.log('是开头')
    }else{
      console.log('不是开头')
    }

    使用正则方式

    /^a/.test('abc') //a开头,true
    /c$/.test('abc') //c结尾,true

    9、字符串转数字: +

    +str
    
    //例:
    
    var str='123';
    typeof(str) //string
    typeof(+str) //number

    10、转为 Boolean 值: !!

    !!obj
    
    //例:
    !!'text' //true

     11、转为数字类型:~~

    ~~‘1’=1
    ~~true == 1
    ~~false == 0
    ~~"" == 0
    ~~[] == 0
    
    ~~undefined ==0
    ~~!undefined == 1
    ~~null == 0
    ~~!null == 1
  • 相关阅读:
    git 配置免密上传,配置ssh key
    spring @value 为什么没有获取到值
    idea 下maven 导入本地jar,以及导入之后 java不能引用问题
    在git远程仓创建项目之后,提交本地项目的使用方法
    mysql 查询数据库参数命令
    spring Existing transaction found for transaction marked with propagation 'never' 解决
    nginx for ubuntu
    spring中for循环中事务
    面向接口编程详解(一)——思想基础
    实战MEF(5):导出元数据
  • 原文地址:https://www.cnblogs.com/lmjZone/p/9336882.html
Copyright © 2011-2022 走看看