js类型转换

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

一、显性类型转换

强制类型转换主要是指通过String、Number和Boolean等构造方法手动转换成对应的字符串、数字和布尔值。

1.1 转为字符串

1.1.1 原始类型转字符串

原始类型字符串
string :‘str’“str”
number : 123“123”
Boolean“true”/“false”
null“null”
undefined“undefined”

1.1.2 对象转字符串

1、如果对象有toString()方法,则调用toString()方法,如果返回原始值,则按照原始值转换规则转换成字符串。

2、如果对象没有toString()方法或者toString()方法返回的不是原始值,则调用valueOf()方法,如果返回原始值,则按照原始值转换规则转换成字符串

3、否则抛出错误:Cannot convert object to primitive value

常见对象的toString():默认是"[object Object]"

  • 数组:将每个数组元素转换为一个字符串,并在元素之间添加逗号后合并成结果字符串 [1,2] “1,2”

  • 函数 :将函数转换成源代码字符串function(){} “function(){}”

  • 日期:返回日期和时间字符串new Date() “Thu Aug 13 2020 14:08:59 GMT+0800 (中国标准时间)”

  • 正则:正则表达式字符串new RegExp("[^xyz]") “/[^xyz]/”

举例验证:

var obj = {

toString() {

    return {}

},

valueOf() {

    return {}

}

}

1.2 转为数字

1.2.1 原始类型转数字

原始类型数字
true/false1/0
null0
undefinedNaN
空字符串0
数字字符串:“2.333”2.333
不可完全解析为数值的字符串NaN

1.2.2 对象转数字

1、如果对象有valueOf()方法,调用valueOf()方法,如果返回原始值,则按照原始值转换规则。

2、如果没有valueOf()方法或valueOf()返回的不是原始值,则再调用toString()方法,如果原始值则按照原始值转换规则。

3、否则,则抛出错误:Cannot convert object to primitive value

大多数对象的没有原始值,valueOf()返回对象本身,例数组,函数,正则

日期会返回 1970年1月1日以来的毫秒数。

1.3 转为布尔值:

除以下几种情况返回false,其他都返回true

false、null、 undefined 、 ‘’ 、 NaN 、 0(+0、-0)

二、自动(隐性)类型转换

自动类型转换就是不需要人为强制的进行转换,js会自动将类型转换为需要的类型,所以该转换操作用户是感觉不到的,因此又称为隐性类型转换。自动类型转换实际上和强制类型转换一样,也是通过String()、Number()、Boolean()等构造函数进行转换,只是该操作是JS自己自动完成的而已。自动类型转换的规则和强制类型转换的规则一致。

2.1转为字符串

字符串自动转换主要表现为字符串的拼接,字符串和其他类型用加号(+)拼接时,其他类型都自动转换为字符串。

'str' + 1 ====> "str1"

'str' + 'str' ====>"strstr"

'str' + null ====>"strnull"

'str' + undefined ====>"strundefined"

'str' + true ====>"strtrue"

'str' + {} ====>"str[object Object]"

2.2转为数字

在所有加减乘除等需要数字类型的地方,JS会自动转换成数字(除字符串与‘+’组合)。

      • / %

== 、 >= 、 <= 、 < 、>

'1' - '2' ====> -1

'1' - null ====>1

'1' - undefined ====>NaN

'1' - true ====>0

'1' - NaN ====>NaN

'1' * 'a' ====>NaN

'1' - {} ====>NaN

'1' + 222 ====> 1222

2.3转为布尔

下面的情况会发生 布尔值隐式强制类型转换。

(1) if (…) 语句中的条件判断表达式。

(2) for ( … ; … ; … ) 语句中的条件判断表达式(第二个)。

(3) switch,while (…) 和 do…while(…) 循环中的条件判断表达式。

(4) ? : 中的条件判断表达式。

(5) !

(6) 逻辑运算符 ||(逻辑或)和 &&(逻辑与)左边的操作数(作为条件判断表达式)。

判等:

==:

null、undefined 除了和自身或者彼此==, 剩下和谁都不==

NaN和谁都不==
在判断 == 时,要先Number() 将两个操作数强制转为 Number 类型

测验

欢迎讨论 特别最后一个

1.undefined 转为数字类型是什么

2.var obj = {

toString() {

    return {}

},

valueOf() {

    return undefined

}

}

Number(obj) 输出什么?

3.console.log(‘str’+{})

console.log(null == undefined)

console.log(null == 0)

console.log(null == false)

console.log(null == NaN)

console.log(undefined== 0)

console.log(undefined== false)

console.log(undefined== NaN)

console.log(NaN== NaN)

5.转换为布尔类型为false的几种情况?
6.

console.log([]==![])

console.log({}==!{})

happy everyday~

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值