基础数据类型 undefined null boolean string number symbol bigint 引用数据类型(Object) Array - 数组对象、RegExp - 正则对象、Date - 日期对象、Math - 数学函数、Function - 函数对象。?
JavaScript 的数据类型最后都会在初始化之后放在不同的内存中,因此上面的数据类型大致可以分成两类来进行存储:
基础类型存储在栈内存,被引用或拷贝时,会创建一个完全相等的变量; 引用类型存储在堆内存,存储的是地址,多个引用指向同一个地址,这里会涉及一个“共享”的概念 ?数据类型的判断方法 第一种判断方法:typeof 第二种判断方法:instanceof instanceof 可以准确地判断复杂引用数据类型,但是不能正确判断基础数据类型; 而 typeof 也存在弊端,它虽然可以判断基础数据类型(null 除外),但是引用数据类型中,除了 function 类型以外,其他的也无法判断。 第三种判断方法:Object.prototype.toString
数据类型转换 强制类型转换 强制类型转换方式包括 Number()、parseInt()、parseFloat()、toString()、String()、Boolean(),
隐式类型转换 凡是通过逻辑运算符 (&&、 ||、 !)、运算符 (+、-、*、/)、关系操作符 (>、 <、 <= 、>=)、相等运算符 (==) 或者 if/while 条件的操作,如果遇到两个数据类型不一样的情况,都会出现隐式类型转换。
‘==’ 的隐式类型转换规则 如果类型相同,无须进行类型转换;如果其中一个操作值是 null 或者 undefined,那么另一个操作符必须为 null 或者 undefined,才会返回 true,否则都返回 false;如果其中一个是 Symbol 类型,那么返回 false;两个操作值如果为 string 和 number 类型,那么就会将字符串转换为 number;如果一个操作值是 boolean,那么转换成 number;如果一个操作值为 object 且另一方为 string、number 或者 symbol,就会把 object 转为原始类型再进行判断(调用 object 的 valueOf/toString 方法进行转换)。 Object 的转换规则 对象转换的规则,会先调用内置的 [ToPrimitive] 函数,其规则逻辑如下:如果部署了 Symbol.toPrimitive 方法,优先调用再返回;调用 valueOf(),如果转换为基础类型,则返回;调用 toString(),如果转换为基础类型,则返回;如果都没有返回基础类型,会报错。
|