简单了解JavaScript 中的变量类型判断方法及其应用

简单了解JavaScript 中的变量类型判断方法及其应用

前言

在 JavaScript 中,正确判断变量的类型对于编写健壮的代码至关重要。虽然 JavaScript 提供了 typeof 运算符来简单地判断基本类型,但它在某些情况下可能不够精确。例如,typeof null 返回 "object",这并不符合我们预期的行为。因此,为了进行更加精确的类型判断,我们通常会使用 Object.prototype.toString.call() 方法。

typeof()

typeof 是一个 JavaScript 操作符,用于确定变量或表达式的数据类型

判断原理

  • typeof的判断原理是:将值转换为二进制后看其前三位是不是0,所有的引用类型(除了function)的二进制前三位都是0,null的二进制全部是0

作用类型

    1. 可以判断除了null之外的原始类型
    1. 无法判断除function之外的引用类型

简单示例

js 复制代码
let str='Hello'
let num=123
let flag=false
let un=undefined
let nu=null

console.log(typeof(str))//string
console.log(typeof(num))//number
console.log(typeof(flag))//boolean
console.log(typeof(un))//undefined
console.log(typeof(nu))//object

let obj={}
let arr=[]
let fn=function(){}
let date=new Date()

console.log(typeof(obj))//object
console.log(typeof(arr))//object
console.log(typeof(fn))//function
console.log(typeof(date))//object

输出结果:

instanceof()

判断原理

  • instanceof是通过原型链的查找来判断的

作用类型

    1. 只能用于判断引用类型

简单示例

js 复制代码
let str='Hello'
let num=123
let flag=false
let un=undefined
let nu=null

console.log(str instanceof String)//false
console.log(num instanceof Number)//false
console.log(flag instanceof Boolean)//false
// console.log(un instanceof undefined)//无法判断,因为undefined和null无法检测
// console.log(nu instanceof null)//false


let obj={}
let arr=[]
let fn=function(){}
let date=new Date()

console.log(obj instanceof Object)//true
console.log(arr instanceof Array)//true
console.log(fn instanceof Function)//true
console.log(date instanceof Date)//true
console.log(arr instanceof Date)//false

输出结果:

Object.prototype.toString()

  • 1.Object.prototype.toString.call()

    • Object.prototype.toString.call() 是 JavaScript 中用来判断数据类型的一种常用方法。它的主要作用是返回传入值的内部属性 [[Class]] 的字符串表示,通常用来做精确的类型判断。
    • 简单示例
    js 复制代码
    let a={}
    let b=[]
    let c='hello'
    
    // console.log(Object.prototype.toString(a));
    console.log(Object.prototype.toString.call(a)); 
    console.log(Object.prototype.toString.call(b)); 
    console.log(Object.prototype.toString.call(c));
  • 2.toString()
    *

    1. 对象的toString()
      1. 数组的toString() 将数组中的元素用逗号的方式拼接成字符串
      1. 其它的toString() 直接将值修改成字符串字面量
    • 简单示例

      js 复制代码
      let obj = {};
      console.log(obj.toString()); // "[object Object]"
      let arr = [1, 2, 3];
      console.log(arr.toString()); // "1,2,3"
      let num = 123;
      console.log(num.toString()); // "123"
  • 3.Object.prototype.toString(x)
    *

    1. 如果toString接收的值是undefined,则返回"[object Undefined]"
      1. 如果toString接收的值是null,则返回"[object Null]"
      1. 调用ToObject(x)将x转为对象,此时得到的对象内部一定拥有一个属性[[Class]],而该属性[[Class]]的值就是x的类型
      1. 设class是[[Class]]的值
      1. 返回由"[object "和class和"]"连接而成的字符串
    • 简单示例:

      js 复制代码
      let a={}
      let b=[]
      let c='hello'
      
      console.log(Object.prototype.toString(a));
      console.log(Object.prototype.toString(b));
      console.log(Object.prototype.toString(c));

Array.isArray()

Array.isArray() 是专门用来判断是否为数组的方法,比较简单直接。

作用类型

  • 用来判断是否为数组。

简单示例:

ini 复制代码
javascriptCopy Code
let arr = [];
let obj = {};

console.log(Array.isArray(arr)); // true
console.log(Array.isArray(obj)); // false

小结

在 JavaScript 编程中,准确判断变量类型是确保代码稳健性的关键。尽管 typeof 提供了基本类型的判断,但其在处理引用类型上存在限制,如不能准确区分数组和对象。为了解决这一问题,通常使用 Object.prototype.toString.call() 方法,它能精确返回变量的类型信息,包括处理特殊值如 null 和 undefined。对于数组判断,推荐使用 Array.isArray() 方法,因其简洁明了。综上,选择适当的方法能有效提升 JavaScript 代码的可靠性和可维护性。

相关推荐
耶啵奶膘1 小时前
uniapp-是否删除
linux·前端·uni-app
王哈哈^_^3 小时前
【数据集】【YOLO】【目标检测】交通事故识别数据集 8939 张,YOLO道路事故目标检测实战训练教程!
前端·人工智能·深度学习·yolo·目标检测·计算机视觉·pyqt
cs_dn_Jie3 小时前
钉钉 H5 微应用 手机端调试
前端·javascript·vue.js·vue·钉钉
开心工作室_kaic4 小时前
ssm068海鲜自助餐厅系统+vue(论文+源码)_kaic
前端·javascript·vue.js
有梦想的刺儿4 小时前
webWorker基本用法
前端·javascript·vue.js
cy玩具5 小时前
点击评论详情,跳到评论页面,携带对象参数写法:
前端
清灵xmf5 小时前
TypeScript 类型进阶指南
javascript·typescript·泛型·t·infer
小白学大数据5 小时前
JavaScript重定向对网络爬虫的影响及处理
开发语言·javascript·数据库·爬虫
qq_390161775 小时前
防抖函数--应用场景及示例
前端·javascript
334554326 小时前
element动态表头合并表格
开发语言·javascript·ecmascript