判断JS数据类型的方法

JS是弱语言,其数据类型可以自动转换,因此很多时候在用到数据的时刻不清楚数据的类型到底是哪种,需要进行判断后,再执行语句。
最新的ECMAScript规范定义的数据类型分为两大类,分别为基本类型和引用类型。

  • 基本类型: String, Number, Boolean, Undefined, Null, Symbol
    基本类型也称为简单类型,作为简单的数据段占据的空间固定。因此为了提升变量的查询速度,基本类型的数据存储在栈(stack)中,是按值访问。其中,值是无法改变的,对值的操作只会产生新的值,原始值并不发生改变,因此又叫原始值类型;
  • 引用类型: Object(Function,Array,RegExp,Date等内置对象也是引用类型)
    引用类型也称为复杂类型,值的大小会改变,故不能将其存放在栈中,否则会降低变量的查询速度。因此,引用类型的数据,值存储在堆(heap)中。引用类型变量存储的值是一个指向存储对象内存地址的指针,是按址访问。

对于数据类型的判断,有如下的方法:

  1. toString()方法:toString()方法是Object原型上的方法,调用toString()方法默认返回当前对象的[[class]]属性,这是一个内部属性,格式为[object Xxx],其中Xxx就是数据类型,X表示大写字母。
    作为目前最有效的判断数据类型的方法,toString()方法可以这样调用Object.prototype.toString.call(arg);其中,arg为参数,即要进行类型判断的变量。
Object.prototype.toString.call('') ;   // [object String]
Object.prototype.toString.call(1) ;    // [object Number]
Object.prototype.toString.call(true) ; // [object Boolean]
Object.prototype.toString.call(Symbol()); //[object Symbol]
Object.prototype.toString.call(undefined) ; // [object Undefined]
Object.prototype.toString.call(null) ; // [object Null]
Object.prototype.toString.call(new Function()) ; // [object Function]
Object.prototype.toString.call(new Date()) ; // [object Date]
Object.prototype.toString.call([]) ; // [object Array]
Object.prototype.toString.call(new RegExp()) ; // [object RegExp]
Object.prototype.toString.call(new Error()) ; // [object Error]
Object.prototype.toString.call(document) ; // [object HTMLDocument]
Object.prototype.toString.call(window) ; //[object global] window 是全局对象 global 的引用
  1. typeof操作符: 其后接一元表达式,返回结果是number、boolean、symbol、string、object、undefined、function这7中数据类型的一种。在用typeof做判断时,返回的结果不够精细,比如typeof null; // object只返回object类型而不是Null类型;
  2. instanceof操作符:这是用来判断原型与实例关系的操作符。当实例的__proto__属性指向了某种类型的prototype时,则instanceof返回true,否则返回false;但这里也存在着返回结构不够精细的特点。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值