本章主要掌握 数据类型的分类与如何判断


数据类型的分类

数据类型主要分为两大类:基本数据类型(值类型)与 对象类型(引用类型)

基本数据类型

  • Number(数值型):任意数值
  • String(字符串型):任意字符串
  • Boolean(布尔型):true(真) 或 false(假)
  • undefined: undefined
  • null: null

    对象类型

  • Object(对象):任意对象

  • Function(函数):可执行的特别对象
  • Array(数组):内部数据有序(数据下标有序)的特别对象

    数据类型的判断

    数据类型的判断只有三种方式,分别是 typeofinstanceof===


  1. 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

  1. 2. instanceof:用来判断对象的具体类型(构造函数的 prototype 属性是否出现在某个实例对象的原型链上,也可理解为某个对象是否是另一个对象的实例)
  2. > object instanceof constructor
  3. > object:某个实例对象 constructor:某个构造函数
  4. > 用来检测 constructor.prototype 是否存在于参数 object 的原型链上。
  5. > JavaScript 不同于其它语言,其对象的继承方式是以原型链的形式继承的。
  6. ```javascript
  7. // 定义构造函数
  8. function Person() {}
  9. function Student() {}
  10. var join = new Person()
  11. join instanceof Person
  12. true
  13. join.__proto__ === Person.prototype
  14. true
  15. /******** Person 在 join 的原型链上 ************/
  16. join instanceof Student
  17. false
  18. join.__proto__ === Student.prototype
  19. false
  20. /******** Student 不在 join 的原型链上 ************/
  21. Person.prototype = {}
  22. var andy = new Person()
  23. andy instanceof Person
  24. true
  25. join instanceof Person
  26. false
  27. /******** 这里将 Person 的原型指向了一个空对象,所以其不在 join 的原型链上 ************/
  28. Student.prototype = new Person() // 继承
  29. var xiaoming = new Student()
  30. xiaoming instanceof Student
  31. true
  32. xiaoming instanceof Person
  33. true
  1. ===:只能用来判断一个变量的值是否等于 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 ```


相关问题:

  1. undefined 与 null 的区别
  • undefined 代表定义了一个变量但未为其赋值
  • null 代表定义了一个变量,也为其赋值了,但值为null
  1. 什么时候为变量赋值为 null
  • 首先,null 是基本数据类型,但 typeof 返回的是 Object 类型,这其中看似矛盾,其实是为了解决某些问题而设计;当我们想创建一个对象变量又不想初使时赋空值而占用内存空间,我们将其赋值为null;其次,可以使我们的代码语义化更明显,易于阅读理解;还有,当程序执行结束时,将变量重新赋值为 null,使对象成为垃圾对象,使垃圾回收器将空间回收。
  1. 严格区分 变量类型 与 数据类型
  • 变量类型分为:基本类型与引用类型
  • 数据类型分为:基本类型与对象类型
  • 如果变量的值是基本类型,其对应内存中的数据是其内存本身的地址与值数据
  • 如果变量的值是对象类型,其对应内存中的数据是其内存本身的地址与值对应的堆内存地址