第四讲:检测数据类型

因为javascript属于动态数据类型,所以对某个变量进行操作前,有时需要检查它的数据类型是什么,方可进行下一步的操作。

JavaScript 有三种方法,可以确定一个值到底是什么类型。

  • typeof运算符
  • instanceof运算符
  • Object.prototype.toString方法

 typeof运算符

typeof 测试基本类型(数值,字符串,布尔值,未赋值的变量或未定义的变量),分别返回"number"、"string"、"boolean"和 "undefined"。

typeof测试引用类型(数组,对象,函数),测试数组和对象都返回"object", 检查函数类型返回"function"。

    let a = 5
    console.log(typeof a)  //输出number

    a = "zhang"
    console.log(typeof a) //输出string

    a = [1, 2, 3]
    console.log(typeof a) //输出object

    a = {
        name: 'zhang',
        age: 20
    }
    console.log(typeof a) //输出object

    a = function () {

    }
    console.log(typeof a) //输出function

    let b;
    console.log(typeof b)  //输出undefined

    let c = null
    console.log(typeof c)  //输出object

    console.log(typeof d) //检测一个未声明的变量,返回undefined

使用typeof检测数组和对象,返回的都是object 。这表示在 JavaScript 内部,数组本质上只是一种特殊的对象。

检查一个未声明的变量,可以用typeof。

// 错误的写法
if (v) {
  // ...
}

// 正确的写法
if (typeof v === "undefined") {
   //....
}
在 JavaScript 中,判断一个变量的类型尝尝会用 typeof 运算符,在使用 typeof 运算符时采用引用类型存储值会出现一个问题,无论引用的是什么类型的对象,它都返回 “object”。这就需要用到instanceof来检测某个对象是不是另一个对象的实例。

 

instanceof运算符

instanceof 运算符用于判断一个变量是否某个对象的实例,返回一个布尔值。

    var arr = [1, 2, 3]
    console.log(arr instanceof Array) //输出true

    var obj = {
        name: 'zhang',
        age: 20
    }

    console.log(obj instanceof Object) //输出true

    var fn = function () { }

    console.log(fn instanceof Function) //输出true

instanceof运算符的左边是实例对象,右边是构造函数。它会检查右边构造函数的原型对象(prototype),是否在左边对象的原型链上。

    function Student() { } //学生对象的构造函数
    function Teacher() { } //老师对象的构造函数

    var stu = new Student()
    console.log(stu instanceof Student) //输出true
    console.log(stu instanceof Teacher) //输出false

    // JavaScript 的所有其他对象都继承自Object对象,即那些对象都是Object的实例。
    console.log(stu instanceof Object) //输出true

    let arr = [1, 2, 3]
    //数组也继承了Object对象
    console.log(arr instanceof Object) //输出true

    let today = new Date()
    console.log(today instanceof Date) //输出true
    console.log(today instanceof Object) //输出true

Object.prototype.toString方法

Object.prototype.toString方法返回对象的类型字符串,因此可以用来判断一个值的类型。

Object.prototype.toString.call(value)

 上面代码表示对value这个值调用Object.prototype.toString方法。

不同数据类型的Object.prototype.toString方法返回值如下。

  • 数值:返回[object Number]
  • 字符串:返回[object String]
  • 布尔值:返回[object Boolean]
  • undefined:返回[object Undefined]
  • null:返回[object Null]
  • 数组:返回[object Array]
  • arguments 对象:返回[object Arguments]
  • 函数:返回[object Function]
  • Error 对象:返回[object Error]
  • Date 对象:返回[object Date]
  • RegExp 对象:返回[object RegExp]
  • 其他对象:返回[object Object]

这就是说,Object.prototype.toString可以看出一个值到底是什么类型。

    let a = 20
    console.log(Object.prototype.toString.call(a)) // "[object Number]"

    let b = "zhang"
    console.log(Object.prototype.toString.call(b)) // "[object String]"

    console.log(Object.prototype.toString.call(true)) // "[object Boolean]"

    console.log(Object.prototype.toString.call(undefined)) // "[object Undefined]"

    console.log(Object.prototype.toString.call(null)) // "[object Null]"

    let obj = {
        name: 'zhang',
        age: 20
    }
    console.log(Object.prototype.toString.call(obj)) // "[object Object]"

    let arr = [1, 2, 3]
    console.log(Object.prototype.toString.call(arr)) // "[object Array]"

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李 书 明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值