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

一、运算符

1. 隐式的转换为字符串

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

variate + ""

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

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

!!variate

3. 隐式的转换为数字

(1)一元+

一元正号运算符位于其操作数前面,计算其操作数的数值,如果操作数不是一个数值,会尝试将其转换成一个数值。 尽管一元负号也能转换非数值类型,但是一元正号是转换其他对象到数值的最快方法,也是最推荐的做法,因为它不会对数值执行任何多余操作。它可以将字符串转换成整数和浮点数形式,也可以转换非字符串值 truefalse  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 —— 运算符

MDN文章地址:https://developer.mozilla.org/zh-CN/docs/conflicting/Web/JavaScript/Reference/Operators#Unary_negation

关于幂运算需要注意的地方和一元加一元减

运算符优先级:https://blog.csdn.net/zyz00000000/article/details/108345985

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值