检测数据类型的方法有哪些

1.typeof,问题是对null的结果是object

console.log(typeof 42); // "number"
console.log(typeof 'hello'); // "string"
console.log(typeof true); // "boolean"
console.log(typeof undefined); // "undefined"
console.log(typeof { a: 1 }); // "object"
console.log(typeof [1, 2, 3]); // "object"
console.log(typeof function() {}); // "function"
console.log(typeof null); // "object" (这是一个历史遗留的bug)

2.instanceof,常用来检查复杂对象

console.log([1, 2, 3] instanceof Array); // true
console.log({ a: 1 } instanceof Object); // true
console.log(function() {} instanceof Function); // true
console.log(new Date() instanceof Date); // true
console.log(null instanceof Object); // false
console.log(undefined instanceof Object); // false

3.Object.prototype.toString.call,适用于全部类型

console.log(Object.prototype.toString.call(42)); // "[object Number]"
console.log(Object.prototype.toString.call('hello')); // "[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]"
console.log(Object.prototype.toString.call({ a: 1 })); // "[object Object]"
console.log(Object.prototype.toString.call([1, 2, 3])); // "[object Array]"
console.log(Object.prototype.toString.call(function() {})); // "[object Function]"
console.log(Object.prototype.toString.call(new Date())); // "[object Date]"
console.log(Object.prototype.toString.call(/regex/)); // "[object RegExp]"
console.log(Object.prototype.toString.call(new Map())); // "[object Map]"
console.log(Object.prototype.toString.call(new Set())); // "[object Set]"

4.Array.isArray 用于数组

console.log(Array.isArray([1, 2, 3])); // true
console.log(Array.isArray({ a: 1 })); // false

5.isNaN Number.isNaN

console.log(isNaN(NaN)); // true
console.log(isNaN('hello')); // true (无法转换为数字的字符串)
console.log(Number.isNaN(NaN)); // true
console.log(Number.isNaN('hello')); // false (严格判断)

优劣:

从其中看的话有第三条的话感觉别的都没有必要了。但typeof的话使用确实更方便快捷,,对于基本类型的判断还是很方便的。而Object.prototype.toString.call的性能可能不如其他,特别在高频使用的情况下,而第四条的话他的语义性比较高,可读性更强

相关推荐

  1. 检测数据类型方法哪些

    2024-06-10 13:36:04       9 阅读
  2. 前端判断数据类型方法哪些

    2024-06-10 13:36:04       12 阅读
  3. 数据资产类型哪些

    2024-06-10 13:36:04       39 阅读
  4. *Python数据类型哪些

    2024-06-10 13:36:04       18 阅读
  5. 方法调研:DDOS检测哪些方法

    2024-06-10 13:36:04       11 阅读
  6. 【八股】MySQL表字段主要数据类型哪些

    2024-06-10 13:36:04       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-10 13:36:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-10 13:36:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-10 13:36:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-10 13:36:04       20 阅读

热门阅读

  1. 详细说说机器学习在交通领域的应用

    2024-06-10 13:36:04       8 阅读
  2. web前端微服务设计:深入剖析与实践

    2024-06-10 13:36:04       9 阅读
  3. spring和Mybatis的各种查询

    2024-06-10 13:36:04       12 阅读
  4. linux 触屏, 旋转后配置pen

    2024-06-10 13:36:04       10 阅读
  5. github的个人readme文件

    2024-06-10 13:36:04       9 阅读
  6. C#进阶高级语法之LINQ

    2024-06-10 13:36:04       8 阅读
  7. #11 提升效率:Stable Diffusion批处理技术

    2024-06-10 13:36:04       7 阅读
  8. 25-ARM-V7架构

    2024-06-10 13:36:04       8 阅读
  9. Spark MLlib 机器学习

    2024-06-10 13:36:04       10 阅读
  10. Jira的原理及应用详解(五)

    2024-06-10 13:36:04       9 阅读
  11. pytorch中的zero_grad()函数的含义和使用

    2024-06-10 13:36:04       9 阅读
  12. Ubuntu安装Protobuf

    2024-06-10 13:36:04       9 阅读