最常用的判断方法:typeof
var a='isString';
var b=121221;
var c=[1,2,3];
var d=new Date();
var e=function(){
console.log('12');
};
var f=function(){
this.name='22';
};
var g=null;
var h=undefined;
var i=true; console.log(typeof b) =======> number
console.log(typeof a) =======> string
console.log(typeof h) =======> undefined
console.log(typeof i) =======> boolean
console.log(typeof c) =======> object
console.log(typeof d) =======> object
console.log(typeof g) =======> object
console.log(typeof e) =======> function console.log(typeof f) =======> function

总结 在 JavaScript 里使用 typeof 来判断数据类型,只能区分基本类型,即 “number”,”string”,”undefined”,”boolean”,”object” 五种。

对于数组、函数、对象来说,其关系错综复杂,使用 typeof 都会统一返回 “object” 字符串。

判断已知对象类型的方法 instanceof
console.log(c instanceof Array) =======> true

console.log(d instanceof Date) =======> true

console.log(f instanceof Function) =======> true

console.log(f instanceof function) =======> false

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

根据对象的constructor判断: constructor
console.log(c.constructor === Array) ----------> true
console.log(d.constructor === Date) -----------> true
console.log(e.constructor === Function) -------> true 注意: constructor 在类继承时会出错
eg:
function A(){};
function B(){};
A.prototype = new B(); //A继承自B
var aObj = new A();
console.log(aObj.constructor === B) -----------> true;
console.log(aObj.constructor === A) -----------> false;
而instanceof方法不会出现该问题,对象直接继承和间接继承的都会报true:
console.log(aObj instanceof B) ----------------> true;
言归正传,解决construtor的问题通常是让对象的constructor手动指向自己:
aObj.constructor = A; //将自己的类赋值给对象的constructor属性
console.log(aObj.constructor === A) -----------> true;
console.log(aObj.constructor === B) -----------> false; //基类不会报true了;
繁琐的方法: prototype

在JavaScript中,想要判断某个对象值属于哪种内置类型,最靠谱的做法就是通过Object.prototype.toString方法.

console.log(Object.prototype.toString.call(a) === ‘[object String]’) -------> true;
console.log(Object.prototype.toString.call(b) === ‘[object Number]’) -------> true;
console.log(Object.prototype.toString.call(c) === ‘[object Array]’) -------> true;
console.log(Object.prototype.toString.call(d) === ‘[object Date]’) -------> true;
console.log(Object.prototype.toString.call(e) === ‘[object Function]’) -------> true;
console.log(Object.prototype.toString.call(f) === ‘[object Function]’) -------> true;
jquery.type()

测试中所用到的 jquery: verson 3.0.0

console.log('number:', jQuery.type(2));
console.log('string:', jQuery.type('test'));
console.log('true or false :', jQuery.type(true));
console.log('undefined :', jQuery.type(undefined));
console.log('', jQuery.type());
console.log('null:', jQuery.type(null));
console.log('new Date():', jQuery.type(new Date()));
console.log('Function:', jQuery.type(function() {}));
console.log('Array:', jQuery.type([]));
console.log('Object:', jQuery.type({}));
console.log('new Error():', jQuery.type(new Error()));
console.log('reg:', jQuery.type(/test/)); console.log('ES6 新语法:symbol:', jQuery.type(Symbol()));

[参考链接]:https://www.cnblogs.com/dushao/p/5999563.html

JS数据类型判断的方法的更多相关文章

  1. JS数据类型判断的几种方法

    JS数据类型判断 JavaScript 中常见数据类型有Number.String.Boolean.Object.Array.Json.Function.Date.RegExp.Error.undef ...

  2. js数据类型判断和数组判断

    这么基础的东西实在不应该再记录了,不过嘛,温故知新~就先从数据类型开始吧 js六大数据类型:number.string.object.Boolean.null.undefined string: 由单 ...

  3. js数据类型 判断

    1. js数据类型(两种数据类型) 基本数据类型:null undefined number boolean symbol string 引用数据类型: array object null: 空对象 ...

  4. 鉴别JS数据类型的全套方法

    ECMAScript 标准定义了 7 种数据类型:Boolean.Null.Undefined.Number.String.Symbol(ES6新增)和Object,除Object以外的那6种数据类型 ...

  5. JS数组判断,方法

    怎么判断一个对象是不是数组? 首先可以用 ES5 提供的 isArray 方法进行判断(注意:Array.isArray是ES 5.1推出的,不支持IE6~8,所以在使用的时候也应注意兼容问题. ) ...

  6. js 数据类型判断

    判断type类型 isString (o) { //是否字符串 return Object.prototype.toString.call(o).slice(8, -1) === 'String' } ...

  7. js类型判断的方法

    var arr=[]; alert(Object.prototype.toString.call(arr)=='[object Array]');

  8. js数据类型判断

    在一般情况下使用typeof 但是有时候typeof返回的结果都是object,比如数组和json对象的时候,这个时候需要用到 instanceof了 还有一个更好得办法,Object.prototy ...

  9. vue—你必须知道的 js数据类型 前端学习 CSS 居中 事件委托和this 让js调试更简单—console AMD && CMD 模式识别课程笔记(一) web攻击 web安全之XSS JSONP && CORS css 定位 react小结

    vue—你必须知道的   目录 更多总结 猛戳这里 属性与方法 语法 计算属性 特殊属性 vue 样式绑定 vue事件处理器 表单控件绑定 父子组件通信 过渡效果 vue经验总结 javascript ...

随机推荐

  1. Window通过Web方式修改域用户密码

    如何通过web方式修改域用户密码: 1.在Windows Server 2003上,系统默认提供了iisadmpwd作为一种修改域用户密码的方式 2.在Windows Server 2008上,可以提 ...

  2. x264_param_default分析

    {     /* 开辟内存空间*/     memset( param, 0, sizeof( x264_param_t ) );              /* CPU自动检测 */     par ...

  3. [WCF] Restful 自定义宿主

    IPersonRetriever: /* * 由SharpDevelop创建. * 用户: Administrator * 日期: 2017/6/2 * 时间: 22:13 * * 要改变这种模板请点 ...

  4. Ant 批量执行jmeter 脚本

    一.环境准备: 1.Jdk1.6或以上:http://www.oracle.com/technetwork/java/javase/downloads/index.html 命令行输入:java -v ...

  5. 设置头像、商品、轮播图为背景图时需要的css

    background-repeat: no-repeat;background-size: cover;background-position: center center;

  6. 寻求js

    寻找登录的post地址 在form表单中寻找action对应的url地址 post的数据是input标签中的name值作为键,真正的用户名密码作为值得字典,post的url地址就是action对应的u ...

  7. [转] - xargs 分析

    原文出处:http://www.cnblogs.com/f-ck-need-u/p/5925923.html 学习这个xargs花了很长时间,在网上翻了很久也查了很多书关于xargs的介绍,都只是简单 ...

  8. JDK线程池的拒绝策略

    关于新疆服务请求未带入来话原因的问题 经核查,该问题是由于立单接口内部没有成功调用接续的 “更新来电原因接口”导致的,接续测更新来电原因接口编码:NGCCT_UPDATESRFLAG_PUT ,立单接 ...

  9. linux文件系统变为只读解决

    linux控制台显示文件系统变为只读,需输密码或者按ctrl+d结束 输入root密码后执行fsck -y /dev/sda1,fsck -y /dev/sda2和fsck -y /dev/sda3等 ...

  10. 线程安全 Thread Safety Problem scala concurrency 并发

    小结: 1.基于java并发模型 Scala concurrency is built on top of the Java concurrency model. 2. 将每个请求放入一个新的线程 T ...