【js运算符——常见的运算符】
本篇主要分享js中常见的运算符以及使用技巧
文章目录
- 本篇主要分享js中常见的运算符以及使用技巧
- 算数运算符
- `+` 规则:
- `-` 规则:
- `*` 规则:
- `/` 规则:
- `%` 规则:
- `**` 规则:
- `++` 规则
- `--` 规则
- 赋值运算符
- 比较运算符
- 比较规则
- 逻辑运算符
- `&&`规则
- `||`规则
- `!`规则
- 条件运算符
算数运算符
运算符 | 名称及含义 | 使用形式 | 说明 |
---|---|---|---|
+
|
加 |
操作数 + 操作数
|
单 / 双目运算符 |
-
|
减 |
操作数 - 操作数
|
单 / 双目运算符 |
*
|
乘 |
操作数 * 操作数
|
双目运算符 |
/
|
除 |
操作数 / 操作数
|
双目运算符 |
%
|
取余 |
操作数 % 操作数
|
双目运算符 |
**
|
幂运算 |
操作数 ** 幂
|
单目运算符 |
++
|
幂运算 |
++ 操作数 / 操作数++
|
单目运算符 |
--
|
幂运算 |
-- 操作数 / 操作数--
|
单目运算符 |
+
规则:
双目运算符
Infinity + Infinity = Infinity
(-Infinity) + (-Infinity) = -Infinity
(-Infinity) + Infinity = NaN
Infinity + null = Infinity
-Infinity + null = -Infinity
0 + 0 = 0
(-0) + (-0) = -0
(-0) + 0 = 0
0 + (-0) = 0
- 如果是两个字符串,则将字符串进行拼接
- 如果是一个字符串,则将非字符串【隐式转换成字符串在进行拼接】
- 如果两个都不是字符串类型,则将进行数值类型的相加【不是数值类型的要隐式转换成数值类型】
代码如下(示例):
var a = '123' + '456'; // '123456'
var b = 123 + '456'; // '123456'
var c = 123 + 456; // 579
var d = 123 + {}; // '123[object Object]'
var e = 123 + []; // '123'
var f = 123 + NaN; // NaN
var g = 123 + true; // 124
var h = 123 + undefined; // NaN
var i = 123 + null; // 123
var j = 123 + false; // 123
单目运算符
- 与
Number()
方法相同,将其他类型的对象转换为数值类型。
代码如下(示例):
var a = '1';
var b = '2';
console.log(a + b); // '12'
console.log(+a + +b); // '3'
先将字符串转换为数值类型之后再相加,因为单目运算符的优先级比双目运算符的优先级更高。
-
规则:
双目运算符
Infinity - Infinity = NaN
(-Infinity) - (-Infinity) = NaN
Infinity - (-Infinity) = Infinity
Infinity - null = Infinity
-Infinity - null = -Infinity
0 - 0 = 0
(-0) - (-0) = 0
0 - (-0) = 0
-0 - 0 = -0
- 与 NaN 相关的减法运算结果都为 NaN
- 如果是一个对象类型,则先对对象进行隐式转换,在根据前面的规则进行减法运算
- 如果是一个非数值类型,则先在后台调用
Number()
方法,将其转换为数值类型,再根据前面的规则进行减法运算
代码如下(示例):
var a = '1' - '2'; // -1
var b = 1 - '2'; // -1
var c = 1 - 2; // -1
var d = 1 - {}; // NaN
var e = 1 - []; // 1
var f = 1 - NaN; // NaN
var g = 1 - true; // 0
var h = 1 - undefined; // NaN
var i = 1 - null; // 1
var j = 1 - false; // 1
单目运算符
- 负号运算符
- 与
Number()
方法相同,将其他类型的对象转换为数值类型。
代码如下(示例):
var a = '1';
var b = '2';
console.log(a - b); // -1
console.log(-a - -b); // 1
先将字符串转换为负数数值类型之后再相减,因为单目运算符的优先级比双目运算符的优先级更高。
*
规则:
双目运算符
Infinity * 0 = NaN
Infinity * null = NaN
Infinity * undefined = NaN
Infinity * Infinityll = Infinity
(-Infinity) * (-Infinity) = Infinity
(-Infinity) * Infinity = -Infinity
- 如果操作的数值超过数值的表示范围,结果为
Infinity
或-Infinity
- 如果操作数中有一个是
NaN
,那么结果一定是NaN
- 如果操作数中有一个是
undefined
,那么结果一定是NaN
- 如果是一个对象数据类型,则先将对象进行隐式转换,在根据前面的规则进行乘法运算
- 如果是一个非数值类型,则先在后台调用
Number()
方法,将其转换为数值类型,再根据前面的规则进行乘法运算
代码如下(示例):
var a = '1' * '2'; // 2
var b = 1 * '2'; // 2
var c = 1 * 2; // 2
var d = 1 * {}; // NaN
var e = 1 * []; // 0
var f = 1 * NaN; // NaN
var g = 1 * true; // 1
var h = 1 * undefined; // NaN
var i = 1 * null; // 0
var j = 1 * false; // 0
/
规则:
双目运算符
Infinity / 0 = Infinity
Infinity / null = Infinity
Infinity / undefined = NaN
Infinity / Infinity = NaN
- 如果操作的数值超过数值的表示范围,结果为
Infinity
或-Infinity
0
不可以作为除数,但是可以作为被除数;0
作为除数结果一定是Infinity
- 如果操作数中有一个是
NaN
,那么结果一定是NaN
- 如果操作数中有一个是
undefined
,那么结果一定是NaN
- 如果是一个对象数据类型,则先将对象进行隐式转换,在根据前面的规则进行除法运算
- 如果是一个非数值类型,则先在后台调用
Number()
方法,将其转换为数值类型,再根据前面的规则进行除法运算
代码如下(示例):
var a = '1' / '2'; // 0.5
var b = 1 / '2'; // 0.5
var c = 1 / 2; // 0.5
var d = 1 / {}; // NaN
var e = 1 / []; // Infinity
var f = 1 / NaN; // NaN
var g = 1 / true; // 1
var h = 1 / undefined; // NaN
var i = 1 / null; // Infinity
var j = 1 / false; // Infinity// 可以用 js 计算出小数,但是不建议使用小数去直接计算【因为不精确】
%
规则:
双目运算符
- 如果操作数都是数值,执行常规的除法计算,返回余数
Infinity % 任何值 = NaN
任何值 % 0 的结果都是 NaN
【包括隐式转换后结果是 0 的数据类型】NaN 无论是做被除数还是除数结果都是 NaN
【包括隐式转换后结果是 NaN 的数据类型】有限大的数 % Infinity = 有限大的数
0 %
除0、NaN
之外的任何值结果都是0
【包括隐式转换后结果是 0、NaN的数据类型】- 如果是一个对象数据类型,则先将对象进行隐式转换,在根据前面的规则进行取余运算
- 如果是一个非数值类型,则先在后台调用
Number()
方法,将其转换为数值类型,再根据前面的规则进行取余运算- 取余运算结果的正负号取决于被模数(被除数 | %左边的数)的符号。
代码如下(示例):
var a = Infinity % 10; // NaN
var b = Infinity % '10'; // NaN
var c = Infinity % 'true; // NaN
// --------------------
var a = 10 % 0; // NaN
var b = 10 % ''; // NaN
var c = 10 % false; // NaN
var d = 10 % null; // NaN
var e = 10 % []; // NaN
// --------------------
var a = NaN % 10; // NaN
var a = 10 % NaN; // NaN
var b = undefined % 10; // NaN
var b = 10 % undefined; // NaN
var c = {} % 10; // NaN
var c = 10 % {}; // NaN
// ----------------------
var a = 0 % Infinity; // 0
var b = '' % Infinity; // 0
var c = false % Infinity; // 0
var d = null % Infinity; // 0
var e = [] % Infinity; // 0
// -----------------------
var a = 0 % 1; // 0
var b = '' % '1'; // 0
var c = false % true; // 0
var d = null % ['111']; // 0
var e = [] % ['111']; // 0
扩展: 取模去比自己本身大的数,结果就是自己本身。
- 例:
var a = 2 % 4;
结果就是 2
var a = 3 % 6;
结果就是 3
var a = 10 % 20;
结果就是 10
var a = 100 % 101;
结果就是 101
扩展: 取模去比自己本身小的数,并且结果不能被整除。
- 例: 一个数
12345
取余 10, 结果就是 5
取余 100, 结果就是 45
取余 1000, 结果就是 345
…
依次类推
扩展:如果
a, b
除以c
的余数相同,那么a
与b
的差能被c
整除。
也就是说:如果两个数除以一个相同的数,且余数相同,那么这两个数的差能被相同的数整除
- 例如
17 % 3 = 2
11 % 3 = 2
17 - 11 = 6
6 % 3 = 0
**
规则:
单目运算符
作用:进行幂运算
语法:操作数 **幂
- 如果操作数都是数值,执行常规的幂计算,返回幂运算的结果
Infinity **Infinity = Infinity
任何数 **0 的结果都是 1
【计算机领域】NaN **非0的任何数的结果都是 NaN
- 如果是一个对象数据类型,则先将对象进行隐式转换,在根据前面的规则进行幂运算
- 如果是一个非数值类型,则先在后台调用
Number()
方法,将其转换为数值类型,再根据前面的规则进行幂运算
代码如下(示例):
console.log(2 **3); // 8
console.log(2 **4); // 16
console.log(8 **(1/3)); // 2
console.log(16 **(1/4)); // 2
console.log(Infinity **10); // Infinity
console.log(Infinity **Infinity); // Infinity
console.log(Infinity **0); // 1
console.log(10 **0); // 1
console.log(0 **0); // 1
console.log(NaN **0); // 1
console.log(NaN **10); // NaN
++
规则
单目运算符
作用:进行+1 运算
语法:++操作数
、操作数++
- 应用于非数值类型的时候,先将其转换为数值类型,在执行
++
操作- 应用于对象、先将对象进行隐式转换,在根据前面的规则进行
++
运算区别:参与运算的时候
++操作数
:先把变量本身的值进行改变+1
,然后用改变的值参与运算操作数++
:先把变量本身的值拿来参与运算,然后再把变量的值改变+1
代码如下(示例):
console.log(a=1, a++); // 1, 1
console.log(a=1, ++a); // 1, 2var x = 1;
var y = 2;
y += 2 + ++x + x * 2 + ++x + x * 3;
// 2 + 2 + 4 + 3 + 9 + 2 = 22
console.log(x, y); // 3, 22y += 2 + x++ + x * 2 + x++ + x * 3;
// 2 + 1 + 4 + 2 + 9 + 2 = 20
console.log(x, y); // 3, 20
--
规则
单目运算符
作用:进行-1 运算
语法:--操作数
、操作数--
- 应用于非数值类型的时候,先将其转换为数值类型,在执行
--
操作- 应用于对象、先将对象进行隐式转换,在根据前面的规则进行
--
运算区别:参与运算的时候
--操作数
:先把变量本身的值进行改变-1
,然后用改变的值参与运算操作数--
:先把变量本身的值拿来参与运算,然后再把变量的值改变-1
代码如下(示例):
console.log(a=1, a--); // 1, 1
console.log(a=1, --a); // 1, 0var x = 1;
var y = 2;
y += 2 + --x + x * 2 + --x + x * 3;
// 2 + 0 + 0 + -1 + (-3) + 2 = 0
console.log(x, y); // -1, 0y += 2 + x-- + x * 2 + x-- + x * 3;
// 2 + 1 + 0 + 0 + (-3) + 2 = 2
console.log(x, y); // -1, 2
赋值运算符
运算符 | 名称及含义 | 使用形式 | 说明 |
---|---|---|---|
=
|
赋值 |
操作数 = 操作数
|
双目运算符 |
+=
|
加等赋值 |
操作数 += 操作数
|
双目运算符 |
-+
|
减等赋值 |
操作数 -= 操作数
|
双目运算符 |
*=
|
乘等赋值 |
操作数 *= 操作数
|
双目运算符 |
/=
|
除等赋值 |
操作数 /= 操作数
|
双目运算符 |
%=
|
模等赋值 |
操作数 %= 操作数
|
双目运算符 |
代码如下(示例):
var a, b;
a = 1; // 1
b = a; // 1a += b; // 2
a -= b; // 1a *= b; // 1
a /= b; // 1a %= b; // 0
比较运算符
运算符 | 名称及含义 | 使用形式 | 说明 |
---|---|---|---|
==
|
等于 |
操作数 == 操作数
|
双目运算符 |
===
|
完全等于 |
操作数 === 操作数
|
双目运算符 |
!=
|
不等于 |
操作数 != 操作数
|
双目运算符 |
!==
|
完全不等于 |
操作数 !== 操作数
|
双目运算符 |
>
|
大于 |
操作数 > 操作数
|
双目运算符 |
<
|
小于 |
操作数 < 操作数
|
双目运算符 |
>=
|
大于等于 |
操作数 >= 操作数
|
双目运算符 |
<=
|
小于等于 |
操作数 <= 操作数
|
双目运算符 |
比较规则
- 如果两端的类型不同时,会隐式转换为对应的
字符
或者数值
或者布尔类型
。NaN
与任何数比较时都是false
- 如果比较两端类型相同时,不会隐式转换,而是直接比较。
- 两端都是字符串,转换为 Unicode编码进行比较。
A < ... < Z < a < ... < z
。- 复杂数据类型, 比较的是内存地址
==
会隐式转换为相同的类型后比较,也可以理解成是值的比较,忽略数据类型。===
不会转换为相同的类型进行比较,也可以理解成是 值的比较,数据类型的比较。- 特殊:
null == undefined
表示比较的都是空值。注意:所有比较运算符的最终结果一定是 布尔值
代码如下(示例):
console.log(10 == '10'); // true
console.log(10 == [10]); // true
console.log(1 == true); // true
console.log(0 == false); // trueconsole.log(10 === '10'); // false
console.log(10 === [10]); // false
console.log(1 === true); // false
console.log(0 === false); // falseconsole.log('aa' < 'ab'); // true
console.log({} == {}); // false
console.log(null == undefined); // true
console.log(null === undefined);// false
逻辑运算符
运算符 | 名称及含义 | 使用形式 | 说明 |
---|---|---|---|
&&
|
与 |
操作数 && 操作数
|
双目运算符 |
||
|
或 |
操作数 || 操作数
|
双目运算符 |
!
|
非 |
操作数 ! 操作数
|
双目运算符 |
&&
规则
- 只有符号两边的内容全部为
true
的时候,最终结果才是true
。- 只要有任何一边的结果是
false
,那么最终结果就是false
。- 当符号左边的结果为
true
的时候,会执行符号右边的代码。- 当符号左边的结果为
false
的时候,会执行符号左边的代码。
代码如下(示例):
console.log(true && true); // true
console.log(true && false); // false
console.log(false && true); // false
console.log(false && false); // false
||
规则
- 只要符号任意一边内容为
true
的时候,那么最终结果就是true
。- 只有两边都是
false
的时候,那么最终结果才是false
。- 当符号左边的结果为
false
的时候,会执行符号右边的代码。- 当符号左边的结果为
true
的时候,会执行符号左边的代码。
代码如下(示例):
console.log(true || true); // true
console.log(true || false); // true
console.log(false || true); // true
console.log(false || false); // false
!
规则
- 如果本身是
true
,那么结果就是false
。- 如果本身是
false
,那么结果就是true
。!!
双取反可以实现转布尔。
代码如下(示例):
console.log(!true); // false
console.log(!false); // true
console.log(!!0); // false
console.log(!!1); // true
条件运算符
语法:
判断条件 ? 条件为真时的操作 : 条件为假时的操作
代码如下(示例):
let num = 2;
num > 1 ? console.log("对") : console.log("错"); // "对"
【js运算符——常见的运算符】相关推荐
- C#中不常见的运算符功能汇总
介绍 C#有很多运算符,可分为以下几种:算数运算符,比较运算符,条件运算符,赋值运算符,逻辑运算符.下面对不常见的运算符进行汇总. 概念 条件运算符 ?(可空类型修饰符) 引用类型可以使用空引用表示一 ...
- 前端:JS/18/JS运算符(算术运算符,赋值运算符,字符串运算符,比较运算符,逻辑运算符,三元运算符),window.prompt()
JS运算符 要进行各种各样的运算,就要使用不同的运算符号. 1,算术运算符:+ - * / % ++ -- + :加法运算符 - :减法运算符 * :乘法运算符 / :除法运算符 % :取余运算符,返 ...
- JS中的逗号运算符(,)
逗号运算符 逗号运算符是二元运算符,它能够先执行运算符左侧的操作数,然后再执行右侧的操作数,最后返回右侧操作数的值. 逗号表达式: 一般形式:表达式1,表达式2,表达式3,......表达式n 求解过 ...
- mysql常见的运算符及使用
mysql中有4类运算符,它们是: 算术运算符 比较运算符 逻辑运算符 位操作运算符 算术操作符 算术操作符是SQL中最基本的操作运算符,主要有一下几种运算符: +(加). -(减). *(乘). / ...
- 位运算符取反_Java常见的运算符——位运算
位运算符 <<左移 先说左移运算符,它的符号表示是<< 举个例子,先定义一个int类型的数,十进制的value = 733183670,转换成二进制在计算机中的表示如下(int ...
- 在位运算中_Java常见的运算符(下)
位运算符 < 先说左移运算符,它的符号表示是<< 举个例子,先定义一个int类型的数,十进制的value = 733183670,转换成二进制在计算机中的表示如下(int类型占4个字 ...
- C语言常见语法——运算符和表达式
自增,自减运算符使用注意及案例 1.++i , --i (在使用 i 之前,先使 i 的值加(减) 1) 2.i++ , i-- (在使用 i 之后,先使 i 的值加(减) 1) 3.int i=3; ...
- JS基础入门 Javascript运算符
Javascript运算符 1.运算符(操作符) 1.1运算符的分类 运算符(operator)也被称为操作符,是用于实现赋值.比较和执行算数运算等功能的符号 Javascript中常用的运算符有: ...
- .php中js写法,js函数常见的写法以及调用方法
写在前面:本文详细的介绍了5中js函数常见的写法以及调用的方法,平时看别人代码的时候总是看到各种不同风格的js函数的写法.不明不白的,找了点资料,做了个总结,需要的小伙伴可以看看,做个参考. 1.常规 ...
最新文章
- 用c实现跨平台异常捕获机制
- c++类的构造函数详解
- centos6 安装 mantisbt-1.2.8 —— (2)【linux】VMware安装CentOS 6.4
- ubuntu通过pem连接服务器
- Django + Nginx + Uwsgi + Celery + Rabbitmq 做一个高速响的应网站架构
- Postgresql 物理热备份 -- 快照备份
- matlab中服从高斯分布的矩阵_推荐基础算法之矩阵分解PMF
- MMDetection-配置文件
- 2021年北京理工大学ACM CLUB清明节组队训练赛
- Linux之 find之 ctime,atime,mtime
- 计算机中常用的声音编辑工具有哪些,电脑常用音频剪辑软件
- 五种常用的绩效考核工具对比
- php段子老板,程序员段子 那些关于程序员的段子
- SQL | DB2和MySQL分条件求和
- 数学定理(1)——正态分布
- 第三天.......
- MAVEN踩坑 Could not find artifact...
- 深度学习—BP神经网络
- POJ3984迷宫问题
- 全球变暖java_Java实现第九届蓝桥杯全球变暖