javascript运算符整理

简介: 原文:javascript运算符整理说起运算符,基本上各类编程语言中都会涉及,使用方法大同小异。今天在这里以javascript做简单的整理。   总得来说运算符还是比较的多,大致可以分为以下几种类型: 一元运算符 位运算符 布尔运算符 乘性运算符 加性运算符 关系运算符 等性...
原文: 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的值是什么呢?

 

大家接触比较少的主要是位运算符,其实位运算符在权限处理特别的方便。

 

目录
相关文章
|
2月前
|
JavaScript 前端开发 开发者
混淆赋值运算符(=)和相等比较运算符(==, ===)(js的问题)
混淆赋值运算符(=)和相等比较运算符(==, ===)(js的问题)
21 0
|
2月前
|
存储 JavaScript 前端开发
【JavaScript技术专栏】JavaScript基础入门:变量、数据类型与运算符
【4月更文挑战第30天】本文介绍了JavaScript的基础知识,包括变量(var、let、const)、数据类型(Number、String、Boolean、Undefined、Null及Object、Array)和运算符(算术、赋值、比较、逻辑)。通过实例展示了如何声明变量、操作数据类型以及使用运算符执行数学和逻辑运算。了解这些基础知识对初学者至关重要,是进阶学习JavaScript的关键。
|
15天前
|
JavaScript 前端开发 网络架构
JavaScript编码之路【对象的增强、ES6新特性之函数的默认值设置 、rest参数 (剩余参数)、拓展运算符、对象与数组的解构赋值】
JavaScript编码之路【对象的增强、ES6新特性之函数的默认值设置 、rest参数 (剩余参数)、拓展运算符、对象与数组的解构赋值】
20 1
|
29天前
|
JavaScript 前端开发 开发者
JavaScript进阶-解构赋值与展开运算符
【6月更文挑战第19天】ES6的解构赋值与展开运算符增强了JS开发效率。解构允许直接从数组或对象提取值,简化数据提取,而展开运算符则用于合并数组和对象或作为函数参数。解构时注意设置默认值以处理不存在的属性,避免过度嵌套。展开运算符需区分数组与对象使用,勿混淆于剩余参数。通过示例展示了这两种操作在数组和对象中的应用,提升代码可读性与简洁度。
|
13天前
|
JavaScript
js【详解】typeof 运算符
js【详解】typeof 运算符
9 0
|
1月前
|
JavaScript 前端开发
JavaScript基础-运算符与条件语句
【6月更文挑战第11天】本文探讨了JavaScript中的运算符和条件语句,包括算术、比较、逻辑、赋值及三元运算符。强调了使用严格等于`===`避免类型转换错误,理解逻辑运算符短路特性和优化条件结构以提高代码可读性。通过示例展示了正确使用这些概念,以提升代码质量和维护性。
|
14天前
|
JavaScript 前端开发 数据安全/隐私保护
|
26天前
|
JavaScript 前端开发
JS常见的运算符有哪些?
JS常见的运算符有哪些?
11 0
|
2月前
|
JavaScript 前端开发
JS中运算符的算术、赋值、+、比较(不同类型之间比较)、逻辑
JS中运算符的算术、赋值、+、比较(不同类型之间比较)、逻辑
20 1
|
2月前
|
JavaScript 前端开发
js的运算符
js的运算符
30 2