JS数据类型判断的方法
最常用的判断方法: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数据类型判断的方法的更多相关文章
- JS数据类型判断的几种方法
JS数据类型判断 JavaScript 中常见数据类型有Number.String.Boolean.Object.Array.Json.Function.Date.RegExp.Error.undef ...
- js数据类型判断和数组判断
这么基础的东西实在不应该再记录了,不过嘛,温故知新~就先从数据类型开始吧 js六大数据类型:number.string.object.Boolean.null.undefined string: 由单 ...
- js数据类型 判断
1. js数据类型(两种数据类型) 基本数据类型:null undefined number boolean symbol string 引用数据类型: array object null: 空对象 ...
- 鉴别JS数据类型的全套方法
ECMAScript 标准定义了 7 种数据类型:Boolean.Null.Undefined.Number.String.Symbol(ES6新增)和Object,除Object以外的那6种数据类型 ...
- JS数组判断,方法
怎么判断一个对象是不是数组? 首先可以用 ES5 提供的 isArray 方法进行判断(注意:Array.isArray是ES 5.1推出的,不支持IE6~8,所以在使用的时候也应注意兼容问题. ) ...
- js 数据类型判断
判断type类型 isString (o) { //是否字符串 return Object.prototype.toString.call(o).slice(8, -1) === 'String' } ...
- js类型判断的方法
var arr=[]; alert(Object.prototype.toString.call(arr)=='[object Array]');
- js数据类型判断
在一般情况下使用typeof 但是有时候typeof返回的结果都是object,比如数组和json对象的时候,这个时候需要用到 instanceof了 还有一个更好得办法,Object.prototy ...
- vue—你必须知道的 js数据类型 前端学习 CSS 居中 事件委托和this 让js调试更简单—console AMD && CMD 模式识别课程笔记(一) web攻击 web安全之XSS JSONP && CORS css 定位 react小结
vue—你必须知道的 目录 更多总结 猛戳这里 属性与方法 语法 计算属性 特殊属性 vue 样式绑定 vue事件处理器 表单控件绑定 父子组件通信 过渡效果 vue经验总结 javascript ...
随机推荐
- Window通过Web方式修改域用户密码
如何通过web方式修改域用户密码: 1.在Windows Server 2003上,系统默认提供了iisadmpwd作为一种修改域用户密码的方式 2.在Windows Server 2008上,可以提 ...
- x264_param_default分析
{ /* 开辟内存空间*/ memset( param, 0, sizeof( x264_param_t ) ); /* CPU自动检测 */ par ...
- [WCF] Restful 自定义宿主
IPersonRetriever: /* * 由SharpDevelop创建. * 用户: Administrator * 日期: 2017/6/2 * 时间: 22:13 * * 要改变这种模板请点 ...
- Ant 批量执行jmeter 脚本
一.环境准备: 1.Jdk1.6或以上:http://www.oracle.com/technetwork/java/javase/downloads/index.html 命令行输入:java -v ...
- 设置头像、商品、轮播图为背景图时需要的css
background-repeat: no-repeat;background-size: cover;background-position: center center;
- 寻求js
寻找登录的post地址 在form表单中寻找action对应的url地址 post的数据是input标签中的name值作为键,真正的用户名密码作为值得字典,post的url地址就是action对应的u ...
- [转] - xargs 分析
原文出处:http://www.cnblogs.com/f-ck-need-u/p/5925923.html 学习这个xargs花了很长时间,在网上翻了很久也查了很多书关于xargs的介绍,都只是简单 ...
- JDK线程池的拒绝策略
关于新疆服务请求未带入来话原因的问题 经核查,该问题是由于立单接口内部没有成功调用接续的 “更新来电原因接口”导致的,接续测更新来电原因接口编码:NGCCT_UPDATESRFLAG_PUT ,立单接 ...
- linux文件系统变为只读解决
linux控制台显示文件系统变为只读,需输密码或者按ctrl+d结束 输入root密码后执行fsck -y /dev/sda1,fsck -y /dev/sda2和fsck -y /dev/sda3等 ...
- 线程安全 Thread Safety Problem scala concurrency 并发
小结: 1.基于java并发模型 Scala concurrency is built on top of the Java concurrency model. 2. 将每个请求放入一个新的线程 T ...