javascript运算符整理
说起运算符,基本上各类编程语言中都会涉及,使用方法大同小异。今天在这里以javascript做简单的整理。
总得来说运算符还是比较的多,大致可以分为以下几种类型:
- 一元运算符
- 位运算符
- 布尔运算符
- 乘性运算符
- 加性运算符
- 关系运算符
- 等性运算符
- 条件运算符
- 赋值运算符
- 逗号运算符
可以说只要学习过变成语言对这些运算符应该是并不陌生的,只要有逻辑或者是计算都会用到上面的运算符,之前我也是比较零散的使用过,从来没有系统的学习和整理过这些运算符到底怎么使用?之间有什么区别和联系?有什么使用上的技巧?今天,就以上述提到的问题进行学习和解释。
一元运算符
delete运算符,删除之前定义的对象属性或方法的引用,当删除失败的时候,返回false,那什么时候会删除失败呢?第一不能删除声明的变量(变量、函数、函数参数),如:var a = 1;第二不能删除内置对象的方法,如:Math.PI;第三定义的变量属性的configurable值为false的,不能删除。需要注意的是,在IE6-8下,delete window属性会报类型错误。具体的可以了解一下之前写的javascript的delete机制
void运算符,对任何值返回undefine,该运算符常用于避免输出不应该输出的值。我们常见的是<a href=“javascript:void();”>点我</a>这样这个链接就没有效果了,就是因为返回了一个undefine,不执行a标签的默认事件了,相当于执行了return false。
前增量/前减量运算符,指的是变量自身数值上增1或者减1。后增量/后减量运算符,指的也是变量自身数值上增1或者减1。他们的区别在于,如果将这个运算赋值的话是有区别的:
var fnum = 1; var bnum = 1; var forward = ++fnum; //fnum = 2; forward = 2; var back = bnum++; //bnum = 2; back = 1 //减量运算符结果是类似的
一元加法和一元减法运算符,一元加法和减法对数字是一样的,就是数学上的加减运算,但是一元加法在字符串中却有着神奇的效果。涉及到javascript的数据类型转化,有兴趣的同学也可以在此了解一二。
位运算符
学习位运算符之前,需要知道的是位运算符是在数字底层(即表示数字的32个数位)进行操作的。ECMAScript整数分为两种类型:有符号整数(允许正数和负数)和无符号整数(只允许正数)。在ECMAScript中,默认使用有符号整数。这意味着,有31位表示数值,一位表示符号,其中0表示负数,1表示正数。负数也存储为二进制代码,不过采用的是二进制补码的形式。那么二进制补码怎么计算呢?首先求出数字绝对值的二进制码也叫做原码,然后求出该原码的反码,最后将反码加1就是补码了。有趣的是,ECMAScript并不是以二进制补码的形式显示的,而是将数值的绝对值的二进制码前加负号进行显示。
var num1 = 18; var num2 = -18; num1.toString(2); // ‘10010’ num 2.toString(2); // ‘-10010’
了解了这个基础,就可以来学习js中的位运算符了。
位运算符NOT,是由~表示的,它的计算过程是:首先将运算数转成32位数字,然后转化成它的反码,最后把二进制转成浮点数。其实这个过程还是很难转化的,位运算NOT实质上,就是对数值求负然后减1(这里所说的都是按整数位计算)。
位运算AND,是由&表示的,将数值分别换算成二进制,然后按位AND运算,运算规则如下:
第一个数字中的数位 |
第二个数字中的数位 |
结果 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
位运算OR,是由|表示的,将数值分别换成二进制,然后按位OR运算,运算规则如下:
第一个数字中的数位 |
第二个数字中的数位 |
结果 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
位运算XOR,是由^表示的,将数值分别换算成二进制,然后按位XOR运算,运算规则如下:
第一个数字中的数位 |
第二个数字中的数位 |
结果 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
左移运算,是两个小于号(<<)。它把数字中所有数位向左移动指定数量。移动之后,右边补零,然后转换成十进制即可。如:
var num = 2; // 二进制为:’10' var newNum = num << 5; console.log(newNum); // 64 二进制为:’1000000’
有符号右移运算符,由两个大于号(>>)表示。它把数字中所有数位向右移动指定数量,保留符号位。移动之后,左边补零,然后转换成十进制即可。如:
var num = 64; // 二进制为:’1000000’ var newNum = num >> 5; console.log(newNum); //2 二进制为:’10’
无符号右移运算符,由三个大于号(>>>)表示。这个和有符号右移的区别是,无符号需要整体移动,这样一个负数就会变成一个正数。所以在使用的时候需要小心。
布尔运算符
学习之前,需要知道其他数据类型是怎么转换成布尔类型的,如下:
参数类型 |
结果 |
undefine |
false |
null |
false |
boolean |
不转换 |
number |
0是false,NAN是false,其他为true |
string |
空字符串为false,其他为true |
object |
true |
逻辑NOT运算符,使用!表示。是一个求非的过程。
逻辑AND运算符,使用&&表示,两边的表达式只有两个都是true,结果才是true,其他情况都是false。
逻辑OR运算符,使用||表示,两边的表达式只有两个都是false,结果才是false,其他情况都是true。
需要注意的是,如果&&和||不在条件语句中使用的话,他们的运算是从左向右的。如:
1 && 2 //1为true,继续计算,2也为true,所以结果是2 0 && 1//0为false,所以就不会向右计算了,结果就是0 1 || 2 //1为true,所以结果是1 0 || 1 //0为false,继续计算,1为true,所以结果为1
乘性运算符
乘法运算符,用*号表示,数学中的乘法运算。
除法运算符,用/号表示,数学中的除法运算。
取模运算符,用%号表示,数学中的除法运算取整。
加性运算符
正常的加减法计算。
关系运算符
常规的比较方式,数值之间大于、小于、大于等于、小于等于。
比较数字和字符串,如果都是数字的字符串,那就转化成数字然后比较大小,如果一个数值一个字符串或者两个都是字符串,就比较字符代码的前后顺序。
等性运算符
等号和非等号,这个需要运算符两边的表达式应该进行数据类型转换。规则如下:
执行类型转换的规则如下:
如果一个运算数是 Boolean 值,在检查相等性之前,把它转换成数字值。false 转换成 0,true 为 1。
如果一个运算数是字符串,另一个是数字,在检查相等性之前,要尝试把字符串转换成数字。
如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串。
如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字。
在比较时,该运算符还遵守下列规则:
值 null 和 undefined 相等。
在检查相等性时,不能把 null 和 undefined 转换成其他值。
如果某个运算数是 NaN,等号将返回 false,非等号将返回 true。
如果两个运算数都是对象,那么比较的是它们的引用值。如果两个运算数指向同一对象,那么等号返回 true,否则两个运算数不等。
重要提示:即使两个数都是 NaN,等号仍然返回 false,因为根据规则,NaN 不等于 NaN。
全等号和非全等号,这个在运算时,不进行数据类型转换,先判断类型再判断值。
条件运算符
也称为三目运算符,三个表达式,只一个表达式为真时,结果为第二个表达式的值,第一个表达式为假时,结果为第三个表达式的值。
赋值运算符
我们定义变量是最常用,使用=号。另外主要的算数运算符都可以与赋值运算符配合使用。如:*=、+=等等。
逗号运算符
逗号运算符,可以在一条语句中执行多个运算。逗号运算符常用在变量声明中。如:
var a = 1, b = 2, c = 3; // a=1;b=2;c=3 var a = 1,2,3; // a=3 ,最后一个值 var d = (a=1,b=2,c=3); //d的值是什么呢?
大家接触比较少的主要是位运算符,其实位运算符在权限处理特别的方便。
javascript运算符整理的更多相关文章
- JavaScript 精髓整理篇之一(对象篇)postby:http://zhutty.cnblogs.com
废话篇头: 由于工作关系,所以写博文的时间有那么点~~,其实是输入法太懒了,都是输入法的错~~ 这一系列的博客将总结所有关于JavaScript语言的精髓,适合0基础到大师级别人物阅读. <Ja ...
- if判断和switch case 和三元运算符整理
if判断和switch case 和三元运算符整理 例子1:if判断写法: <script type="text/javascript"> var num = 12; ...
- javascript运算符语法概述
× 目录 [1]个数 [2]优先级 [3]结合性[4]类型[5]规则表 前面的话 javascript中的运算符大多由标点符号表示,少数由关键字表示,它们的语法言简意赅,它们的数量却着实不少.运算符始 ...
- JavaScript 运算符
JavaScript 运算符 JavaScript 运算符用于赋值,比较值,执行算术运算等. JavaScript 算术运算符 算术运算符用于执行两个变量或值的运算. 赋值 y = 5, 以下表格将向 ...
- JavaScript运算符
JavaScript运算符 1.算数运算符 设定a = 5. 运算符 描述 例子 结果 + 加 b=a+2 b=7 - 减 b=a-2 b=3 * 乘 b=a*2 b=10 / 除 b=a/2 b=2 ...
- JavaScript运算符有哪些
JavaScript中的运算符有很多,主要分为算术运算符,等同全同运算符,比较运算符,字符串运算符,逻辑运算符,赋值运算符等.这些运算符都有一些属于自己的运算规则,下面就为大家介绍一下JavaScri ...
- javascript收集整理
//特殊字符去掉 function check(obj){ var test=obj.value.match(/[^A-Za-z0-9]/g);//这条语句表示在输入文本中是否包含不符合要求的字符,如 ...
- javascript 运算符优先级
JavaScript 运算符优先级(从高到低) https://github.com/xhlwill/blog/issues/16 今天把js函数转换为python 函数时,发现在js运算符优先级这边 ...
- JavaScript运算符:递增递减运算符前置和后置的区别
从两段代码说起 var num1 = 2; var num2 = 20; var num3 = --num1 + num2; var num4 = num1 + num2; console.log(n ...
随机推荐
- 合并多个excel工作簿
合并多个Excel工作簿,会出现电话号码以科学计数法显示,如果想要以字符串方式处理,要按如下完整代码 public static void mergeWorkBook() throws Excepti ...
- 并发情况下synchronized死锁
存在缺陷的代码: public class DataPropertyIdAndNameRepositoryImpl{ /** 发布标志 */ private volatile boolean publ ...
- 【技术文档】《算法设计与分析导论》R.C.T.Lee等·第7章 动态规划
由于种种原因(看这一章间隔的时间太长,弄不清动态规划.分治.递归是什么关系),导致这章内容看了三遍才基本看懂动态规划是什么.动态规划适合解决可分阶段的组合优化问题,但它又不同于贪心算法,动态规划所解决 ...
- compareTo简介
compareTo()方法是用来比较字符串大小,该方法用来判断一个字符串是大于,等于还是小于另一个字符串.判断字符串大小的依据是根据他们在字典中的顺序决定的 语法 Str1.compareTo(Str ...
- Hacker(23)----破解常见文件密码
Win7中,office文档.压缩文件等都是常见的文件,这些文档含有重要的信息,即使用户为这些文件设置了密码,黑客也会有办法破解. 一.破解office文档密码 破解office文档密码常用工具是Ad ...
- 先装Net Framework 后 装 IIS的处理办法
先装IIS话,后面装Net Framework时候会自动注册 处理aspx和ashx等的处理扩展程序 先装Net Framework 后 装 IIS.扩展程序注册在命令:aspnet_regiis - ...
- ado.net数据库操作(1)
这些都是网上搜索到的,我把他放在自己的博客里,作为笔记 1.1创建数据库连接(sqlserver) <%@ Import Namespace="System.Data" %& ...
- Android学习之Activity之间的数据传递
Activity与Activity之间很多情况下都需要进行数据的传递,下面就用几个简单的例子来看一下. (一).一个Activity启动另一个Activity并将数据传递到这个Activity当中 思 ...
- Java中书写要注意的地方
Java的命名规则:以字母.下划线(_)或$符号开头,其后跟任意数目的字母.数字.下划线和$符号. 注意: 数字不能作为标识符的开头: 除了下划线与$符号以外,其余的符号不能使用: 不能使用关键字作 ...
- WCF入门教程系列五
一.概述 WCF在通信过程中有三种模式:请求与答复.单向.双工通信.以下我们一一介绍. 二.请求与答复模式 描述: 客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务 ...