方法的返回值类型是object_JavaScript中如何判断类型

6980bb6ad72f10838b84ce1890fddfd8.png

1. typeof

  • typeof (整数/小数/自然对数Math.LN2/正无穷大数Infinity) ===> numbertypeof NaN ===> number
  • typeof (function(){}) ===> functiontypeof Math.sin ===> function
  • typeof undefined ===> undefined
  • typeof 'xxxx' ===> stringtypeof '' ===> string
  • typeof true/false ===> boolean
  • typeof Symbol() ===> symboltypeof Symbol.iterator ===> symbol
  • typeof {}/new Date()/[]/null/new RegExp() ===> object

typeof的方法当遇到对象时, 得到的结果都是object, 并不能准确的判断, 因此此法并不完美.

2. Object.prototype.toString

原理:Object原型上的toString()方法可以判断出类型, 格式一般为[object Function]/[object Number].... 这里需要借助call来改变this的指向. 例如:

var arr = [1, 2, 3] // 定义一个数组对象
console.log(Object.prototype.toString.call(arr)) // 改变arr的this指向, 调用Object原型链上的toString()方法, 输出[object Array]

那么, 为什么不可以直接使用Array/Function...内置的toString()方法来判断类型呢? 这是因为这些对象内置都有toString()方法, 只不过被重写了, 调用toString()方法输出的结果各不一样.

因此这种方式用来判断换类型比较完美, 且兼容性比较好.

3. $.type()

jQuery内置的方法, eg:

$.type(3) ===> number
$.type(function(){}) ===> function
$.type(null) ===> null
....

优点:

  • 简洁
  • 兼容性好
  • 能够准确判断类型

缺点:

  • 需要引入整个jQuery包, 增加了项目体积

4. instanceof

instanceof 用来比较一个对象是否为某一个构造函数的实例。注意,instanceof运算符只能用于对象,不适用原始类型的值。

格式为: 实例 instanceof 构造函数, 返回值为true/false

注意: 基本数据类型, 如string/null/undefined/boolean均会返回false, 但function可以用来判断, 如:

function(){} instanceof Object // true, function在js中也是一种对象
function(){} instanceof Function // true

用此法来判断对象比较实用, 但是遇到基本类型时显得有点鸡肋, 可视情况选择这种方法来判断了类型

5. constructor

constructor属性是对象才拥有的,它是从一个对象指向一个函数,含义就是指向该对象的构造函数,每个对象都有构造函数.

返回值为true/false, 例如:

new Number(3).constructor === Number  // true
new Function().constructor === Function  // true
''.constructor === String // true
new Boolean().constructor === Boolean // true
new Date().constructor === Date // true
...

有一点需要注意, 有时继承的时候constructor会被重写, 这里不做过多表述.

6. JS新语法判断类型

isArray() // 返回值会false/true

isNaN() // 判断是否为NaN

参考资料:

  1. js基础(一):判断类型
  2. 由Object.prototype.toString.call( )引发关于toString( )方法的思考
  3. 深入理解Object.prototype.toString.call()
  4. typeof和instanceof原理
  5. 帮你彻底搞懂JS中的prototype、proto与constructor(图解)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/410105.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从mysql8.0读取数据并形成pandas dataframe类型数据,精确定位行列式中的元素,并读取...

from pandas import * import pandas as pd from sqlalchemy import create_engine engine create_engine("mysqlpymysql://root:wenwajiao127.0.0.1:3306/ryandb?charsetUTF8MB4")#charset设置用于mysql8.0的新型字符集,清根据你的需要设定 print(engi…

c++代码整洁之道pdf_别再问如何用Python提取PDF内容了!

公众号后台回复“图书“,了解更多号主新书内容作者:陈熹来源:早起Python导读大家好,在之前的办公自动化系列文章中我们已经详细介绍了👉如何使用Python批量处理PDF文件,包括合并、拆分、水印、加密等操作。…

[html] 你知道什么是粘性布局吗?

[html] 你知道什么是粘性布局吗? MDN 是这样解释的:Sticky positioning can be thought of as a hybrid of relative and fixed positioning. A stickily positioned element is treated as relatively positioned until it crosses a specified thresh…

vim编辑模式_sublime vim模式和快捷键

vim的四种模式及模式切换vim一共有4个模式&#xff1a;正常模式 (Normal-mode) 插入模式 (Insert-mode)命令模式 (Command-mode)可视模式 (Visual-mode)正常模式启动vim后默认处于正常模式。不论位于什么模式&#xff0c;按下<Esc>键(有时需要按两下&#xff09;都会进入…

windows下启动activemq闪退

本地测试activemq时,双击bin下的activemq.bat,命令行出现闪现问题 解决:在当前目录启动命令行 输入 activemq-admin.bat start 可以正常启动 原因暂时还不知道 转载于:https://www.cnblogs.com/jiushixihuandaqingtian/p/11393557.html

win7下注册s2008

今天打开vs居然提示获取了&#xff0c;按照xp的办法没法注册&#xff0c;真是纠结啊。结果点击卸载按钮就给卸载了。不得不重新安装。 百度一搜&#xff0c;才知道升级注册的按钮被屏蔽了。╮(╯▽╰)╭&#xff0c;网上有如下代码搜索窗口并把它显示出来。 关键函数如下&#…

python读取txt文件_python实现读写txt文件的几种方法

一、读写模式&#xff1a;w&#xff1a;向文件中写入内容&#xff0c;w会清空原来文本内容a&#xff1a;向文件中追加内容r&#xff1a;从文件中读取内容wb&#xff1a;以二进制形式写入内容。rb&#xff1a;以二进制形式读文件内容ab&#xff1a;以二进制形式追加内容a、r、w&…

[html] html5的Notification桌面通知如何请求权限?

[html] html5的Notification桌面通知如何请求权限&#xff1f; Notification.requestPermission(callback);个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

python代码转换为pytorch_pytorch使用 to 进行类型转换方式

在程序中&#xff0c;有多种方法进行强制类型转换。本博文将介绍一个非常常用的方法&#xff1a;to()方法。我们通常使用它来进行GPU和CPU的类型转换&#xff0c;但其实也可以用来进行torch的dtype转换。常见方法&#xff1a;tensor.to(‘cuda:0)先看官网介绍&#xff1a;**Per…

Oracle 时区(TimeZone )-- DST

Daylight Savings Time (DST) 指 定一个时区的时候&#xff0c;可以使用数字(-05:00)&#xff0c;缩写(EST)或者地区名称(US/Eastern)。 在多数情况下&#xff0c;它们的效果是一样的。但是在DST的处理过 程中&#xff0c;如果使用地区名称来指定时区&#xff0c;ORACLE会自动进…

centos7升级openssh

注意&#xff1a; openssl版本(openssl版本要大于1.0.1&#xff0c;zlib版本要大于1.1.4) 一、安装依赖包 yum -y install gcc make perl # zlib zlib-devel yum install -y gcc openssl-devel pam-devel rpm-buildyum install telnet-ser…

java 复制对象_Java程序员必备:序列化全方位解析

前言 相信大家日常开发中&#xff0c;经常看到Java对象“implements Serializable”。那么&#xff0c;它到底有什么用呢&#xff1f;本文从以下几个角度来解析序列这一块知识点~什么是Java序列化&#xff1f;为什么需要序列化&#xff1f;序列化用途Java序列化常用API序列化的…

[html] history和hash两种路由方式的最大区别是什么?

[html] history和hash两种路由方式的最大区别是什么&#xff1f; hash 只在当前URL内刷新&#xff0c;history支持多个URL个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端…

decimal类型对象里面定义什么类型_奥斯塔罗 单身开启桃花雷达 现阶段的我适合什么类型的对象?...

相信单身朋友总好奇下一位对象是否出现了&#xff1f;或是这么多人我该如何察觉下一位对象呢&#xff1f;如果单身的你正寻找对象中那就跟奥斯老师一起来看看下一位对象的个性与特征吧&#xff01;&#xff1c;&#xff1c;直觉选一张牌&#xff1e;>牌l选择到这组牌的朋友&…

Centos中查找文件、目录、内容

1、查找文件 find / -name filename2、查找文件夹&#xff08;目录&#xff09; find / -name path -type d3、查找内容 find . | xargs grep -ri content3.1、只显示文件名称 find . | xargs grep -ril content 只显示文件名称转载于:https://www.cnblogs.com/xiaohaojs/p/114…

[html] 在网格布局中都有哪些概念呢?比如:网格线

[html] 在网格布局中都有哪些概念呢&#xff1f;比如&#xff1a;网格线 容器&#xff1a;采用网格布局的区域项目&#xff1a;容器内部采用网格定位的子元素行&#xff1a;容器里面的水平区域列&#xff1a;容器里面的垂直区域单元格&#xff1a;行和列的交叉区域网格线&#…

win7系统怎么拷贝到u盘_Win7系统电脑无法识别U盘启动盘怎么办?

U盘想必大家不会陌生&#xff0c;通常会用来存储一些资料便于移动办公&#xff0c;有些小伙伴也会将其变更成U盘启动盘&#xff0c;帮助电脑重装系统。但是有用户反馈U盘插入电脑后无法识别启动&#xff0c;这要怎么办呢&#xff1f;其实很简单&#xff0c;下面小编就给大家带来…

GStreamer基础教程07 - 播放速率控制

摘要 在常见的媒体播放器中&#xff0c;通常可以看到快进&#xff0c;快退&#xff0c;慢放等功能&#xff0c;这部分功能被称为“特技模式&#xff08;Trick Mode&#xff09;”&#xff0c;这些模式有个共同点&#xff1a;都通过修改播放的速率来达到相应的目的。 本文将介绍…

python老鼠书名字_芜湖学习python公司推荐

芜湖学习python公司推荐苏州翔锐信息科技有限公司&#xff0c;成立于2011年&#xff0c;是一家人工智能教育公司&#xff0c;目前团队规模200人&#xff0c;覆盖用户已超600万。我们致力于借助科技的技术力量&#xff0c;以认知科学作基础&#xff0c;研究人的学习行为和学习过…

数据库日志

很多时候需要追踪记录的变更情况&#xff0c;AX里有数据库日志来完成这件事情&#xff0c;操作路径为:系统管理->设置->数据库日志.如果按照向导添加后没看到相应的记录&#xff0c;可以尝试如下方法&#xff0c;选中生命科学电子签名。系统管理->设置->系统->配…