JavaScript是一门弱类型语言,其灵便的设计初衷也带来了隐式转换的弊病;上面是对js数据类型转换的梳理
首先得晓得js的数据类型6种根本数据类型与object
6种根本数据类型(含es6):null
、undefined
、string
、number
、boolean
、symbol
(es6新增)
隐式转换
转换场景
根本数据类型的转换(不含symbol)
- 算数运算符(如
+
、-
、*
、/
等等)的隐式转换:会将非number
转换成number;留神,当+
有一边为string时,+
属于字符串连接符;其余数据类型转number的规定(此规定属于ecma规范,须要记忆):
原数据类型 | 转换成number 后的后果 |
---|---|
number |
原number |
string |
纯数字的字符串会转成对应数字,含非数字的会转换成NaN , '' => 0 |
null |
0 |
undefined |
NaN |
boolean |
true => 1 ; false => 0 |
- 其余非逻辑运算符(如
==
、+
、>=
)的隐式转换: 当有一边含有string时,会将非string的转成字符串来解决;其余数据类型转字符串的规定(此规定属于ecma规范,须要记忆):
原数据类型 | 转换成string 后的后果 |
---|---|
number |
数字对应的string |
null |
'null' |
undefined |
'undefined' |
boolean |
true => 'true' ; false => 'false' |
留神:不含symbol是因为symbol不能转换
非根本数据类型的转换
- 非根本数据类型的对象会调用对应的转换方法来转换成根本数据类型,个别都会有valueOf与toString;如果转换方法的返回值为根本数据类型,则会拿此根本数据类型走根本数据类型转换的逻辑;如果两个办法都没有或者都没能转换成根本数据类型,则转换失败
- Date会先调用toString,其余的会先调用valueOf
留神:两边都是对象时
==
运算符比拟的是对象内存地址,
发表回复