当前位置: 首页 > news >正文

js数据类型检测

JavaScript的数据类型检测

typeof操作符

  • 适用场景
    • 基本数据类型快速判断:适用于快速判断变量是否为numberstringbooleanundefinedfunction等基本数据类型。比如在函数参数检查中,若要求传入数字参数,可用typeof来初步判断。
    • 函数类型判断:能轻松判断一个变量是否为函数类型,在处理回调函数等场景中很实用。
  • 示例
console.log(typeof 123); // "number"
console.log(typeof 'abc'); // "string"
console.log(typeof true); // "boolean"
console.log(typeof undefined); // "undefined"
console.log(typeof function(){}); // "function"

instanceof操作符

  • 适用场景
    • 自定义对象类型判断:在面向对象编程中,用于判断一个对象是否是某个自定义构造函数的实例,方便进行多态操作和类型特定的方法调用。
    • 内置对象类型细分:可区分内置对象的具体类型,如判断一个对象是否为ArrayDate等。
  • 示例
const arr = [];
console.log(arr instanceof Array); // true

const date = new Date();
console.log(date instanceof Date); // true

constructor属性

  • 适用场景
    • 简单类型判断与回溯:可用于快速判断基本数据类型和简单对象的构造函数来源,在一些需要快速追溯数据类型创建源头的场景中有用。
    • 简单对象类型识别:对于通过构造函数创建的简单对象,可通过constructor判断其类型。
  • 示例
const num = 42;
console.log(num.constructor === Number); // true

function Person(name) {
    this.name = name;
}
const person = new Person('John');
console.log(person.constructor === Person); // true

Object.prototype.toString.call()方法

  • 适用场景
    • 精准类型判断:在需要精确判断数据类型,尤其是在区分nullarray与普通object等容易混淆的类型时,是首选方法。
    • 通用类型检测工具:可用于编写通用的类型检测工具函数,适用于各种复杂场景下的数据类型检查。
  • 示例
console.log(Object.prototype.toString.call(123)); // "[object Number]"
console.log(Object.prototype.toString.call('abc')); // "[object String]"
console.log(Object.prototype.toString.call(null)); // "[object Null]"
console.log(Object.prototype.toString.call([])); // "[object Array]"
console.log(Object.prototype.toString.call({})); // "[object Object]"

Array.isArray()方法

  • 适用场景
    专门用于判断一个值是否为数组,在处理数组相关的操作,确保操作的数据是数组类型时使用。
  • 示例
console.log(Array.isArray([])); // true
console.log(Array.isArray({})); // false

基于正则表达式的类型判断

  • 适用场景
    • 字符串格式验证:用于验证字符串是否符合特定格式,如邮箱、电话号码等。
    • 数据格式规范化:在数据输入、数据清洗等场景中,确保数据格式的正确性和一致性。
  • 示例
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
console.log(emailRegex.test('test@example.com')); // true
console.log(emailRegex.test('invalid_email')); // false

相关文章:

  • Linux 常见面试题汇总
  • Baklib一站式企业知识库搭建指南
  • Deepseek首页实现 HTML
  • 连接Sql Server时报错无法通过使用安全套接字层加密与 SQL Server 建立安全连接
  • 通俗易懂的浏览器事件循环指南(含async/await)
  • Linux提权之计划任务反弹shell提权(十一)
  • 【Viewer.js】vue3封装图片查看器
  • 【时时三省】(C语言基础)结构化程序设计方法
  • 二:前端发送POST请求,后端获取数据
  • Java并发 ThreadLocal 原理(详解)
  • c++中,什么时候应该使用mutable关键字?
  • Bash Shell控制台终端命令合集
  • C语言番外篇(3)------------>break、continue
  • 论文笔记:Autonomy-of-Experts Model
  • watchEffect 里有响应式依赖时并没有自动追踪
  • C++关键字之mutable
  • Tesseract OCR:起源、发展与完整使用指南
  • 多线程篇学习面试
  • 请谈谈 Vue 中的 key 属性的重要性,如何确保列表项的唯一标识?
  • 设计模式Python版 中介者模式
  • 深一度|“凑合过”的利物浦,英超第二冠只求性价比
  • 加总理:目前没有针对加拿大人的“活跃威胁”
  • 报告:到2030年我国无人机产业将率先实现万亿规模
  • 三杀皇马剑指四冠,硬扛到底的巴萨,赢球又赢人
  • 经济日报金观平:统筹国内经济工作和国际经贸斗争
  • 上海经信委:将推动整车企业转型,加强智能驾驶大模型等创新应用