- typeof 操作符
typeof操作符可能返回以下的值
undefined 值未定义
boolean 值为布尔类型
string 值为字符串
number 值为数字类型
object 值为对象或null
function 值为函数typeof 示例 let message='demo'; typeof(message) //string typeof(95) //number typeof(age) //undefined
注:typeof为运算符,非函数,所以后面的小括号可加也可不加;其
判断的值可以为变量也可以直接跟值。
但是typeof有几个坑,需要注意:
- null 返回的是object
- NaN 返回的是number
- 不能区分对象、数组、正则,对它们操作都返回'object'。
- 对未声明的变量。typeof也会返回值 返回值为undefined
- Boolean类型
对任何数据类型的值调用 Boolean() 函数,都会返回一个Boolean值
数据类型 | 转换为true的值 | 转换为false的值 |
---|---|---|
Boolean | true | false |
String | 任何非空字符串 | “”(空字符串) |
Number | 任何非零数字值 | 0和NaN |
Object | 任何对象 | Null |
Undefined | n/a | Undefined |
注:n/a (或N/A)是not applicable的缩写,意思是‘不适应’
- instanceof操作符
当数据类型是基本数据类型时候可通过typeof操作符来判断;
当为引用类型的时候,想知道引用类型是什么类型对象的时候,则用instanceof操作符
person instanceof Object //person 是Object ?是返回true,否则为false
list instanceof Array // list是Array ?
- 内存分配
- 基本数据类型保存在栈里面,在内存中占据固定大小的空间
- 从一个变量向连一个变量赋值基本数据类型的值,会创建这个值得一个副本,二者互不干扰
- 引用类型的值为对象 保存在堆中
- 包含引用类型值得变量 包含的实际上并不是对象的本身 而是一个指向该对象的地址(指针)
- 从一个变量向另一个变量复制引用类型的值,复制的其实是地址,因此这两个变量指向的其实是内存中的一个对象,修改任何一个,另一个也会被修改
- 确定一个值属于那种基本类型可以用typeof操作符
- 确定一个值是那种引用类型可以用instanceof操作符