typeof与instanceof的区别

news/2024/11/17 5:28:59/

最近又用到了对一个类型进行类型判断,这里对两种判断方法进行一个总结

相同点:

typeof与instanceof都是判断数据类型的方法

区别:

typeof会返回一个变量的基本类型(特殊 typeof null 会为object 但这只是JavaScript 存在的一个悠久 Bug),除了function会被检测出来,其他对象类型都为object,基本类型会反回对应的类型。

下面是一个简单示范

console.log(typeof a);    //'undefined'console.log(typeof(true));  //'boolean'console.log(typeof '123');  //'string'console.log(typeof 123);   //'number'console.log(typeof NaN);   //'number'console.log(typeof null);  //'object'    var obj = new String();console.log(typeof(obj)); //'object'var  fn = function(){};console.log(typeof(fn));  //'function'

typeof原理:js 在底层存储变量的时候,会在变量的机器码的低位1-3位存储其类型信息:

对象:000  浮点数:010  字符串:100  布尔:110  整数:1  null:全是0(因此会被误以为是对象类型)undefined:用 −2^30 整数来表示因此要避免用typeof 判断null

instanceof返回的是一个布尔值 可以准确的判断复杂的引用类型,但是不能判断基础数据类型

这是因为instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上

所以也可以用来判断一个实例对象是不是某个构造函数产生的

 var Person = function () {}var p1 = new Person();function isinstance(a, b) {while (a !== null) {if (a.__proto__ === b.prototype) {return true;} else {a = a.__proto__}}return false;}console.log(isinstance(p1, Object));//trueconsole.log(isinstance(p1, Person));//true

如果需要通用检测数据类型,可以采用Object.prototype.tostring

console.log(Object.prototype.toString.call('aa'));//[object,string]

也可以用===

这里会涉及到原型、原型链部分的知识了,有兴趣可以看看我之前的博客

原型、原型链的关系?如何用自己的语言来叙述?_js 把方法挂到docment上_时雨.`的博客-CSDN博客


http://www.ppmy.cn/news/1043155.html

相关文章

SystemVerilog interface使用说明

1. Interface概念 System Verilog中引入了接口定义,接口与module 等价的定义,是要在其他的接口、module中直接定义,不能写在块语句中,跟class是不同的。接口是将一组线捆绑起来,可以将接口传递给module。 2. 接口的优…

【CSS动画04--input输入动画】

input输入动画 介绍代码HTMLCSS CSS动画04--input输入框 介绍 此动画是当点击input框内部外部不同的动画&#xff0c;以上是鄙人录制得一个小视频&#xff0c;供大家参考&#xff0c;&#x1f92d; 代码 HTML <!DOCTYPE html> <html><head><meta http…

JavaScript(JavaEE初阶系列13)

目录 前言&#xff1a; 1.初识JavaScript 2.JavaScript的书写形式 2.1行内式 2.2内嵌式 2.3外部式 2.4注释 2.5输入输出 3.语法 3.1变量的使用 3.2基本数据类型 3.3运算符 3.4条件语句 3.5循环语句 3.6数组 3.7函数 3.8对象 3.8.1 对象的创建 4.案例演示 4…

强训第34天

选择 A B D 由协议处理粘包问题 C C C host字段表示要访问的IP地址 Connection为Close&#xff0c;为短连接 A RTT报文往返时间&#xff0c;根据窗口大小和拥塞控制可以得知发了1 2 4 8 总共16个接收缓存并且没由进行数据提取&#xff0c;则剩余接收量为16-151&#xff0c;会经…

【100天精通python】Day40:GUI界面编程_PyQt 从入门到实战(完)_网络编程与打包发布

目录 8 网络编程 8.1 使用PyQt 网络模块进行网络通信 服务器端示例 客户端示例 8.2 处理网络请求和响应 9 打包和发布 9.1 创建可执行文件或安装程序 9.2 解决依赖问题 9.3 发布 PyQt 应用到不同平台 9.3.1 发布到 Windows 9.3.2 发布到 macOS 9.3.3 发布到 Linux 9…

寻路算法小游戏

寻路算法小demo 寻路算法有两种&#xff0c;一种是dfs 深度优先算法&#xff0c;一种是 dfs 深度优先算法 深度优先搜索的步骤分为 1.递归下去 2.回溯上来。顾名思义&#xff0c;深度优先&#xff0c;则是以深度为准则&#xff0c;先一条路走到底&#xff0c;直到达到目标。这…

Python学习笔记_进阶篇(二)_django知识(一)

本章简介&#xff1a; Django 简介Django 基本配置Django urlDjango viewDjango 模板语言Django Form Django 简介 Django是一个开放源代码的Web应用框架&#xff0c;由Python写成。采用了MVC的软件设计模式&#xff0c;即模型M&#xff0c;视图V和控制器C。它最初是被开发来…

【LVS】2、部署LVS-DR群集

LVS-DR数据包的流向分析 1.客户端发送请求到负载均衡器&#xff0c;请求的数据报文到达内核空间&#xff1b; 2.负载均衡服务器和正式服务器在同一个网络中&#xff0c;数据通过二层数据链路层来传输&#xff1b; 3.内核空间判断数据包的目标IP是本机VIP&#xff0c;此时IP虚…