本章主要掌握 数据类型的分类与如何判断
数据类型的分类
数据类型主要分为两大类:基本数据类型(值类型)与 对象类型(引用类型)
基本数据类型
- Number(数值型):任意数值
- String(字符串型):任意字符串
- Boolean(布尔型):true(真) 或 false(假)
- undefined: undefined
-
对象类型
Object(对象):任意对象
- Function(函数):可执行的特别对象
- Array(数组):内部数据有序(数据下标有序)的特别对象
数据类型的判断
数据类型的判断只有三种方式,分别是 typeof、instanceof、===
- typeof:用来判断 Number、String、Boolean、undefined、Function,这五种数据类型,返回具体类型的字符串表达式,它不能区别 null 与 Object、Object 与 Array。 ```javascript typeof 123 ‘number’
typeof “123” ‘string’
typeof true ‘boolean’
typeof undefined ‘undefined’
function fun() {} typeof fun ‘function’
typeof null ‘object’
const obj = {name: “zhang san”}
typeof obj ‘object’
typeof obj === typeof null true
const arr = [1, 3]
typeof arr ‘object’
typeof arr === typeof obj true
2. instanceof:用来判断对象的具体类型(构造函数的 prototype 属性是否出现在某个实例对象的原型链上,也可理解为某个对象是否是另一个对象的实例)
> object instanceof constructor
> object:某个实例对象 constructor:某个构造函数
> 用来检测 constructor.prototype 是否存在于参数 object 的原型链上。
> JavaScript 不同于其它语言,其对象的继承方式是以原型链的形式继承的。
```javascript
// 定义构造函数
function Person() {}
function Student() {}
var join = new Person()
join instanceof Person
true
join.__proto__ === Person.prototype
true
/******** Person 在 join 的原型链上 ************/
join instanceof Student
false
join.__proto__ === Student.prototype
false
/******** Student 不在 join 的原型链上 ************/
Person.prototype = {}
var andy = new Person()
andy instanceof Person
true
join instanceof Person
false
/******** 这里将 Person 的原型指向了一个空对象,所以其不在 join 的原型链上 ************/
Student.prototype = new Person() // 继承
var xiaoming = new Student()
xiaoming instanceof Student
true
xiaoming instanceof Person
true
- ===:只能用来判断一个变量的值是否等于 undfined 或者 null,返回 true/false ```javascript var a = 123
a === undefined false
a === null false
var b = “”
b === undefined false
var b = undefined
b === undefined true
var c = null
c === null true
c === undefined false
b === null false ```
相关问题:
- undefined 与 null 的区别
- undefined 代表定义了一个变量但未为其赋值
- null 代表定义了一个变量,也为其赋值了,但值为null
- 什么时候为变量赋值为 null
- 首先,null 是基本数据类型,但 typeof 返回的是 Object 类型,这其中看似矛盾,其实是为了解决某些问题而设计;当我们想创建一个对象变量又不想初使时赋空值而占用内存空间,我们将其赋值为null;其次,可以使我们的代码语义化更明显,易于阅读理解;还有,当程序执行结束时,将变量重新赋值为 null,使对象成为垃圾对象,使垃圾回收器将空间回收。
- 严格区分 变量类型 与 数据类型
- 变量类型分为:基本类型与引用类型
- 数据类型分为:基本类型与对象类型
- 如果变量的值是基本类型,其对应内存中的数据是其内存本身的地址与值数据
- 如果变量的值是对象类型,其对应内存中的数据是其内存本身的地址与值对应的堆内存地址