[转载]如何判断js中的数据类型

原文地址:如何判断js中的数据类型作者:最初的你

如何判断js中的数据类型:typeof、instanceof、 constructor、 prototype方法比较

如何判断js中的类型呢,先举几个例子:

var a = "iamstring.";

var b = 222;

var c= [1,2,3];

var d = new Date();

var e = function(){alert(111);};

var f = function(){this.name="22";};

 

最常见的判断方法:typeof

alert(typeof a)   ------------> string

alert(typeof b)   ------------> number

alert(typeof c)   ------------> object

alert(typeof d)   ------------> object

alert(typeof e)   ------------> function

alert(typeof f)   ------------> function

其中typeof返回的类型都是字符串形式,需注意,例如:

alert(typeof a == "string") -------------> true

alert(typeof a == String) ---------------> false

另外typeof 可以判断function的类型;在判断除Object类型的对象时比较方便。

 

判断已知对象类型的方法: instanceof

alert(c instanceof Array) ---------------> true

alert(d instanceof Date) 

alert(f instanceof Function) ------------> true

alert(f instanceof function) ------------> false

注意:instanceof 后面一定要是对象类型,并且大小写不能错,该方法适合一些条件选择或分支。

 

根据对象的constructor判断: constructor

alert(c.constructor === Array) ----------> true

alert(d.constructor === Date) -----------> true

alert(e.constructor === Function) -------> true

注意: constructor 在类继承时会出错

eg,

      function A(){};

      function B(){};

      A.prototype = new B(); //A继承自B

      var aObj = new A();

      alert(aobj.constructor === B) -----------> true;

      alert(aobj.constructor === A) -----------> false;

而instanceof方法不会出现该问题,对象直接继承和间接继承的都会报true:

      alert(aobj instanceof B) ----------------> true;

      alert(aobj instanceof B) ----------------> true;

言归正传,解决construtor的问题通常是让对象的constructor手动指向自己:

      aobj.constructor = A; //将自己的类赋值给对象的constructor属性

      alert(aobj.constructor === A) -----------> true;

      alert(aobj.constructor === B) -----------> false; //基类不会报true了;

 

通用但很繁琐的方法: prototype

alert(Object.prototype.toString.call(a) === ‘[object String]’) -------> true;

alert(Object.prototype.toString.call(b) === ‘[object Number]’) -------> true;

alert(Object.prototype.toString.call(c) === ‘[object Array]’) -------> true;

alert(Object.prototype.toString.call(d) === ‘[object Date]’) -------> true;

alert(Object.prototype.toString.call(e) === ‘[object Function]’) -------> true;

alert(Object.prototype.toString.call(f) === ‘[object Function]’) -------> true;

大小写不能写错,比较麻烦,但胜在通用。

通常情况下用typeof 判断就可以了,遇到预知Object类型的情况可以选用instanceof或constructor方法,简单总结下,挖个坑,欢迎补充!

转载于:https://www.cnblogs.com/linewman/p/9918836.html

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

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

相关文章

String类与其他数据类型得转换

一:与基本数据类型或者包装类 二、String与char型数组得转换 三、String类与字节数组byte[]之间的转换 输出的是字符中得ASCII码。 getBytes使用的默认得编码集 可以自主设置编码集否则为默认编码集 输出:

字符串类中的StringBuffer,StringBuilder

StringBuffer类的常用方法 , String StringBuffer,StringBuilder的效率

JS练习题

输入整数a和b,若a2b2大于100,则输出a2b2百位以上数字,否则输出两数之和<br /><input type"text" id"a" /><br /><input type"text" id"b" /><br /><input type"button" value"点击&q…

JAVA日期和时间API

JDK8以前&#xff1a; public void test2() { // 构造器1&#xff1a;Date date1 new Date();System.out.println(date1); // date1.toString// 构造器2&#xff1a;创建指定毫秒数的Date对象Date date2 new Date(1631722133700L);System.out.println(date2);} JDK8以后: …

Calender日历类

使用方法&#xff1a; Testpublic void test() { // 调用其静态方法得到一个对象Calendar calendar Calendar.getInstance();System.out.println(calendar.getClass()); // 输出的为 GregorianCalendar类// get() 得到所需的数据 比如这一年的第几天int days calendar.…

php-fpm优化

PHP-FPM是一个PHPFastCGI进程管理器&#xff0c;是只用于PHP的。 PHP-FPM其实是PHP源代码的一个补丁&#xff0c;旨在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中&#xff0c;在编译安装PHP后才可以使用。 现在我们可以在最新的PHP 5.3.2的源码…

JDK8后的日期时间API

Testpublic void test() { // now() 获取当前的时间&#xff0c;日期LocalDate ld LocalDate.now();LocalTime lt LocalTime.now();LocalDateTime ldt LocalDateTime.now();System.out.println(ld);System.out.println(lt);System.out.println(ldt);// of():指定年月日 …

送花(洛谷 2073)

题目背景 小明准备给小红送一束花&#xff0c;以表达他对小红的爱意。他在花店看中了一些花&#xff0c;准备用它们包成花束。 题目描述 这些花都很漂亮&#xff0c;每朵花有一个美丽值W&#xff0c;价格为C。 小明一开始有一个空的花束&#xff0c;他不断地向里面添加花。他有…

nfs服务搭建

service nfs restart nfs服务重启 showmount -e ip地址 查看服务开启状态&#xff1a; chkconfig --list nfs 服务配置&#xff1a; #vim /etc/exports /data/ 192.168.1.145/24(rw,sync) /data/ *(rw,sync,all_squash) 服务重载&#xff0c;不需要restart #/etc/init.d…

爬虫工作量由小到大的思维转变---<第二十五章 Scrapy开始很快,越来越慢(追溯篇)>

爬虫工作量由小到大的思维转变---&#xff1c;第二十二章 Scrapy开始很快,越来越慢(诊断篇)&#xff1e;-CSDN博客 爬虫工作量由小到大的思维转变---&#xff1c;第二十三章 Scrapy开始很快,越来越慢(医病篇)&#xff1e;-CSDN博客 前言: 之前提到过,很多scrapy写出来之后,不…

也许你需要点实用的-Web前端笔试题

之前发的一篇博客里没有附上答案&#xff0c;现在有空整理了下发出来&#xff0c;希望能帮助到正在找工作的你&#xff0c;还是那句话&#xff1a;技术只有自己真正理解了才是自己的东西&#xff0c;共勉。 Web前端笔试题 Htmlcss 1.对WEB标准以及w3c的理解与认识。 标签闭合&a…

HTML5的touch事件

HTML5中新添加了很多事件&#xff0c;但是由于他们的兼容问题不是很理想&#xff0c;应用实战性不是太强&#xff0c;所以在这里基本省略&#xff0c;咱们只分享应用广泛兼容不错的事件&#xff0c;日后随着兼容情况提升以后再陆续添加分享。今天为大家介绍的事件主要是触摸事件…

神经网络的介绍

对于线性的定义&#xff1a;满足可加性和齐次性。

iOS 集成银联支付

转自&#xff1a;http://www.jianshu.com/p/92d615f78509 当初集成支付宝的时候 觉得见了这么丑的代码 加上这么难找的下载地址 在配上几乎为零的文档 寒哥就要吐血了下午去集成银联 才知道 血吐的早了 下载地址 https://open.unionpay.com/upload/download/Development_kit854…