1)基本数据类型
string、 number、null、undefined、 boolean、bigInt、symbol
Number类型中NaN不是有效数字但是属于Number类型,typeof NaN //=> ‘number‘ NaN === NaN // => false Object.is(NaN,NaN) // => true BigInt出现的意思是保证超出最大最小安全值仍然可以准确计算 console.log(Number.MAX_SAFE_INTEGER); //=>9007199254740991 console.log(Number.MIN_SAFE_INTEGER); //=>-9007199254740991 9007199254740991n =>bigint类型的
(2)引用数据类型【2】
- object
- 普通对象 {}
- 实例对象 new xxx
- 日期对象 new Date
- 正则对象 new RegExp
- 原型对象 prototype
- 数组对象 Set Array
- ....
- function
2.数据类型的检测
1.typeof 能检测基本类型和函数类型,但是对于对象类型和null不能区分(null为计算机历史遗留问题) typeof function(){} // ‘function’ typeof NaN // ‘number’ 2.constructor [].constructor === Array 3.instanceof 4.Object.prototype.toString.call() Object.prototype.toString.call([]) // “[object Array]”
3.数据类型的隐式转换
(1)转化为Number类型的情况
-
使用Number显式类型转换, 转换过程中,遇到对象会先toString然后在Number转换
-
例子:
Number()、Number(null)、Number("")、Number(false) 结果为 0
Number(undefined) 、 Number({})、 Number(‘wds’), 结果为 NaN
Number(true) , 转化结果为 1
Number([‘2222’]) 结果为 2222
Number([‘2222’,‘1111’]) 结果为NaN
Number(‘1,2’)
———————————————— -
使用加号减号等运算符隐式转换, 转换过程中,遇到对象会先toString然后在Number转换
-
例子: ‘123’ 结果为 123 [] 、+null、+false 结果为 0 {}、+ ‘abc’ 、+ undefined 结果为 NaN true 结果为 1 1 + true 结果为 2 注意??: NaN + 任何数都是NaN、字符串和对象除外,会转成字符串拼接 NaN+123、NaN+ true、NaN+NaN 结果都为NaN NaN + {} 结果为 “NaN[object Object]” NaN + [] 结果为 “NaN”
使用isNaN进行检测的时候,会隐式转换为数字在检测,转换过程中,遇到对象会先toString然后在Number转换