js
数据类型
数据类型及存储
- 1、7种基本数据类型:Undefined、Null、Boolean、Number、String、Symbol(es6新增,表示独一无二的值)和BigInt(es10新增);
- 2、1种引用数据类型——Object(Object本质上是由一组无序的名值对组成的)。
- 存储
- 原始数据类型:直接存储在栈(stack)中,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储。
- 引用数据类型:同时存储在栈(stack)和堆(heap)中,占据空间大、大小不固定。引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。
数据类型转换
- 转Boolean(!!和Boolean())
undefined, null, false, NaN, '', ±0 转为 false, 其余都为true。
-
引用类型-》原始类型
- 先调用toPrimitive
[symbol.toPrimitive](hint){ hint表示当前运算模式: 'number':该场合需要转换为数值 'string':该场合需要转换为字符串 'default':该场合数值字符串都可以 } - 若没有toPrimitive方法,则先调用valueOf(),再调用toString().(日期对象一般调用toString(),若要求转换为数字,则调用valueof())
- 先调用toPrimitive
-
当遇到强制类型转换
- 转字符串
- String() / toString():直接调用对象的toString()
- 转数字
- Number():直接调用对象的vauleOf()
- parseInt() / parseFloat():调用对象的toString(),再将结果转化为数值
数据类型判断
- typeof
- typeof null === object
- 除了null,原始类型都可以正确显示
- typeof function(){} === function
- 除了function,对象类型结果都为obejct
- A instanceof B
- 判断A对象的原型链上有没有B函数的显示原型对象
- constructor
- 原始类型和引用类型都可以判断
- 如果一个对象,更改了它的原型,constructor就会变得不可靠了
- Object.prototype.toString.call()
- 返回格式:[object 类型名]
- 原始类型,引用类型都可以
null和undefined
- 相同点
- 在 if 语句中 null 和 undefined 都会转为false
- 两者用相等运算符比较也是相等
- 不同点
- null表示没有对象,即该处不应该有值
- 作为函数的参数,表示该函数的参数不是对象
- 作为对象原型链的终点
- 作为函数的参数,表示该函数的参数不是对象
- undefined表示缺少值,即此处应该有值,但没有定义
- 定义了形参,没有传实参,显示undefined
- 对象属性名不存在时,显示undefined
- 函数没有写返回值,即没有写return,拿到的是undefined
- 写了return,但没有赋值,拿到的是undefined
- null和undefined转换成number数据类型
- null 默认转成 0
- undefined 默认转成 NaN
- null表示没有对象,即该处不应该有值