js判断数据类型几种方法

本文深入解析JavaScript中的九种数据类型,包括number、boolean、string、symbol、object、array、undefined、null和function,以及基本类型与引用类型的区别。通过typeof、instanceof、constructor和Object.prototype.toString.call()四种方法详细讲解如何判断数据类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JS数据类型的判断主要有四种方法:typeof、instanceof、constructor、Object.prototype.toString.call()。

数据类型的包括:number、boolean、string、symbol、object、array、undefined、null、function等9种数据类型

7种数据类型有包含:基本类型值和引用类型值 。 基本数据类型指的是简单的数据段,而引用数据类型指那些可能有多个值组成的对

基本类型(值类型)

  • Undefined 在使用var声明变量但未对其初始化时,或者使用了一个并未声明的变量时,又或者使用了一个并不存在的对象属性时,这个变量的值就是undefined。
  • Null 从逻辑上看,null值表示一个空对象指针,独一无二。
  • Boolean true、false
  • Number NaN,即非数值(Not a Number)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)
  • String 字符串可以由’’ 或 “” 表示。 ES中字符串是不可改变的,也就是说,字符串一旦创建,它们的值就不能改变。要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量。
    这五种基本数据类型是按值访问的,因为可以操作保存在变量中的实际的值。

复杂类型(引用类型)

  • Object 对象其实就是一组数据和功能的集合。对象可以通过new操作符后跟要创建的对象类型的名称来创建。 而创建Object的实例并为其添加属性和方法,就可以自定义对象。
    1. Object类型
    2. Array类型
    3. Date类型
    4. RegExp类型
    5. Function类型

引用类型的值是保存在内存中的对象。与其他语言不同,js不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间。 操作对象时,实际上是在操作对象的引用而不是实际的对象。(这种说法不太严谨,为对象添加属性时,操作的是实际的对象)。

值类型与引用类型的差别

  • 基本类型在内存中占据固定大小的空间,因此被保存在栈内存中
  • 从一个变量向另一个变量复制基本类型的值,复制的是值的副本
  • 引用类型的值是对象,保存在堆内存
  • 包含引用类型值的变量实际上包含的并不是对象本身,而是一个指向该对象的指针
  • 从一个变量向另一个变量复制引用类型的值的时候,复制是引用指针,因此两个变量最终都指向同一个对象

1.typeof
检测基本数据类型的最佳选择是使用typeof
eg:
typeof Symbol(); // symbol 有效
typeof ‘’; // string 有效
typeof 1; // number 有效
typeof true; // boolean 有效
typeof undefined; // undefined 有效
typeof new Function(); // function 有效
typeof null; // object 无效
typeof [] ; // object 无效
typeof new Date(); // object 无效
typeof new RegExp(); // object 无效
返回一个表示数据类型的字符串,返回结果包括:number、boolean、string、symbol、object、undefined、function等7种数据类型,但不能判断null、array
由结果可知,除了在检测null时返回 object 和检测function时放回function。对于引用类型返回均为object

2.instanceof
检测引用型数据类型时的最佳选择是instanceof
eg:
[] instanceof Array; // true
{} instanceof Object; // true
new Boolean instanceof Boolean; // true
new Date() instanceof Date; // true
new RegExp() instanceof RegExp; // true
null instanceof Null; // 报错
undefined instanceof undefined; // 报错
用来判断A是否为B的实例,A instanceof B, 返回 boolean 值。instanceof 用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性,但它不能检测 null 和 undefined

3.constructor
查看对象对应的构造函数
object的每个实例都具有属性constructor,保存着用于创建当前对象的函数。
eg:
console.log(bool.constructor === Boolean); // true
console.log(num.constructor === Number); // true
console.log(str.constructor === String); // true
console.log(arr.constructor === Array); // true
console.log(obj.constructor === Object); // true
console.log(fun.constructor === Function); // true
undefined和null没有contructor属性
constructor不能判断undefined和null,并且使用它是不安全的,因为contructor的指向是可以改变的。

4.Object.prototype.toString.call()
一般数据类型都能够判断,最准确最常用的一种
eg:
console.log(Object.prototype.toString.call(bool)); // [object Boolean]
console.log(Object.prototype.toString.call(num)); // [object Number]
console.log(Object.prototype.toString.call(str)); // [object String]
console.log(Object.prototype.toString.call(und)); // [object Undefined]
console.log(Object.prototype.toString.call(nul)); // [object Null]
console.log(Object.prototype.toString.call(arr)); // [object Array]
console.log(Object.prototype.toString.call(obj)); // [object Object]
console.log(Object.prototype.toString.call(fun)); // [object Function]
console.log(Object.prototype.toString.call(new Date())) ; // [object Date]
console.log(Object.prototype.toString.call(new RegExp())) ; // [object RegExp]
console.log(Object.prototype.toString.call(new Error())) ; // [object Error]


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值