文档章节

如何判断js中的数据类型

觉皇
 觉皇
发布于 2016/06/17 16:12
字数 477
阅读 80
收藏 0

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

 

如何判断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方法,简单总结下,挖个坑,欢迎补充!

本文转载自:http://blog.sina.com.cn/s/blog_51048da70101grz6.html

觉皇
粉丝 1
博文 25
码字总数 2154
作品 0
西青
私信 提问
加载中

评论(0)

细说JavaScript数据类型及转换

细说JavaScript数据类型及转换 JavaScript数据类型 1.Boolean(布尔) 布尔:(值类型)var b1=true;//布尔类型 2.Number(数字) 数值:(值类型)var n1=3.1415926;//数值类型 n1.toFixed...

开元中国2015
2015/07/13
138
1
由js数组类型判断触发的浪漫思绪

一、前言 众所周知,js是门“动态”、“弱类型”编程语言,这意味着在js中可以很任性的定义变量,任性的同时也意味着需常在开发中对变量做类型判断,曾几何时,对数组变量的类型的判断是件很...

hanmin
2018/06/08
0
0
JavaScript学习记录day9-标准对象

JavaScript学习记录day9-标准对象 [TOC] 在JavaScript的世界里,一切都是对象。 但是某些对象还是和其他对象不太一样。为了区分对象的类型,我们用操作符获取对象的类型,它总是返回一个字符...

ygqygq2
2018/06/11
0
0
js面向对象编程 ---- 系列教程

原 js面向对象编程:数据的缓存 原 js面向对象编程:如何检测对象类型 原 js面向对象编程:if中可以使用那些作为判断条件呢? 原 js面向对象编程:this到底代表什么?第二篇 原 js面向对象编...

osc_y8k7fox4
2018/08/03
3
0
26个精选的JavaScript面试问题

译者按: 从各个平台精选整理出26道由浅入深的题目助你面试 原文: Top 26 JavaScript Interview Questions I Wish I Knew 译者: Fundebug 为了保证可读性,本文采用意译而非直译。另外,本文...

Fundebug
2018/10/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

总结:Spring boot熔断

一、介绍 1、熔断的目的:是为了保证服务高可用,不能因为系统中的一个小服务不可用,从而导致整个系统崩溃。 2、熔断的原理:对于使用相关注解的类或者方法,系统会监控其错误,如果多次出现...

浮躁的码农
35分钟前
16
0
抽象工厂

1. 介绍 提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式,是工厂方法模式的升级版,在有多个业务品种、业务分类时,...

steven-黄笑笑
40分钟前
22
0
Autoruns显示windows系统所有启动项

如题,可以显示所有启动项,然后把不需要的启动项都取消勾选即可。而对于“服务”项,建议不要在里面去掉勾选,因为这样会禁止服务,容易出错。我通常都会打开电脑的”服务“,按启动类型排序...

ethanleellj
41分钟前
19
0
多线程基础学习

线程和进程有区别? 进程=加载上下文+执行程序+保存上下文 进程属于资源分配的最小单位,线程属于执行任务的最小单位。 线程6种状态: 1、New 尚未启动的线程的线程状态。 2、Runnable 可运行...

javazyw
今天
30
0
英文对“ Big O”符号的解释是什么? - What is a plain English explanation of “Big O” notation?

问题: 我希望尽可能少用正式的定义和简单的数学方法。 解决方案: 参考一: https://stackoom.com/question/22l0/英文对-Big-O-符号的解释是什么 参考二: https://oldbug.net/q/22l0/What...

javail
今天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部