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

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

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

例子

  1. var str1='abc';
  2. var str2='a';
  3. if(~str1.indexOf(str2)){
  4. console.log('有'+str2) //有a
  5. }else{
  6. console.log('无'+str2)
  7. }

2、取整: |

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

例子

  1. 1.3 | 0 //

3、取半: >>

  1. num >> 1
  2.  
  3. //num 整数

例:求 50 的 1/2

  1. 50 >> 1 //

4、成长值评级: ||

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

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

5、判断奇偶: &

  1. num & 1 //num 整数
  2.  
  3. //例子
  4. var num=3;
  5. if (num & 1) {
  6. console.log("num是奇数"); //num是奇数
  7. } else {
  8. console.log("num是偶数");
  9. }

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

方法1:使用位运行符:

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

方法2:使用数组:

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

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

方法1:使用位运行符:

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

方法2:使用幂运行符:

  1. x**y //x的y次方
  2.  
  3. //例:2的3次方:
  4. 2**3 //

方法比较:

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

  1. 1<<3 //
  2. 2**3 //
  3. -1<<3 //-8
  4. -2**3 // 报错
  5. -(2**3) //-8
  6. 3<<2 //12 错误
  7. 3**2 //9 正确

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

  1. !str1.indexOf("str2")
  2.  
  3. //例:
  4.  
  5. var str1='abc';
  6. var str2='a';
  7. if(!str1.indexOf(str2)){
  8. console.log('是开头')
  9. }else{
  10. console.log('不是开头')
  11. }

使用正则方式

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

9、字符串转数字: +

  1. +str
  2.  
  3. //例:
  4.  
  5. var str='123';
  6. typeof(str) //string
  7. typeof(+str) //number

10、转为 Boolean 值: !!

  1. !!obj
  2.  
  3. //例:
  4. !!'text' //true

11、转为数字类型:~~

  1. ~~‘1’=1
  2. ~~true == 1
  3. ~~false == 0
  4. ~~"" == 0
  5. ~~[] == 0
  6.  
  7. ~~undefined ==0
  8. ~~!undefined == 1
  9. ~~null == 0
  10. ~~!null == 1

js运算符的特殊应用的更多相关文章

  1. JS运算符

    JS运算符: 使用的运算符的时候不需要声明变量,运算符非变量:1.算术运算符 + - * / % (%为取余数运算符) (自增运算符++) (自减运算符 --) + 运算符作用:1.数值相加 2.字符 ...

  2. js 运算符优先级

    在看jquery源码,仔细看入口函数的时候,有点懵了.看到与或.多重三目,傻傻的分不清,就代码仔细的区分下运算符优先级,以前都是呼呼的飘过.看来任何一个细节都不能忽略,不然效率极低.. !functi ...

  3. js运算符单竖杠“|”的用法和作用及js数据处理

    js运算符单竖杠“|”的作用 很多朋友都对双竖杠“||”,了如指掌,因为这个经常用到.但是大家知道单竖杠吗?今天有个网友QQ问我,我的 javascript实用技巧,js小知识 , 这篇文章里面,js ...

  4. js值类型转换(boolean/String/number),js运算符,if条件,循环结构,函数,三种弹出框

    js值类型转换 number | string | boolean boolean类型转换 num = 0; var b1 = Boolean(num); console.log(b1) 转化为数字类 ...

  5. js运算符的一些特殊应用

    作者: 小文 来源: http://www.cnblogs.com/daysme/ 时间: 2017/3/2 17:21:03 本文集合了了js运算符的一些特殊应用. js位运行符的运用. js运算符 ...

  6. js课程 2-6 js如何进行类型转换及js运算符有哪些

    js课程 2-6 js如何进行类型转换及js运算符有哪些 一.总结 一句话总结: 1.所有类型->布尔类型(为假的情况)有哪些(6种)? 1)字符串('')2)整型(0)3)浮点型(0.0)4) ...

  7. js 运算符的执行顺序

    js 运算符的执行顺序 js 运算符优先级 Operator Precedence 下表从最高(21)到最低(1)优先顺序排列 left-to-right 从左到右 / 先左后右 right-to-l ...

  8. 《JavaScript高级程序设计》学习笔记(2)--JS运算符详解

    欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习. 思维导图 前面对JS的运算符的操作很多细节的东西没有提及,今天给大家分享一张网上找的思维导图,对这一部 ...

  9. 聊聊js运算符 ‘与(&&)’和‘ 或(||)’

    一,先来几个问题,看给位能都全部答对. var objA1 = {x:1}; var objA2 = {x:2}; var resultA = objA1 && objA2; //请问 ...

  10. JS运算符、NaN

    一.关系运算符  (< <= > >= == === != !==) 判断符号左右的两个数据的大小之间的关系,运算结果是一个布尔类型的值 ==   只判断值 ===即判断值并且 ...

随机推荐

  1. 疫情下的在线上课方案:QQ直播+蓝墨云班课

    目录 疫情下的在线上课方案:QQ群视频(腾讯课堂)+蓝墨云班课 使用QQ进行直播 材料 QQ直播步骤 其他问题 使用蓝墨云班课加强学习效果 教材问题 我的直播-小学生硬笔书法基础 我的直播 - C程序 ...

  2. windowsCMD常用工具

    就目前的经验来看cmd中的命令可以在power shell中正常使用,反之则不行. 另外,据某些现象,推断某些cmd应用使用的字符集应该是不同的.net命令会在utf-8编码下出现中午乱码. 1.ne ...

  3. python两个_多个字典合并相加

    这只是符合比较正常的需求和场景. #一.适用合并两个字典(key不能相同否则会被覆盖),简单,好用. A = {'a': 11, 'b': 22} B = {'c': 48, 'd': 13} #up ...

  4. PyQt5四大布局方式

    1.绝对布局方式'''绝对布局方式,通过move的XY坐标方式来控制控件的位置'''from PyQt5.QtWidgets import *import sys,math class absolut ...

  5. 内存泄漏与weakMap、weakSet

    “DOM 引用造成内存泄露”这一点我们可以使用WeakMap或者WeakSet存储DOM节点,DOM被移除掉WeakMap或者WeakSet内部的DOM引用会被自动回收清除 https://jueji ...

  6. spring boot jpa 复杂查询 动态查询 连接and和or 模糊查询 分页查询

    最近项目中用到了jpa,刚接触的时候有些激动,以前的到层忽然不用写sql不用去自己实现了,只是取个方法名就实现了,太惊艳了,惊为天人,但是慢慢的就发现不是这么回事了,在动态查询的时候,不知道怎么操作了 ...

  7. ubuntu循环登录

    ubuntu12.04管理员账户登录不了桌面,只能客人会话登录 登录管理员账户时,输入密码后,一直在登录界面循环 费了好大劲啊,一上午的时间,终于搞定了,哈哈哈 ctrl+alt+f1 ,切换到tty ...

  8. Docker for YApi--一键部署YApi

    获取YApi镜像$ docker pull mrjin/yapi:latest 注意:本仓库目前只支持安装,暂不支持升级,请知晓.如需升级请备份mongoDB内的数据. docker-compose ...

  9. spring boot properties文件与yaml文件的区别

    编写是没有提示的话在pom中添加依赖,如下: <!-- 配置文件处理器 编写配置时会有提示 --> <dependency> <groupId>org.spring ...

  10. Kindle阅读产品体验报告-随时随地畅享阅读

    产品入门-第一份产品体验报告Kindle阅读-随时随地畅享阅读时间:2018/11/18-11/22   Kindle阅读 一.产品概括 (1)体验环境 机型:荣耀8 系统:EMUI 8.0(Andr ...