第六节:JS中的加减乘除和比较赋值

在这里插入图片描述
在这里插入图片描述

1、乘性操作符(*乘法、/除法、%模运算)

运算原则: 先将运算内容转换为数字,然后进行计算;如果转换失败会返回NaN
小数:会出现0.1*0.2 不等于 0.2的误差,与0.1+0.2 不等于 0.3 原理相同
结果:数字或者NaN,能转换数字的结果均为数字,不能转换结果会返回NaN

参考文章:关于0.1+0.2不等于0.3的问题

2、减法操作(-)

与乘性操作运行规则完全一直,先转换数字,然后进行操作,不能转换则返回NaN;也存在小数的问题

3、加法操作(存在隐式类型转换,更偏向于字符串)

情况一:正常的加法操作
情况二:字符串的拼接

  • 两个操作数均为数字则执行正常的加法操作
  • 两个操作数有一个字符串,则两个操作数转为字符串进行字符串拼接
  • 两个操作数为数字和布尔,则将布尔类型转换为数字,然后进行计算
  • undefined、null、布尔类型、数字混合运算时,所有东西都会先转换成数字
1+1; //2
1+true; //2
1+false; //1
1+'1'; //'11'
1+'abc'; //'1abc'
'hello'+' world'; //'hello world'
//数组 + 字符串
'123' + [1,2]; //字符串+数组 '1231,2'
null + null; //0 + 0 = 0,所以结果为0
undefined + undefined; //NaN + NaN,结果为NaN
undefined + null; //NaN + 0,结果为NaN
null + true; //0 + 1 = 1
null + 12; //0+12 = 12
undefined + true; //NaN + 1 = NaN
//对象 + 数字
['a','b'] + 12; //'a,b12'
[] + []; //''  先调用valueOf方法,返回数组本身,结果还是对象,所以继续调用toString()方法,得到一个空字符串,相当于两个空字符串相加,得到一个空字符串
1+[1,2]; //'11,2'  数组先转换原始值,调用valueOf,然后调用toString(),得到'1,2', 1+ '1,2' = '11,2'
1+{a:1}; //'1[object Object]' 原理如下
//({a:1}).valueOf(); //{a: 1}
//({a:1}).valueOf().toString(); //'[object Object]'
{a:1} + 1; //1,这是因为{}除了表示对象,还表示一个代码区域,所以运行时前面大括号相当于一个代码结束,所以解释为 +1 ,结果为1
({a:1}) + 1; '[object Object]1'
var a= {};
a+a; //'[object Object][object Object]'
[] + {}; //'[object Object]'
{} + []; //0,还是因为{}表示代码结束,[]转化为数字就为0

如果不确定结果,可以根据需求先进性数据类型转换,然后进行计算或者后续操作
对象到原始类型的转换:
对象 - 字符串 toString valueOf
对象 - 数字 valueOf toString
对象到原始值得转换: 先调用valueOf方法,再调用toString()方法,大部分都是如此,但是date对象不是,Date()对象直接调用valueOf()方法

Date().valueOf(); //'Sat Nov 06 2021 15:57:19 GMT+0800 (中国标准时间)'

4、关系运算符(存在隐式类型转换,更偏向于数字)

  • 正常数字比较,结果为true或者false
  • 字符串比较:除了比较正常的数字,也可对字符串进行比较,比较原理为比较字符的编码
  • 对象的比较:先调用valueof方法,然后调用toString方法
  • 如果有一个是数字类型,就把另一个转换我数字类型
  • 如果有一个操作数为NaN,结果均为false,因为NaN不等于任何值,包括它自己
7>6>5; //false,关系运算符为左结合,所有先判断7>6结果为true,true > 5(1>5),false
1>'abc'; //false
'a'>'b' //false

5、等于运算符

  • 一个等号=,常用于赋值
  • 二个和三个等号,常用于判断,三个等号又称之为全等(先判断类型是否相同,相同再判断值是否相同;不相同则直接返回false),需特别注意NaN不等于任何值

关于全等判断(===)的几种情况:
1、数值类型,直接判断数值是否相等
2、布尔类型,判断是否相等
3、字符串,判断编码是否相等
4、null,只与自身相等,其余全部为false
5、undefined,只与自身相等,其余全部为false
6、对象,判断对象的引用是否相等

null === null; //true
undefined === undefined; //true
null === undefined; //false
NaN === NaN; //false

关于判断(==)的几种情况:
1、字符串与数值比较,先将字符串转换为数值,然后进行比较
2、字符串与布尔值,把字符串和布尔值都转换为数值,然后进行比较
3、如果不满足上述规则,则直接返回false,例如比较两侧有null或者undefined
备注:判断存在一个 隐式类型 转换

null == undefined; //true
'1' == 1; //true
'12a' == 123; //false  相当于判断 NaN === 123 
[] == ![];//true,运行原理,[]转换为数字为0,![]为false,转换为数字为0,所以0=0返回true

相对应的不等判断有: 不相等(!=),不全等(!==),与等于和完全等于值正好相反

关于一个等号的赋值:
1、一般赋值运算左边,也就是左值为一个变量
2、赋值操作符:+=、-=、*=、/=、%=
备注: 关于赋值和带操作符的赋值,性能上没有任何提升

//不建议使用连续赋值
var a=b=1; //此时会造成的问题:a为一个变量,b为window的一个属性,没有用var定义,也不存在变量提升

备注:本内容学习总结来源于喜马拉雅冰山工作室沙翼老师主讲的(陪你读书(JavaScript WEB前端))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值