【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, 2

var 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, 22

y += 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, 0

var 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, 0

y += 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;	// 1

a += b;	// 2
a -= b; // 1

a *= b; // 1
a /= b; // 1

a %= 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);		// true

console.log(10 === '10');		// false
console.log(10 === [10]);		// false
console.log(1 === true);		// false
console.log(0 === false);		// false

console.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("错"); 	// "对" 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值