一、运算符
1. 隐式的转换为字符串
var variate = ["a","b","c"];
转换为字符串
variate + ""
2. 隐式的转换为布尔类型
var variate = ["a","b","c"];
转换为Boolean类型
!!variate
3. 隐式的转换为数字
(1)一元+
一元正号运算符位于其操作数前面,计算其操作数的数值,如果操作数不是一个数值,会尝试将其转换成一个数值。 尽管一元负号也能转换非数值类型,但是一元正号是转换其他对象到数值的最快方法,也是最推荐的做法,因为它不会对数值执行任何多余操作。它可以将字符串转换成整数和浮点数形式,也可以转换非字符串值 true
,false
和
null
。小数和十六进制格式字符串也可以转换成数值。负数形式字符串也可以转换成数值(对于十六进制不适用)。如果它不能解析一个值,则计算结果为 NaN。
在对非数值应用一元加运算符时,会调用Number()转型函数对这个值进行转换
var variate = "123";
转为数字
+variate
+3 // 3
+"3" // 3
+true // 1
+false // 0
+null // 0
+function(val){ return val;} //NaN
在new Date()前面使用一元加符号,可以把日期字符串,转换为日期毫秒数
new Date()
Thu May 28 2020 15:07:16 GMT+0800 (中国标准时间)
+new Date()
1590649644859
(2)一元-
会对该值使用Number()转型函数进行转换,再将得到的数值转换成负数
-variate
(3)自增++ 和 自减 --
会调用Number()转型函数对这个值进行加减
4、加法运算
(1)数字进行的加法
特别注意,数字和引用值进行加法运算,其实是拼接
console.log(1 + {});//'1[object Object]'
console.log(1 + [1,2]);//'11,2'
console.log(1 + new Date());//'1Thu Jun 16 2016 10:27:13 GMT+0800 (中国标准时间)'
console.log(1 + /0/);//'1/0/'
(2)字符串进行的拼接
console.log('' + undefined);//'undefined'
console.log('' + null);//'null'
console.log('' + false);//'false'
console.log('' + true);//'true'
5、减法运算
减法运算都会进行数字运行,注意new Data()会转换为毫秒数
console.log(1 - {});//NaN
console.log(1 - [1,2]);//NaN
console.log(1 - /0/);//NaN
console.log(1 - []);//1
console.log(new Date() + 1);//'Thu Jun 16 2016 11:11:49 GMT+0800 (中国标准时间)1'
console.log(new Date() - 1);//1466046941641
console.log(1 - undefined);//NaN
console.log(1 - null);//1
console.log(1 - false);//1
console.log(1 - true);//0
6、乘除取余(* / %)
都会进过Number()的转换,转换为数字后进行运行。
需要注意的是:%的符号有左边的数字决定
console.log(5 % 2);//1
console.log(5 % -2);//1
console.log(-5 % 2);//-1
console.log(-5 % -2);//-1
二、关系运算符
关系运算符用于测试两个值之间的关系,根据关系是否存在而返回true或false,关系表达式总是返回一个布尔值,通常在if、while或for语句中使用关系表达式,用以控制程序的执行流程。
javascript提供了===、!==、==、!=、<、<=、>、>=8个关系运算符,分为4类介绍关系运算符。
【1】=== 全等
不经过任何的类型转换,进行值的比较。
如果是数字比较,都转换为10进制后进行比较
10 === 0xa (true)
如果是字符串,比较每一位的值
"abc" === "abc" (true)
undefined的比较:
undefined === undefined(true)
null值的比较:
null === null(true)
布尔值的比较:
true === true(true)
引用值的比较,比较的是同一地址:
var obj1 = {a:1,b:2,o:{age:24}}
undefined
var obj = obj1
undefined
obj === obj1
true
{a:1} === {a:1}
false
注意 NaN与任何值都不相等,更不全等。
【2】== 相等
相等运算符'=='和恒等运算符相似,但相等运算符的比较并不严格,如果两个操作数不是同一类型,相等运算符会尝试进行一些类型转换,然后再进行比较
当两个操作数类型相同时,比较规则和恒等运算符规则相同
console.log(true == 1);//true
console.log(true == 0);//false
console.log(false == '1');//false
console.log(false == '0');//true
console.log(true == 'true');//false,相当于1 == NaN
console.log([1] == 1);//true,相当于1 == 1
console.log([1] == '1');//true,相当于'1' == '1'
console.log([] == 0);//true,相当于0 == 0
console.log([] == '0');//false,相当于'' == '0'
console.log([] == true);//false,相当于0 == 1
console.log([1] == true);//true,相当于1 == 1
console.log(new Date() == 'Sat Jun 25 2016 11:07:20 GMT+0800 (中国标准时间)');//true
[注意]如果一个值是null,另一个值是undefined,则返回true。
虽然Number(null)是0,但null和0并不相等。虽然Boolean(null)是false,但null和false也不相等。
console.log(null == undefined);//true
console.log(null == 0);//false
null == false
false
实际上,null == null 或 undefined 外,null和其他都不相等。
二、位运算符
按位非 (~)
按位非运算符(~),反转操作数的位。
按位非运算时,任何数字x的运算结果都是
-(x + 1)
。例如,〜-5
运算结果为4
。
请注意,由于对数字~-1
和~4294967295
(232-1) 使用32位表示形式,结果均为0
可以用来判断数组中是否存在某个值:不存在的值,经过按位非和indexOf得到0
var arr = ['a','b','c']
console.log(~arr.indexOf('a'))//-1
console.log(~arr.indexOf('b'))//-2
console.log(~arr.indexOf('c'))//-3
console.log(~arr.indexOf('d'))//0
参考文章:javascript —— 运算符
关于幂运算需要注意的地方和一元加一元减
运算符优先级:https://blog.csdn.net/zyz00000000/article/details/108345985