数据类型

124 阅读2分钟

引用链接:

基本数据类型

Number ,String , Boolean ,Null,Undefined , symbol(符号)

引用数据类型

Object,Array,Function。

获取数据类型

  • Number ,String , Boolean ,undefined,Function使用typeof可以获取数据类型
  • let a=null使用typeof 获取数据类型得到的是object
  • 对于引用数据类型可以使用instanceof来判断数据类型
let a=123
let b=false
let c={}
let d=function (params) {}
let e=[]
console.log('a',a instanceof Number);//false  number,string,boolean
console.log('c',c instanceof Object);//true
console.log('d',d instanceof Function);//true
console.log('e',d instanceof Array);//true
  • 借用Object原型里的一个方法 :Object.prototype.toString.call(对象) 可以得到对象的数据类型:包括:String、Number、Boolean、undefined、null、Object、function、Array、Date、Regexp 解决了typeof的缺陷 但是无法得到自定义构造函数实例化对象的数据类型(构造函数名),只能获得Object
     console.log(Object.prototype.toString.call(null));//[object Null]
    console.log(Object.prototype.toString.call(undefined)); //[object Undefined]
    console.log(Object.prototype.toString.call(true)); //[object Boolean]
    console.log(Object.prototype.toString.call('abc'));//[object String]
    console.log(Object.prototype.toString.call(123));//[object Number]
    console.log(Object.prototype.toString.call(f1));//[object Function]
    console.log(Object.prototype.toString.call(arr));//[object Array]
    console.log(Object.prototype.toString.call(obj));//[object Object]
    console.log(Object.prototype.toString.call(per));//[object Object]
    console.log(Object.prototype.toString.call(new Date));//[object Date]

null和undefined的区别

1.Undefined 的字面意思就是:未定义的值 。这个值的语义是,希望表示一个变量最原始的状态,而非人为操作的结果 。

2.null 的字面意思是:空值 。这个值的语义是,希望表示一个对象被人为的重置为空对象,而非一个变量最原始的状态 。 在内存里的表示就是,栈中的变量没有指向堆中的内存对象。

1、一般在以下两种情况下我们会将变量赋值为null

如果定义的变量在将来用于保存对象,那么最好将该变量初始化为null,而不是其他值。换句话说,只要意在保存对象的变量还没有真正保存对象,就应该明确地让该变量保存null值,这样有助于进一步区分null和undefined。

当一个数据不再需要使用时,我们最好通过将其值设置为null来释放其引用,这个做法叫做解除引用。不过解除一个值的引用并不意味着自动回收改值所占用的内存。解除引用的真正作用是让值脱离执行环境,以便垃圾收集器在下次运行时将其回收。解除引用还有助于消除有可能出现的循环引用的情况。这一做法适用于大多数全局变量和全局对象的属性,局部变量会在它们离开执行环境时(函数执行完时)自动被解除引用。