详解js运算符单竖杠“|”与“||”的用法和作用介绍


Posted in Javascript onNovember 04, 2016

在js开发应用中我们通常会碰到“|”与“||”了,那么在运算中“|”与“||”是什么意思呢?

在js整数操作的时候,相当于去除小数点,parseInt。在正数的时候相当于Math.floor(),负数的时候相当于Math.ceil() 注:

1. Math.ceil()用作向上取整。
2. Math.floor()用作向下取整。
3. Math.round() 我们数学中常用到的四舍五入取整。

console.log(0.6|0)//0
console.log(1.1|0)//1
console.log(3.65555|0)//3
console.log(5.99999|0)//5
console.log(-7.777|0)//-7

单竖杠的运算规则

看了上面的例子,大体知道单竖杠可以进行取整运算,就是只保留正数部分,小数部分通过拿掉,但是“|0”,又是如何进行运算的呢,为什么能“|0”能达到取整的目的呢?单竖杠不是0有会是多少呢?

带着这些问题,我们看下面例子:

console.log(3|4); //7
console.log(4|4);//4
console.log(8|3);//11
console.log(5.3|4.1);//5
console.log(9|3455);//3455

这里面提到了单竖杠“|”但是没有javascript的。

好吧,我在这里公布答案吧。其实单竖杠“|”就是转换为2进制之后相加得到的结果。例如我们拿简单的举例:

3|4

转换为二进制之后011|100  相加得到111=7

4|4

转换为二进制之后100 |100  相加得到100=4

8|3

转换为二进制之后1000 |011  相加得到1011=11

以此类推,我在这里就不一一列举了,单竖杠“|”运算就是转换为2进制之后相加得到的结果!

JS 双竖线运算符

1、JS双竖线运算符:是或比较.如null||'1',返回'1';'2'||'1',返回'2'.即或运算符中,第一个为真,后面的就不用计算了.所以得'2'。

2、js 中 使用双竖线运算符"||",返回第一个有效值

var objOne = undefined || 1 || null || new Date(); 
var objTwo = new Date(); 
var objThree = objOne || objTwo; 
alert(objThree.toString()); //out put "1"

总结

性能上的比较

逻辑运算符&& || 中,如果&&的第一个运算数是false,就不再考虑第二个运算数,直接返回false;如果||的第一个运算数是true,也不再考虑第二个运算数,直接返回true。而&和|运算符却不是这样的,它们总是要比较两个运算数才得出结果,因而性能上&&和||会比&和|好。

功能用法

&&和||只能进行逻辑运算,而&和|除了可以进行"逻辑运算"外,还可以进行位运算

位运算

&和|本是位运算符,之所以可以进行"逻辑运算",是由于JS是无类型的语言、各数据类型可以自由转换这一特性决定的,当用&和|进行"逻辑运算"时,实际上true被转换成1,false被转换成0,再进行逐位运算:

document.write(true & false); //JS,结果为0

上面这句,实例等同于逻辑运算被转化成下面的位运算,并执行:

document.write(1 & 0); //JS,结果为0

也正是由于&和|是逐位运算符,才出现了第一点中所说的,它们总是要比较两个运算数才得出结果,才导致性能会比&&和||低一些。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
怎么用javascript进行拖拽
Jul 20 Javascript
简短几句 通俗解释javascript的闭包
Jan 17 Javascript
JS实现的一个简单的Autocomplete自动完成例子
Apr 16 Javascript
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
Feb 03 Javascript
JavaScript检查数字是否为整数或浮点数的方法
Jun 09 Javascript
JS实现的自定义网页拖动类
Nov 06 Javascript
基于JavaScript实现快速转换文本语言(繁体中文和简体中文)
Mar 07 Javascript
jQuery实现拖拽可编辑模块功能代码
Jan 12 Javascript
JavaScript如何对图片进行黑白化
Apr 10 Javascript
JavaScript函数IIFE使用详解
Oct 21 Javascript
JS判断数组是否包含某元素实现方法汇总
Jun 24 Javascript
JavaScript中交换值的10种方法总结
Aug 18 Javascript
使用Ajax与服务器(JSON)通信实例
Nov 04 #Javascript
AngularJS过滤器filter用法实例分析
Nov 04 #Javascript
URL的参数中有加号传值变为空格的问题(URL特殊字符)
Nov 04 #Javascript
Angular页面间切换及传值的4种方法
Nov 04 #Javascript
AngularJS实现根据变量改变动态加载模板的方法
Nov 04 #Javascript
RGB和YUV 多媒体编程基础详细介绍
Nov 04 #Javascript
javascript设置文本框光标的方法实例小结
Nov 04 #Javascript
You might like
模仿OSO的论坛(四)
2006/10/09 PHP
PHP向浏览器输出内容的4个函数总结
2014/11/17 PHP
CodeIgniter开发实现支付宝接口调用的方法示例
2016/11/14 PHP
Laravel实现短信注册的示例代码
2018/05/29 PHP
PHP生成二维码与识别二维码的方法详解【附源码下载】
2019/03/07 PHP
jquery获取焦点和失去焦点事件代码
2013/04/21 Javascript
使用Jquery实现点击文字后变成文本框且可修改
2013/09/21 Javascript
js调用css属性写法
2013/09/21 Javascript
浅析jQuery1.8的几个小变化
2013/12/10 Javascript
JS实现同时搜索百度和必应的方法
2015/01/27 Javascript
有关jquery与DOM节点操作方法和属性记录
2016/04/15 Javascript
JavaScript手机振动API
2016/06/11 Javascript
浅析Node.js实现HTTP文件下载
2016/08/05 Javascript
jquery弹出框插件jquery.ui.dialog用法分析
2016/08/20 Javascript
jQuery读取本地的json文件(实例讲解)
2017/10/31 jQuery
在 Angular中 使用 Lodash 的方法
2018/02/11 Javascript
vue项目打包之后背景样式丢失的解决方案
2019/01/17 Javascript
vue+axios全局添加请求头和参数操作
2020/07/24 Javascript
vant中的toast层级改变操作
2020/11/04 Javascript
python爬虫入门教程之糗百图片爬虫代码分享
2014/09/02 Python
Python求两个文本文件以行为单位的交集、并集与差集的方法
2015/06/17 Python
python魔法方法-自定义序列详解
2016/07/21 Python
在python中实现对list求和及求积
2018/11/14 Python
python七夕浪漫表白源码
2019/04/05 Python
python使用正则表达式(Regular Expression)方法超详细
2019/12/30 Python
pytorch中的自定义反向传播,求导实例
2020/01/06 Python
Pytorch实现LSTM和GRU示例
2020/01/14 Python
python3利用Axes3D库画3D模型图
2020/03/25 Python
python logging模块的使用
2020/09/07 Python
在数据文件自动增长时,自动增长是否会阻塞对文件的更新
2014/05/01 面试题
总经理职责范文
2013/11/08 职场文书
光盘行动倡议书
2014/02/02 职场文书
绿色家庭事迹材料
2014/05/01 职场文书
2014年医院十一国庆节活动方案
2014/09/15 职场文书
让生命充满爱观后感
2015/06/08 职场文书
传单、海报早OUT了,另类传单营销方案送给你!
2019/07/15 职场文书