JavaScript运算符(隐式类型转换)

一、运算符

1. 隐式的转换为字符串

var variate = ["a","b","c"];
转换为字符串

variate + ""

2. 隐式的转换为布尔类型

var variate = ["a","b","c"];
转换为Boolean类型

!!variate

3. 隐式的转换为数字

(1)一元+

在对非数值应用一元加运算符时,会调用Number()转型函数对这个值进行转换

var variate = "123";
转为数字

+variate

在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和其他都不相等。

参考文章:javascript —— 运算符

猜你喜欢

转载自blog.csdn.net/zyz00000000/article/details/106278824