数据类型:分为基本数据类型和引用数据类型
基本数据类型: string、number、boolean 、null、undefined、symbol、bigInt
引用数据类型: Object、function、Array、Date 、RegExp
数据类型的判断: typeof、instanceof、constructor 、Object.prototype.toString.call()
typeof
typeof 一般用来判断基本数据类型 不能判断引用数据类型 会之间返回小写的字符串数据类型
console.log(typeof '5') //string
console.log(typeof 5) //number
console.log(typeof true) //boolean
console.log(typeof undefined) //undefined
console.log(typeof []) //object
console.log(typeof {}} //object
console.log(typeof function(){}) //function
let num=123
console.log(typeof num) //number
instanceof
instanceof:用来判断一个对象是否是对象类型的实例, instanceof判断的是原型,基本数据类型不能判断,返回true/false
//数组:
//要判断的变量 instanceof [Array/Object/Function]
var a=[1,2,3]
console.log(a instanceof Array) //true
//对象
var obj ={
name:'haha'
}
console.log(obj instanceof Object) //true
constructor
constructor:constructor是prototype对象上的属性,指向构造函数。constructor无法判断null和undefined
//要判断的数据类型.constructor === Array
var arr=[1,2,3]
console.log(arr.constructor===Array) //true
function Fn(a,b){
this.a=a
this.b=b
}
var result=new Fn('haha',16)
console.log(result.constructor==Fn) //true
console.log(result.constructor==Object) //false
Object.prototype.toString.call()
Object.prototype.toString.call():它可以检测到任何类型,返回的是构造函数的类型’[object 数据类型]’,可以实现所有的类型检测
console.log(Object.prototype.toString.call('123'))//[object String]
//数组
var arr=[1,2,3]
console.log(Object.prototype.toString.call(arr)); //[object Array]
//函数
function fn(){}
console.log(Object.prototype.toString.call(fn) //[object Function]
基本数据类型和引用数据类型的区别
堆内存:用来存放数据
栈内存:用来执行数据
区别:
基本数据类型是原始值,直接存储在栈内存中,
引用数据类型,它的值是在堆内存中开辟了一块新的内存空间,我们通过变量来复制一个引用数据类型的时候其实只是把这个开辟的内存空间的地址进行了一个赋值。
基本数据类型和引用数据类型的图
var a={
n:1
}
var b=a
a.x=a={
n:2
}