js的数据类型判断

229 阅读2分钟

前言


一. js的数据类型有哪些

javaScript是一门弱语言,在js中,数据类型有六种,其中包含五种基本数据类型(值类型)和一种对象类型(复杂类型)。基本数据类型把数据名和值直接存储在栈当中,而复杂数据类型在栈中存储数据名和一个堆的地址,在堆中存储对象的属性及值。访问时先从栈获取地址(即栈中存放的是对象的引用),再到堆中拿到相应的值。

基本数据类型。

  1. number:1,2,3。
  2. string:'jsjssjj','苹果'
  3. boolean:true和false
  4. null:null
  5. undefined:undefined

对象类型(object)

  1. function(函数)
  2. Array(数组)
  3. object(对象)
  4. date(时间日期)

二. js的数据类型的判断方法

1.typeof

判断数据类型最常用的方法就说typeof了,它可以用来判断大多数的数据类型

    var a;
    console.log(typeof a)//undefined
    
    var a = 1;
    console.log(typeof a)//number
    
    var a = '1';
    console.log(typeof a)//string
    
    var a = true||false;
    console.log(a)//boolean
    
    var a = NaN;
    console.log(typeof a)//number
    
    var a = [1,2,3];
    console.log(typeof a)//object
    
    var a = new object();
    console.log(typeof a)//object
    
    var a = null;
    console.log(null)//object

大家会发现,虽然typeof能判断大多数数据的类型,但是无法区分null与object,也无法区分object和array,所以要区分它们,我们要另辟蹊径。

2.Object.prototype.toString

Object.prototype.toString也是一种基于原型链的判断数据类型的方法,因为js中每一个对象(空对象除外)都会继承自Object,下面是例子:

    function isString (o) { //是否字符串
        return Object.prototype.toString.call(o).slice(8, -1) === 'String'
    }
    function isNumber (o) { //是否数字
        return Object.prototype.toString.call(o).slice(8, -1) === 'Number'
    }
    function isObj (o) { //是否对象
        return Object.prototype.toString.call(o).slice(8, -1) === 'Object'
    }
    function isArray (o) { //是否数组
        return Object.prototype.toString.call(o).slice(8, -1) === 'Array'
    }
    function isDate (o) { //是否时间
        return Object.prototype.toString.call(o).slice(8, -1) === 'Date'
    }
    function isBoolean (o) { //是否boolean
        return Object.prototype.toString.call(o).slice(8, -1) === 'Boolean'
    }
    function isFunction (o) { //是否函数
        return Object.prototype.toString.call(o).slice(8, -1) === 'Function'
    }
  function isNull (o) { //是否为null
        return Object.prototype.toString.call(o).slice(8, -1) === 'Null'
    }
  function isUndefined (o) { //是否undefined
        return Object.prototype.toString.call(o).slice(8, -1) === 'Undefined'
    }