JS中的类型检测总结

简介:

JS中的类型检测

typeof操作符

typeof对于每一种基本类型都有不同的返回值,但是对于所有的引用类型都只返回'object'

注意:对于Null类型返回'object',对于特殊的引用类型Function返回'function'

Undefined类型: 'undefined'

Boolean类型: 'boolean'

String类型: 'string'

Number类型: 'number'

引用类型/Null类型: 'object'

Function类型: 'function'

instanceof操作符

instanceof 操作符用来判断左表达式的原型链里有没有右表达式的原型。

因此在一定情况下可以用来作为引用类型的检测方法。

比如,对于某个regexp实例a,利用instanceof来检测:a._proto_为RegExp.prototype;RegExp.prototype为RegExp.prototype,两个值相等,返回true

Javascript instanceof 运算符源码

function instance_of(L, R) {//L 表示左表达式,R 表示右表达式
 var O = R.prototype;// 取 R 的显示原型
 L = L.__proto__;// 取 L 的隐式原型
 while (true) { 
   if (L === null) 
     return false; 
   if (O === L)// 这里重点:当 O 严格等于 L 时,返回 true 
     return true; 
   L = L.__proto__; 
 } 
}

在利用instanceof来进行类型检测时,左表达式为检测对象,右表达式为需要检测的引用类型的构造函数

Object
Array
Function
Date
RegExp
Function
Global
Math
//以下为基本类型的显示构造函数,这些构造函数的实例不是基本类型。
Boolean
Number
String

注:Global对象是兜底的对象,所有全局变量和全局函数都是Global对象的属性,Global对象的属性有各种原生的构造函数,还有三个特殊值NaN,undefined,Infinity。 window对象是Global对象的浏览器实现,但是window对象包含更多的原生属性。

instanceof类型检测的缺点

instanceof的左右表达式必须满足在同个全局作用域中,因为不同全局作用域的构造函数的prototype属性不是同一个对象,比如在frame1中的Array.prototype与frame2中的Array.prototype就不是一个对象。

安全的类型检测方法

Object.protptype.toString.call(value)

在任何值上调用Object.prototype.toString,都会返回一个[object NativeConstructorName]的字符串。

比如:

var a = []

console.log(Object.prototype.toString.call(a)); //'[object Array]'

对于上文提到的所有类型以及JSON类型,这个方法都会返回不同的字符串(NativeConstructorName以大写字母开头),所以这是一个类型检测的好方法。




原文发布时间为:2017/11/21
原文作者: 静默行
本文来源: 开源中国 如需转载请联系原作者
目录
相关文章
|
3月前
|
存储 JavaScript 对象存储
js检测数据类型有那些方法
js检测数据类型有那些方法
141 59
|
23天前
|
JavaScript 前端开发 开发者
如何在 JavaScript 中处理不同类型的错误?
【10月更文挑战第29天】通过对不同类型错误的准确识别和恰当处理,可以提高JavaScript程序的可靠性和稳定性,减少错误对程序运行的影响。
|
2月前
|
JavaScript 前端开发 安全
深入理解TypeScript:增强JavaScript的类型安全性
【10月更文挑战第8天】深入理解TypeScript:增强JavaScript的类型安全性
51 0
|
3月前
|
编解码 前端开发 JavaScript
javascript检测网页缩放演示代码
javascript检测网页缩放演示代码
|
4月前
|
前端开发 JavaScript 搜索推荐
Next.js 适合什么类型的项目开发?
【8月更文挑战第4天】Next.js 适合什么类型的项目开发?
228 3
|
28天前
|
Web App开发 JavaScript 前端开发
使用 Chrome 浏览器的内存分析工具来检测 JavaScript 中的内存泄漏
【10月更文挑战第25天】利用 Chrome 浏览器的内存分析工具,可以较为准确地检测 JavaScript 中的内存泄漏问题,并帮助我们找出潜在的泄漏点,以便采取相应的解决措施。
154 9
|
22天前
|
JavaScript 前端开发 Java
除了 JavaScript,还有哪些编程语言支持 Set 类型
【10月更文挑战第30天】这些编程语言中的 `Set` 类型虽然在语法和具体实现细节上有所不同,但都提供了类似的集合操作功能,方便开发者在不同的编程场景中处理集合相关的数据和逻辑。
|
23天前
|
存储 JavaScript 前端开发
js的基础类型和引用类型
【10月更文挑战第29天】理解 JavaScript 中的基础类型和引用类型的区别对于正确地编写代码和理解程序的行为非常重要。在实际开发中,需要根据具体的需求合理地选择和使用不同的数据类型,以避免出现一些意想不到的错误和问题。同时,在处理引用类型数据时,要特别注意对象的引用关系,避免因共享引用而导致的数据不一致等问题。
|
28天前
|
监控 JavaScript 前端开发
如何检测和解决 JavaScript 中内存泄漏问题
【10月更文挑战第25天】解决内存泄漏问题需要对代码有深入的理解和细致的排查。同时,不断优化和改进代码的结构和逻辑也是预防内存泄漏的重要措施。
41 6
|
2月前
|
存储 JavaScript 前端开发
JavaScript 数据类型详解:基本类型与引用类型的区别及其检测方法
JavaScript 数据类型分为基本数据类型和引用数据类型。基本数据类型(如 string、number 等)具有不可变性,按值访问,存储在栈内存中。引用数据类型(如 Object、Array 等)存储在堆内存中,按引用访问,值是可变的。本文深入探讨了这两种数据类型的特性、存储方式、以及检测数据类型的两种常用方法——typeof 和 instanceof,帮助开发者更好地理解 JavaScript 内存模型和类型检测机制。
87 0
JavaScript 数据类型详解:基本类型与引用类型的区别及其检测方法