基本数据类型:
String,Number,null,undefined,Boolean (通常所说的五种原始数据类型),Symbol,BigInt (ES6新增)
引用类型:
object [基本对象,Set,Map,new RegExp(),new Date(),...], function [函数,构造函数,new Error(),...]
以上就是通常所说的9种数据类型。
Symbol:
BigInt:
两种数据类型的区别:存储位置不同
原始数据类型直接存储在栈( stack )中的简单数据段,占据空间⼩、⼤⼩固定,属于被频 繁使⽤数据,所以放⼊栈中存储;
引⽤数据类型存储在堆( heap )中的对象,占据空间⼤、⼤⼩不固定,如果存储在栈中,将会 影响程序运⾏的性能;引⽤数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。
当解释器寻找引⽤值时,会⾸先检索其 在栈中的地址,取得地址后从堆中获得实体。
判断数据类型的常用方法:typeof,instanceof,constructor,Object.prototype.toString.call
typeof:(通常用来判断基本数据类型,null除外)
instanceof:
constructor:
Object.prototype.toString.call:(强烈推荐使用此方法,建议封装使用)
数据类型转换
Number():
- 将数据转化为number类型 (ps:字符串转数字类型可以使用小技巧, '123' * 1 , + '123')
Number('123ab') NaN
Number(null) 0
Number(undefined) NaN
parseInt(num, radix):
- 将数据转化为整型,接受第二个参数,表示将num以radix目标进制为基底,转化为10进制数
- 从左到右,当遇到第一个非数字止,返回非数字字符之前的数据
parseInt('abc') NaN
parseInt('123abc') 123
parseInt('123.3a') 123
parseInt(null) NaN
parseInt(undefined) NaN
parseFloat():
- 将数据转化为浮点型
- 从左到右,当遇到第一个非数字(点不算)止,返回非数字字符之前的数据
parseInt('123.3a') 123.3
Boolean():
- 仅以下六种为false
- 0,false,null,undefined,‘’,NaN
String():
- 将数据转化为字符串
String(null) 'null'
String(undefined) 'undefined'
num.toString(radix):
- 与String不同的是,不能转化null,undefined,否则会报错
- 接受一个参数,与parseInt相反,将num以10进制为基底转化为radix进制数
# 特例
undefined > 0 false
undefined < 0 false
undefined == 0 false
null == undefined true
NaN == NaN false
typeof(typeof(a)) string
typeof(typeof(undefined)) string