写点什么

JavaScript 进阶(下)

用户头像
Augus
关注
发布于: 3 小时前
JavaScript 进阶(下)

写在前面,兜兜转转,来来回回,从开始学习 JS 到现在已经工作这些来年,我和 JS 每天的生活可以用如胶似漆来形容。但自认为对他认识的还不够深刻。故从头再来,从基础开始。Go!!!

类型转换

转 Boolean

在条件判断时,除了 undefined , null , false ,NaN , '' ,0 , -0 ,其他所有值都转为 true ,包括所有对象

对象转基本类型

对象在转换基本类型时,⾸先会调⽤ valueOf 然后调⽤toString 。并且这两个⽅法你是可以重写的

let a = {    valueOf() {        return 0    }}复制代码
复制代码

四则运算符

只有当加法运算时,其中⼀⽅是字符串类型,就会把另⼀个也转为字符串类型。其他运算只要其中⼀⽅是数字,那么另⼀⽅就转为数字。并且加法运算会触发三种类型转换:将值转换为原始值,转换为数字,转换为字符串

1 + '1' // '11'
2 * '2' // 4
[1, 2] + [2, 1] // '1,22,1'
// [1, 2].toString() -> '1,2'
// [2, 1].toString() -> '2,1'
// '1,2' + '2,1' = '1,22,1'复制代码
复制代码

对于加号需要注意这个表达式 'a' + + 'b'

'a' + + 'b' // -> "aNaN"
// 因为 + 'b' -> NaN
// 你也许在⼀些代码中看到过 + '1' -> 1复制代码
复制代码

== 操作符

这⾥来解析⼀道题⽬ [] == ![] // -> true,下⾯是这个表达式为何为 true 的步骤

// [] 转成 true,然后取反变成 false
[] == false
// 根据第 8 条得出
[] == ToNumber(false)
[] == 0
// 根据第 10 条得出
ToPrimitive([]) == 0
// [].toString() -> ''
'' == 0
// 根据第 6 条得出
0 == 0 // -> true复制代码
复制代码

⽐较运算符

  • 如果是对象,就通过 toPrimitive 转换对象

  • 如果是字符串,就通过 unicode 字符索引来⽐较

END---

用户头像

Augus

关注

爱瞎搞的软件开发工程师 2021.06.10 加入

某摸鱼集团

评论

发布
暂无评论
JavaScript 进阶(下)