本篇主要分享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
  1. 如果是两个字符串,则将字符串进行拼接
  2. 如果是一个字符串,则将非字符串【隐式转换成字符串在进行拼接】
  3. 如果两个都不是字符串类型,则将进行数值类型的相加【不是数值类型的要隐式转换成数值类型】

代码如下(示例):

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
  1. 与 NaN 相关的减法运算结果都为 NaN
  2. 如果是一个对象类型,则先对对象进行隐式转换,在根据前面的规则进行减法运算
  3. 如果是一个非数值类型,则先在后台调用 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
  1. 如果操作的数值超过数值的表示范围,结果为 Infinity-Infinity
  2. 如果操作数中有一个是 NaN,那么结果一定是 NaN
  3. 如果操作数中有一个是 undefined,那么结果一定是 NaN
  4. 如果是一个对象数据类型,则先将对象进行隐式转换,在根据前面的规则进行乘法运算
  5. 如果是一个非数值类型,则先在后台调用 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
  1. 如果操作的数值超过数值的表示范围,结果为 Infinity-Infinity
  2. 0 不可以作为除数,但是可以作为被除数; 0 作为除数结果一定是 Infinity
  3. 如果操作数中有一个是 NaN,那么结果一定是 NaN
  4. 如果操作数中有一个是 undefined,那么结果一定是 NaN
  5. 如果是一个对象数据类型,则先将对象进行隐式转换,在根据前面的规则进行除法运算
  6. 如果是一个非数值类型,则先在后台调用 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 计算出小数,但是不建议使用小数去直接计算【因为不精确】

% 规则:

双目运算符

  1. 如果操作数都是数值,执行常规的除法计算,返回余数
  2. Infinity % 任何值 = NaN
  3. 任何值 % 0 的结果都是 NaN【包括隐式转换后结果是 0 的数据类型】
  4. NaN 无论是做被除数还是除数结果都是 NaN 【包括隐式转换后结果是 NaN 的数据类型】
  5. 有限大的数 % Infinity = 有限大的数
  6. 0 %0、NaN 之外的任何值结果都是0【包括隐式转换后结果是 0、NaN的数据类型】
  7. 如果是一个对象数据类型,则先将对象进行隐式转换,在根据前面的规则进行取余运算
  8. 如果是一个非数值类型,则先在后台调用 Number()方法,将其转换为数值类型,再根据前面的规则进行取余运算
  9. 取余运算结果的正负号取决于被模数(被除数 | %左边的数)的符号

代码如下(示例):

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 的余数相同,那么 ab 的差能被 c 整除。
也就是说:如果两个数除以一个相同的数,且余数相同,那么这两个数的差能被相同的数整除

  • 例如
    • 17 % 3 = 2
      11 % 3 = 2
      17 - 11 = 6
      6 % 3 = 0

** 规则:

单目运算符
作用:进行幂运算
语法:操作数 **幂

  1. 如果操作数都是数值,执行常规的幂计算,返回幂运算的结果
  2. Infinity **Infinity = Infinity
  3. 任何数 **0 的结果都是 1【计算机领域】
  4. NaN **非0的任何数的结果都是 NaN
  5. 如果是一个对象数据类型,则先将对象进行隐式转换,在根据前面的规则进行幂运算
  6. 如果是一个非数值类型,则先在后台调用 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. 应用于非数值类型的时候,先将其转换为数值类型,在执行++操作
  2. 应用于对象、先将对象进行隐式转换,在根据前面的规则进行++运算

区别:参与运算的时候

  • ++操作数:先把变量本身的值进行改变 +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. 应用于非数值类型的时候,先将其转换为数值类型,在执行--操作
  2. 应用于对象、先将对象进行隐式转换,在根据前面的规则进行--运算

区别:参与运算的时候

  • --操作数:先把变量本身的值进行改变 -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

比较运算符

运算符 名称及含义 使用形式 说明
== 等于 操作数 == 操作数 双目运算符
=== 完全等于 操作数 === 操作数 双目运算符
!= 不等于 操作数 != 操作数 双目运算符
!== 完全不等于 操作数 !== 操作数 双目运算符
> 大于 操作数 > 操作数 双目运算符
< 小于 操作数 < 操作数 双目运算符
>= 大于等于 操作数 >= 操作数 双目运算符
<= 小于等于 操作数 <= 操作数 双目运算符

比较规则

  1. 如果两端的类型不同时,会隐式转换为对应的字符或者数值或者布尔类型
  2. NaN 与任何数比较时都是 false
  3. 如果比较两端类型相同时,不会隐式转换,而是直接比较。
  4. 两端都是字符串,转换为 Unicode编码进行比较。A < ... < Z < a < ... < z
  5. 复杂数据类型, 比较的是内存地址
  6. == 会隐式转换为相同的类型后比较,也可以理解成是值的比较,忽略数据类型。
  7. ===不会转换为相同的类型进行比较,也可以理解成是 值的比较,数据类型的比较。
  8. 特殊: 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

逻辑运算符

运算符 名称及含义 使用形式 说明
&& 操作数 && 操作数 双目运算符
|| 操作数 || 操作数 双目运算符
! 操作数 ! 操作数 双目运算符

&&规则

  1. 只有符号两边的内容全部为 true 的时候,最终结果才是 true
  2. 只要有任何一边的结果是 false,那么最终结果就是 false
  3. 当符号左边的结果为 true 的时候,会执行符号右边的代码。
  4. 当符号左边的结果为 false 的时候,会执行符号左边的代码。

代码如下(示例):

console.log(true && true);       // true
console.log(true && false);     // false
console.log(false && true);     // false
console.log(false && false);    // false

||规则

  1. 只要符号任意一边内容为 true 的时候,那么最终结果就是 true
  2. 只有两边都是 false的时候,那么最终结果才是 false
  3. 当符号左边的结果为 false 的时候,会执行符号右边的代码。
  4. 当符号左边的结果为 true 的时候,会执行符号左边的代码。

代码如下(示例):

console.log(true || true);       // true
console.log(true || false);     // true
console.log(false || true);     // true
console.log(false || false);    // false

!规则

  1. 如果本身是 true,那么结果就是 false
  2. 如果本身是 false,那么结果就是 true
  3. !! 双取反可以实现转布尔。

代码如下(示例):

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运算符——常见的运算符】相关推荐

  1. C#中不常见的运算符功能汇总

    介绍 C#有很多运算符,可分为以下几种:算数运算符,比较运算符,条件运算符,赋值运算符,逻辑运算符.下面对不常见的运算符进行汇总. 概念 条件运算符 ?(可空类型修饰符) 引用类型可以使用空引用表示一 ...

  2. 前端:JS/18/JS运算符(算术运算符,赋值运算符,字符串运算符,比较运算符,逻辑运算符,三元运算符),window.prompt()

    JS运算符 要进行各种各样的运算,就要使用不同的运算符号. 1,算术运算符:+ - * / % ++ -- + :加法运算符 - :减法运算符 * :乘法运算符 / :除法运算符 % :取余运算符,返 ...

  3. JS中的逗号运算符(,)

    逗号运算符 逗号运算符是二元运算符,它能够先执行运算符左侧的操作数,然后再执行右侧的操作数,最后返回右侧操作数的值. 逗号表达式: 一般形式:表达式1,表达式2,表达式3,......表达式n 求解过 ...

  4. mysql常见的运算符及使用

    mysql中有4类运算符,它们是: 算术运算符 比较运算符 逻辑运算符 位操作运算符 算术操作符 算术操作符是SQL中最基本的操作运算符,主要有一下几种运算符: +(加). -(减). *(乘). / ...

  5. 位运算符取反_Java常见的运算符——位运算

    位运算符 <<左移 先说左移运算符,它的符号表示是<< 举个例子,先定义一个int类型的数,十进制的value = 733183670,转换成二进制在计算机中的表示如下(int ...

  6. 在位运算中_Java常见的运算符(下)

    位运算符 < 先说左移运算符,它的符号表示是<< 举个例子,先定义一个int类型的数,十进制的value = 733183670,转换成二进制在计算机中的表示如下(int类型占4个字 ...

  7. C语言常见语法——运算符和表达式

    自增,自减运算符使用注意及案例 1.++i , --i (在使用 i 之前,先使 i 的值加(减) 1) 2.i++ , i-- (在使用 i 之后,先使 i 的值加(减) 1) 3.int i=3; ...

  8. JS基础入门 Javascript运算符

    Javascript运算符 1.运算符(操作符) 1.1运算符的分类 运算符(operator)也被称为操作符,是用于实现赋值.比较和执行算数运算等功能的符号 Javascript中常用的运算符有: ...

  9. .php中js写法,js函数常见的写法以及调用方法

    写在前面:本文详细的介绍了5中js函数常见的写法以及调用的方法,平时看别人代码的时候总是看到各种不同风格的js函数的写法.不明不白的,找了点资料,做了个总结,需要的小伙伴可以看看,做个参考. 1.常规 ...

最新文章

  1. 用c实现跨平台异常捕获机制
  2. c++类的构造函数详解
  3. centos6 安装 mantisbt-1.2.8 —— (2)【linux】VMware安装CentOS 6.4
  4. ubuntu通过pem连接服务器
  5. Django + Nginx + Uwsgi + Celery + Rabbitmq 做一个高速响的应网站架构
  6. Postgresql 物理热备份 -- 快照备份
  7. matlab中服从高斯分布的矩阵_推荐基础算法之矩阵分解PMF
  8. MMDetection-配置文件
  9. 2021年北京理工大学ACM CLUB清明节组队训练赛
  10. Linux之 find之 ctime,atime,mtime
  11. 计算机中常用的声音编辑工具有哪些,电脑常用音频剪辑软件
  12. 五种常用的绩效考核工具对比
  13. php段子老板,程序员段子 那些关于程序员的段子
  14. SQL | DB2和MySQL分条件求和
  15. 数学定理(1)——正态分布
  16. 第三天.......
  17. MAVEN踩坑 Could not find artifact...
  18. 深度学习—BP神经网络
  19. POJ3984迷宫问题
  20. 全球变暖java_Java实现第九届蓝桥杯全球变暖

热门文章

  1. iOS 跳转到手机设置各种页面
  2. 优云数智X咪咕视频 | 可以跑世界杯的云
  3. js 数组遍历符合条件跳出循环体_在JavaScript中循环遍历数组
  4. CSGO在完美对战平台和官匹启动后秒退问题
  5. 用泰勒展开式(麦克劳林展开式)计算ln2(C++版本)
  6. 2021社会生活指数调查-廉政态度及分类问题
  7. 树莓派 python 录音_树莓派使用 USB 麦克风录音
  8. python 安装PyAudio
  9. Qt实训项目----(1)
  10. linux-redis 常用命令