当前位置:网站首页>理解js运算符
理解js运算符
2022-07-31 05:11:00 【杂乱无章的我】
目录
运算符也叫操作符,通过运算符可以对一个或多个值进行运算,并且获取运算结果。比如:typeof就是一种运算符,可以获得一个值的类型。
算数运算符
算术运算符:
当对非数字类型值进行运算时,先将其转换为数字类型进行计算。
且任何值与NaN做运算都会得出NaN。
- +
+可以对两个值进行加法运算,并将结果返回。如:a=1+2;
如果对两个字符串进行加法运算,则会进行拼串。如:a="abc"+"d";a="abcd"
且任何的值和字符串做加法运算,都会先转换为字符串,然后再进行运算。
这个转换使用的是调用函数String()对其余类型的数值进行类型转换。
- -
-可以对两个值进行减法运算,并将结果返回。如:a=2-1;
- *
*可以对两个值进行乘法运算,并将结果返回。如: a=2*1;
- /
/可以对两个值进行除法运算,并将结果返回。如:a=2/1;
任何值做- * /运算时都会转换为Number
我们可以利用这一特点做隐式的类型转换
可以通过为一个值-0 *1 /1来将其转换为Number,原理和Number()函数一样。
- %
%可以对一个值进行取模运算(取余数)。如:a=6%2;
一元运算符
一元运算符:
- 一元运算符,只需要一个操作数
+ 正号
- 正号不会对数字产生任何影响
- 负号
- 负号可以对数字进行负号的取反
- 对于非Number类型数据,
它会先将其转换为Number,然后再运算。可以对一个其他数据类型使用+,将其转换为number
它的原理和Number()函数一样。
自增与自减
自增与自减:
- 自增 ++
- 通过自增可以使变量在自身的基础上增加1,对于一个变量自增后,原变量的值会立刻自加1。
- 自增分为两种:后加加(++)和前加加(++)。这两种方法均能是变量的值加一。
不同的区别是 ++a 与 a++ 的值不同
a++的值等于原变量的值 (自增前的值)a++ = a
++a的值等于原变量的新值 (自增后的值) b = a+1;++a = b;
- 自减 --
- 通过自减可以使变量在自身的基础上减少1,对于一个变量自减后,原变量的值会立刻自减1。
- 自减分为两种:后减减(--)和前减减(--)。这两种方法均能是变量的值减一。
不同的区别是 --a 与 a-- 的值不同
a--的值等于原变量的值 (自减前的值)a-- = a
--a的值等于原变量的新值 (自减后的值) b = a-1;--a = b;
逻辑运算符
逻辑运算符:
js中为我们提供了三种逻辑运算符:
- ! 非
!可以用来对一个值进行逻辑非运算
所谓非运算就是指对一个布尔值进行取反操作,
true变false,false变为true。如a=false,!a=true
如果用非对一个值进行两次取反,它不会变化。如果对一个非布尔值进行运算,
则会将其转换为布尔值,然后再取反。我们可利用该特点将非布尔值转换为布尔值。
- && 与
&&可以对符号两侧值进行与逻辑运算并且返回结果。
两个值中只要有一个值为false就返回false,只有两个值都为true时,才会返回true。
js中的与是“短路的与”,当第一个值是false时,则不会看第二个值。
- || 或
||可以对符号两侧的值进行或逻辑运算并返回结果
两个值中只要有一个为true就返回true,只有两个值都为false时,才会返回false。
js中的“或”属于短路的或
如果第一个值为true,则不会在查看第二个值。
&& || 非布尔值的情况
- 对于非布尔值的数据进行与或运算时,会先将其转换为布尔值,然后再运算,并且返回原值
与运算:
- 如果第一个值为true,则必然返回第二个值
- 如果第一个值为false,则直接返回第一个值
或运算:
- 如果第一个值为true,则直接返回第一个值
- 如果第一个值为false,则直接返回第二个值
赋值运算符
赋值运算符:
=
可以将符号右侧的值赋值给符号左侧的变量。如a=1;a="字符串";a=true;
+=
a += b 等价于 a = a + b;
-=
a -= b 等价于 a = a - b;
*=
a *= b 等价于 a = a * b;
/=
a /= b 等价于 a = a / b;
%=
a %= b 等价于 a = a % b;
两侧代码实现效果一样,在实际使用中自行选择。
关系运算符
关系运算符:
通过关系运算符可以比较两个值之间的大小关系,如果关系成立返回true,否则返回false。
- > 大于号
判断符号左侧的值是否大于右侧的,如果成立,返回true。否则返回false。
- < 小于号
判断符号左侧的值是否小于右侧的,如果成立,返回true。否则返回false。
- >= 大于等于号
判断符号左侧的值是否大于等于右侧的,如果成立,返回true。否则返回false。
- <= 小于等于号
判断符号左侧的值是否小于等于右侧的,如果成立,返回true。否则返回false。
非数值的情况
- 对于非数值进行比较时,会将其先转换为数字在进行比较。
- 任何值与NaN做任何比较都是false
- 如果两侧的值都是字符串时,不会将其转换为数字进行比较,而会分别比较两端字符串的字符编码
比较字符编码时是一位一位进行比较,如果两位数值一样,则比较下一位。
- 比较字符串型的数字时,一定要先进行数据类型转换。
相等运算符
相等运算符:
相等运算符用于比较两个值是否相等,如果相等返回true,否则返回false。
- 使用 == 来做相等运算
- 当使用==来进行相等比较时,如果两个值的类型不同,则会自动进行类型转换。
将其转换为相同的数据类型,在进行数据比较。
- undefined与null值进行数据比较时,会返回true
- NaN不和任何值相等,包括其本身。
!= 不等运算符用于判断两个值是否不等,如果不相等返回true,否则返回false。
- 使用 != 来做不相等运算
- 不相等运算符也会对变量进行自动的类型转换,然后再进行比较。
=== 全等运算符
- 用于判断两个值是否全等,它和相等类似,不同的是它不仅仅判断两个值的数据。
如果两个值的类型不等,直接返回false。如果两个数据内存地址不同,也会返回false。
!== 不全等运算符
- 用于判断两个值是否不全等,与全等判断机制相同。
条件运算符(三元运算符)
条件运算符(三元运算符):
如:“条件表达式?语句1:语句2;”
条件运算符在执行时,首先对条件表达式进行求值。
如果该值为true,则执行语句1,并返回执行结果。如果该值为false,则执行语句2。
如果条件的表达式的求值结果是一个非布尔值,则先会进行数值转换,然后再进行运算。
各运算符的优先级
1 | . 、[] 、new |
2 | () |
3 | ++、-- |
4 | !、~、+(单目)、-(单目)、typeof、void、delete |
5 | %、*、/ |
6 | +(双目)、-(双目) |
7 | <<、>>、>>> |
8 | <、<=、>、>= |
9 | ==、!==、=== |
10 | & |
11 | ^ |
12 | | |
13 | && |
14 | || |
15 | ?: |
16 | =、+=、-=、*=、/=、%=、<<=、>>=、>>>=、&=、^=、|= |
17 | , |
边栏推荐
猜你喜欢
MySql to create data tables
Getting to know regular expressions
Install mysqldb in mac10.14
Take you to understand the MySQL isolation level, what happens when two transactions operate on the same row of data at the same time?
12 【网页布局总结 元素的显示与隐藏】
05 【绑定样式 条件渲染 列表渲染】
10 【高度塌陷与BFC】
vulhub靶场学习日记xxe-lab
On the side of Ali, tell me what are the application scenarios of message middleware you know?
leetcode-每日一题565. 数组嵌套(标记图和并查集)
随机推荐
win11中利用IIS10搭建asp网站
03 【数据代理 事件处理】
数字取证autopsy工具用法
What is GameFi?
Year-end summary - the years are quiet~
The latest MySql installation teaching, very detailed
DeFi Token in the project management
Linux修改MySQL数据库密码
Common JVM interview questions and answers
【JVM加载】---类加载机制
Kubernetes certificate validity period modification
【云原生】微服务Nacos的简单介绍与使用
工件SSMwar exploded 部署工件时出错。请参阅服务器日志了解详细信息
安装Multisim出现 No software will be installed or removed解决方法
元宇宙的前景及四大赛道
(Crypto essential dry goods) Detailed analysis of the current NFT trading markets
为什么redis是单线程还那么快?
gin框架学习-Gin框架和Gorm框架搭建一个简单的API微服务
【Elastic-Job】分布式调度任务概览篇
[swagger close] The production environment closes the swagger method