JS判断数据类型

6 篇文章 0 订阅
1、typeof

typeof判断数据类型(判断Array,Object,null,Date,RegExp,Error这几个类型都被typeof判断为object都返回object)

typeof(null) == 'object' // true
typeof NaN == 'number' // NaN 是Number中的一种,非Number

Number,String,Boolean,Function,undefined,如果想判断这几种类型,那就可以使用typeof。

2、instanceof

instanceof判断对象的原型链是否是指向构造函数的prototype :arr instanceof Array

123 instanceof Number // false
'123' instanceof String // false
false instanceof Boolean // false
null instanceof Object // Uncaught TypeError: Right-hand side of ‘instanceof’ is not an object

本质上NullObject不是一个数据类型,null值并不是以Object为原型创建出来的。所以null instanceof Object报错。
但 null 确实时JavaScript中用来表示空引用的一个特殊值,typeof null == ‘object’

== 注 == Number,String,Boolean没有检测出他们的类型,但是可以检测出通过new构造函数的方式创建的数据。

var num = new Number(123);
var str = new String('dsfsf');
var boolean = new Boolean(false);

== 注==判断是数组时,不能用instanceof,因为

[1,2] instanceof Array // true
[1, 2] instanceof Object // true

Instanceof 代码的实现:

function _instanceof(L, R) { // L:instanceof左表达式,R:为右表达式
	let Ro = R.prototype // 原型
	L = L.__proto__
	While(true) {
		if (L === null) { // 当到达L原型链顶端还未匹配,返回false
			return false
		}
		If (L === Ro) {
			return true
		}
	}
}

3、constructor

对象的constructor属性:arr.constructor === Array
constructor是prototype对象上的属性,指向构造函数。根据实例对象寻找属性的顺序,若实例对象上没有实例属性或方法时,就去原型链上寻找,因此,实例对象也是能使用constructor属性的。

new Number(234).constructor  // ƒ Number() { [native code] }
undefined.constructor // Uncaught TypeError: Cannot read property 'constructor' of undefined at <anonymous>

除了undefinednull之外,其他类型都可以通过constructor属性来判断类型。

4、Object.prototype.toString.call(arr)

Object.prototype.toString.call(arr)
可以通过toString() 来获取每个对象的类型。为了每个对象都能通过 Object.prototype.toString() 来检测,需要以 Function.prototype.call() 或者 Function.prototype.apply() 的形式来调用。
在这里插入图片描述

Object.prototype.toString.call(123) // "[object Number]"
Object.prototype.toString.call([1,2]) // "[object Array]"
Object.prototype.toString.call({name: 'hh'}) // "[object Object]"
Object.prototype.toString.call(function(){}) // "[object Function]"
Object.prototype.toString.call(false) // "[object Boolean]"

这样可以看到使用Object.prototype.toString.call() 的方式来判断一个变量的类型是最准确的方法。

总结:
封装一个获取变量准确类型的函数

fucntion getType(obj) {
	let type = typeof obj
	If (type !== 'object') {
		return type
	}
	// 如果不是object类型的数据,直接用typeof 就能判断出来
	// 如果是object 类型的数据,准确判断用 Object.prototype.toString.call()来判断
	return Object.prototype.toString.call(obj).replace(/^\[object (\S+)\]$/, '$1')
	// \S 非空白字符
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 在JavaScript中,可以使用typeof运算符来判断数据类型。typeof通常用于判断基本数据类型,返回表示数据类型的字符串。例如,typeof 1会返回"number",typeof 'a'会返回"string",typeof true会返回"boolean",typeof undefined会返回"undefined",typeof null会返回"object",typeof {}会返回"object",typeof [1,2,3会返回"object",typeof new Fn()会返回"object",typeof new Array()会返回"object"。然而,typeof不能准确判断null的数据类型,null会被判断为"object"。此外,jQuery也提供了一系列工具方法来判断数据类型,例如jQuery.isArray()用于判断是否为数组,jQuery.isEmptyObject()用于判断是否为空对象,jQuery.isFunction()用于判断是否为函数等等。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [JS判断数据类型的5种方法](https://blog.csdn.net/weixin_45571121/article/details/120518849)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [js判断数据类型(全)](https://blog.csdn.net/qq_30136729/article/details/124090314)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值