JavaScript 判断数据类型的多种方式

一、数据类型

基本数据类型(7个)

  • Number
  • String
  • Boolean
  • Undefined
  • null
  • symbol:代表创建后独一无二且不可变的数据类型,它主要是为了解决可能出现的全局变量冲突的问题。
  • BigInt
    基本数据类型存放在内存的栈中。

引用数据类型(3个)

  • Object
  • Function
  • Array
    由于占据空间大、大小不固定,如果存储在栈中,将会影响程序运行的性能。故引用数据类型存放在内存的堆中,在栈中存放堆的指针(地址)。

二、判断数据类型

1. typeof

(1)基本数据类型:除了null被判断为object,其他全部能判断
(2) 引用数据类型:数组、对象被判断为object、函数被判断为function

console.log(typeof 2);               // number
console.log(typeof true);            // boolean
console.log(typeof 'str');           // string
console.log(typeof []);              // object    
console.log(typeof function(){});    // function
console.log(typeof {});              // object
console.log(typeof undefined);       // undefined
console.log(typeof null);            // object

2. instanceof

instanceof原理:A instanceof B,查找B的原型是否处在A的原型链上
(1) 基本数据类型:不能判断
(2) 引用数据类型:数组、对象、函数全部可以判断

console.log(2 instanceof Number);                    // false
console.log(true instanceof Boolean);                // false 
console.log('str' instanceof String);                // false 
 
console.log([] instanceof Array);                    // true
console.log(function(){} instanceof Function);       // true
console.log({} instanceof Object);                   // true

3. constructor

在这里插入图片描述

在构造函数的原型中,有一个constructor属性指向原型对象,而实例化对象会拥有构造函数原型上的函数,所以实例化对象拥有constructor属性,且指向构造函数(无论这个实例化对象是基本数据类型还是引用数据类型)
例如:

console.log((2).constructor === Number.prototype.constructor)   //true

(1)基本数据类型:除了null、undefined,其他全部能判断
(2) 引用数据类型:数组、对象、函数全部可以判断

console.log((2).constructor === Number);        // true
console.log((true).constructor === Boolean);    // true
console.log(('str').constructor === String);    // true
console.log(([]).constructor === Array);        // true
console.log((function() {}).constructor === Function); // true
console.log(({}).constructor === Object);       // true

4. Object.prototype.toString.call()

唯一所有类型都可以判断的方式
(1) 基本数据类型:全部可以判断,null、undefined也可以判断
(2) 引用数据类型:全部可以判断

var a = Object.prototype.toString;
 
console.log(a.call(2));   //[object Number]
console.log(a.call(true));  //[object Boolean]
console.log(a.call('str'));  //[object String]
console.log(a.call([]));   //[object Array]
console.log(a.call(function(){}));   //[object Function]
console.log(a.call({}));   //[object Object]
console.log(a.call(undefined));   //[object Undefined]
console.log(a.call(null));   //[object Null]

三、判断数组类型

1. instanceof

console.log(arr instanceof Array);

2. Array.isArray(arr)

console.log(Array.isArrray(arr));

3. Object.prototype.toString.call()

console.log(Object.prototype.toString.call(obj).slice(8,-1) === 'Array');

4. 通过原型链

console.log(arr.__proto__ === Array.prototype);

5. 通过constructor

console.log(arr.constructor === Array);

四、如何判断null

“===”

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值