美文网首页
JavaScript 判断变量类型的3种方法,类型检查

JavaScript 判断变量类型的3种方法,类型检查

作者: mudssky | 来源:发表于2021-06-01 14:27 被阅读0次

我们先准备一组不同变量的列表用于测试

const allVarsMap = {
  // 数字
  num: 123,
  // Infinity
  numInfinity: 1 / 0,
  // NaN
  numNaN: null / 0,
  // 字符串
  str: 'abcdef',
  // 布尔类型
  bool: true,
  // 数组
  arr: [1, 2, 3, 4],
  // json对象
  jsonObj: { name: 'wenzi', age: 25 },
  // 函数
  func: function () {
    console.log('this is function')
  },
  // 箭头函数
  arrowfunc: () => {
    console.log('arrow function')
  },
  // undefined类型
  und: undefined,
  // null类型
  nul: null,
  // date类型
  date: new Date(),
  // 正则表达式
  reg: /^[a-zA-Z]{5,20}$/,
  // 异常类型
  error: new Error(),
  //symobl类型
  symbolType: Symbol('hello'),
}

01.使用typeof判断变量类型

typeof可以判断变量类型,但是这个方法只能区分基本类型(string,number),对于引用类型,比如数组和对象,他返回的都是object.无法进行精确的判断

我们执行下面的函数可以得到typeof判断的结果

function useTypeof(allVarsMap) {
  console.log('typeof result:')
  for (let key in allVarsMap) {
    console.log(`typeof ${key} is ${typeof allVarsMap[key]}`)
  }
}

我们看到,他把infinity和NaN都识别为number,Null,array和obj都识别成obj,也无法区分普通函数和箭头函数。

typeof result:
typeof num is number
typeof numInfinity is number
typeof numNaN is number
typeof str is string
typeof bool is boolean
typeof arr is object
typeof jsonObj is object
typeof func is function
typeof arrowfunc is function
typeof und is undefined
typeof nul is object
typeof date is object
typeof reg is object
typeof error is object
typeof symbolType is symbol

02.instanceof检查变量类型

instanceof 是用于判断对象的类型的,和typeof不同的地方是,你需要明确指出类型。

它实际上是判断你当前实例的构造函数的原型链上是否有你指定的对象。

下面是使用例子

console.log(allVarsMap.date ``instanceof` `Date) // true
console.log(allVarsMap.func ``instanceof` `Function) // true

03.使用Object.prototype.toString.call

可以返回对象内部的字符串。

执行下面的函数查看执行结果

function useProtoStr(allVarsMap) {
  console.log('proto string result:')
  for (let key in allVarsMap) {
    console.log(
      `protoStr of ${key} is ${Object.prototype.toString.call(
        allVarsMap[key]
      )} `
    )
  }
}
useProtoStr(allVarsMap)

下面是执行结果,可以看到,各种类型都能比较好地进行区分了。

proto string result:
protoStr of num is [object Number]
protoStr of numInfinity is [object Number] 
protoStr of numNaN is [object Number]      
protoStr of str is [object String]
protoStr of bool is [object Boolean]       
protoStr of arr is [object Array]
protoStr of jsonObj is [object Object]     
protoStr of func is [object Function]      
protoStr of arrowfunc is [object Function] 
protoStr of und is [object Undefined]      
protoStr of nul is [object Null]
protoStr of date is [object Date]
protoStr of reg is [object RegExp]
protoStr of error is [object Error]
protoStr of symbolType is [object Symbol]

综上,如果我们要判断一个变量地类型,可以先用typeof 判断是不是基本类型的一种,如果是object类型,再使用Object.prototype.toString.call来获取准确的类型。

相关文章

  • JavaScript 判断变量类型的3种方法,类型检查

    我们先准备一组不同变量的列表用于测试 01.使用typeof判断变量类型 typeof可以判断变量类型,但是这个方...

  • 前端高频面试题-JavaScript部分

    JavaScript的数据类型 基本类型 引用类型 举例 Symbol的作用 判断变量的类型 typeof ins...

  • 前端面试常见问题

    1、JavaScript中的数据类型有哪些? 2、如何判断一个变量的类型是Array 还是Object? 3、数组...

  • javascript基础

    javascript: 变量的使用、数据类型、if判断、循环语句 javascript 中的注释: //...

  • TS 前置知识

    JavaScript 是一种弱类型的,动态类型检查的语言。 弱类型 在定义变量的时候,我们可以为变量赋值任何数据,...

  • JavaScript 变量类型的判断

    JavaScript存在两套类型系统:一套是基本数据类型,另一套是对象类型系统。基本数据类型在ES6中包括7种,分...

  • 《Java 8 实战》Ch3: Lambda表达式(下):类型与

    李文轩 2019-04-23 3.5 类型的检查和判断;变量捕获限制 类型检查 Lambda的类型是从使用Lamb...

  • Vue.js --- Flow

    Flow的工作方式 类型检查分为2种方式: 类型判断:通过变量的使用上下文来推断出变量类型,然后根据这些推断来检查...

  • React PropTypes 校验 与 DefaultProp

    propTypes 类型检查JavaScript 是一门弱类型的语言,允许变量类型做隐式转换。为了减少这种错误,你...

  • js浅拷贝和深拷贝

    javaScript的变量类型 javaScript的变量类型基本类型:引用类型: 浅拷贝和深拷贝的区分 浅拷贝浅...

网友评论

      本文标题:JavaScript 判断变量类型的3种方法,类型检查

      本文链接:https://www.haomeiwen.com/subject/pybwsltx.html