JS
的基本数据类型
Number
String
Boolean
Null
Undefined
Object
Symbol
BigInt
其他数据类型转换为数字(Number)
-
隐式转换
布尔值之间的加减
布尔值与数字之间的加减
布尔值与(字符串数字)之间的减法运算
{}对象与数字之间的加减
{}+1=1 let obj={} obj+1="object Object1" {name:1}+1=1 let obj2={name:1} obj2+1="object Object1" {}+"1"=1 "1"+{}="1object Object"
[]==0//true
通过上面的实验可以得知,声明后的变量与未声明的变量运算方式并不相同,声明后的对象会直接调用其原型上的Object.prototype.toString()方法返回一个表示该对象的字符串。
对象与boolean之间的==运算
例如
[]==false//true
-
显式转换
-
Number()
空字符串,
null
,false
会被转换为0带有特殊字符的字符串,
undefined
,{} 会被转换为NaN
,Symbol类型值会报错
true,false会被转换为1,0
如果转换对象是对象,则会调用对象的
valueOf()
方法,然后按照前面的规则进行转换 -
parseInt()
空字符串,首字符含有非有效数字的字符会被准换为
NaN
parseInt()
会依次解析字符串中每一个字符,会将前面符合数字条件的字符串转换为数字,忽略后面不符合数字字符条件的字符串。
ECMAScript 5
不具有解析八进制字符串的能力,除非第二个参数标明要按照八进制的规则准换目标字符串与
parseInt()
转换规则类似的是parseFloat()
,但他们有两点不同parseFloat()
总是会忽略前导0并且其没有第二个参数用来控制转换进制规则,所以其职能转换十进制- 对于
parseFloat()
来说,第一个出现的小数点是有效字符。
isNaN()
是基于Number()
的 -
其他数据类型转换为String
-
隐式转换
在js中+左右两边出现字符串则会转换为字符串拼接(因为加号只要遇见字符串就会转换为字符串拼接)
[]+0="0" {}+0=0 [].toString()="" {}+1=1
对象与对象之间的加法运算
字符串与对象间的加法运算(而非对象与字符串间的加法运算)
-
显式转换
-
String()
对于基本数据类型,值是什么样就会转换为什么样的字符串,
对于引用数据类型,会调用其
toString()
方法来进行转换 -
toString()
对象上都有
toString()
方法,根据其对象上的toString()
规则来进行转换[1,2,3].toString() //"1,2,3"
如果调用的是对象原型上的
toString()
方法,会返回[object Object]
,Object可以被替换成其对象类型,比如Array,Date等,因为对象原型上的toString()
是用来检测对象数据类型的,一般返回 object 与其构造函数的名称的组合例如[object Array]
。例如:
let arr=[1,2] Object.prototype.toString.call(arr) //"[object Array]"
-
其他数据类型转换为Boolean
只有0,null
,undefined
, NaN
,""被转换为false,其他都被转换为true
==与===计算规则
- ==计算规则(强制转型)
- 如果有一个数是Boolean值,则在比较相等性之前先将其转换为数值,true转换为1,false转换为0
- 操作数是字符串和数值,会将字符串转换为数值
- 操作数是对象和其他,调用其
valueOf()
方法后按照上面的规则进行比较 null==undefined
//true- 如果两个操作数都是对象,则比较他们是不是一个对象,即使用的是不是一个内存空间。
- ===计算规则
- 比较其数据类型是否相同
- 比较其值是否相同