一、js数据类型
1、分类
js的数据类型分为两种:
- 基本数据类型:
String
、Number
、Boolean
、Null
、undefined
- 引用数据类型:
Object
、Array
、function
JS只有 堆内存
结构,我们所说的 堆栈内存 是指这个堆内存中像栈内存的分离出来
2、基本数据类型
基本数据类型的存放方式,是存放在栈内存
中,拥有以下特性:
基本数据类型的特点:一旦定义了值,就不会改变
var a = 123
a = 234
- 先在栈内存开拓一个空间,存放值 123
- 定义一个变量a,指向这个空间
- 然后在栈内存开拓一个空间,存放值 234
- 切断 a的指向,让a指向 234的空间
所以 123 这个空间的值,是不会改变的
3、引用数据类型
引用数据类型的存放方式,是存放在 堆内存
中,拥有以下特性:
- 操作对象的属性,不会让指针指向发生改变:a.name = '123’
- 操作对象本身,会导致指向发生改变:a = {name:‘234’}
二、typeof
返回数据类型
1. 概念
typeof
返回的数据类型有:String
、Number
、Boolean
、undefined
、Object
、function
一共6种
注意:null 和 Array
返回的是 Object
var a = function() {}
console.log(typeof '123') // String
console.log(typeof 123) // NUmber
console.log(typeof true) // Boolean
console.log(typeof undefined) // undefined
console.log(typeof {}) // Object
console.log(typeof a) // function
console.log(typeof null) // object
console.log(typeof [1, 2, 3]) // Object
2. 笔试题
如何用 原生js 判断 Array / Object / Function ?
方法一:使用toString.call
var a = function(){}
console.log(Object.prototype.toString.call([1, 2, 3])) // [object Array]
console.log(Object.prototype.toString.call({})) // [object Object]
console.log(Object.prototype.toString.call(a)) // [object Function]
方法二: 使用 instanceof
var a = function(){}
console.log([1, 2, 3] instanceof Array) //true
console.log(a instanceof Function) // true
console.log({} instanceof Object) // true
console.log({} instanceof Array) // false