Javascript数据类型检测
Javascript有5种简单数据类型和一种复杂数据类型
- 基本数据类型:String,Boolean,Number,Undefined, Null
- 引用数据类型:Object(Array,Date,RegExp,Function)
要检测一个变量是不是基本数据类型, typeof 操作符是最佳的工具。
var s = "Nicholas";var b = true;var i = 22;var u;var n = null;var o = new Object();alert(typeof s); //stringalert(typeof i); //numberalert(typeof b); //booleanalert(typeof u); //undefinedalert(typeof n); //objectalert(typeof o); //object
但是从上面的执行结果可以看到,如果变量的值是一个对象或 null,则 typeof 操作符会像例子中所示的那样返回"object" ,那么问题来了,如何检测Null呢? 如果想将null和对象区分开,则必须进行显示检查
function getType(obj) {return (obj === null) ? "null" : typeof (obj);}
result = variable instanceof constructor
如果变量是给定引用类型(根据它的原型链来识别)的实例,那么instanceof 操作符就会返回 true。请看下面的例子:
alert(person instanceof Object); // 变量 person 是 Object 吗?alert(colors instanceof Array); // 变量 colors 是 Array 吗?alert(pattern instanceof RegExp); // 变量 pattern 是 RegExp 吗?
function Animal() {}function Bird() {}Bird.prototype = new Animal();Bird.prototype.fly = function () {//do some thingalert('I can fly!');}var pigeon = new Bird();alert(pigeon instanceof Bird); //true 毫无疑问alert(pigeon instanceof Animal); //true 由于原型链的关系alert(pigeon instanceof Object); //true
var iframe = document.createElement('iframe');document.body.appendChild(iframe);xArray = window.frames[window.frames.length-1].Array;var arr = new Array("1","2","3","4","5");alert(arr instanceof Array); // false
var iframe = document.createElement('iframe');document.body.appendChild(iframe);xArray = window.frames[window.frames.length-1].Array;var arr = new xArray("1","2","3","4","5");alert(arr instanceof Array); // falsealert(Array.isArray(arr));//true
- 方法一
判断其是否具有“数组性质”,如slice()方法。但是存在自己给该变量定义slice方法的情况,故有时会失效
function isArray(object) {return object!= null && typeof object == "object" && 'splice' in object && 'join' in object;}var liar = { splice: 1, join: 2 };alert(isArray(liar));//true,成功骗过了检测方法
- 方法二
obj instanceof Array这个方法在前面已经介绍过了,也是不完美的。
- 方法三
使用上文所述新方法Array.isArray(),但是支持 Array.isArray() 方法的浏览器有 IE9+、 Firefox 4+、 Safari 5+、 Opera 10.5+和 Chrome。对于版本比较旧的浏览器此方法不被支持。
- 方法四
以上那些方法看上去无懈可击,但是终究会有些问题,接下来介绍的方法可以说是无懈可击了。
var arr=[1,2,3,4];alert(Object.prototype.toString.call(arr)); //"[object Array]"
function isArray(value){return Object.prototype.toString.call(value) == "[object Array]";}
function isFunction(value){return Object.prototype.toString.call(value) == "[object Function]";}function isRegExp(value){return Object.prototype.toString.call(value) == "[object RegExp]";}
var isType=function(type) {return function (obj) {return Object.prototype.toString.call(obj)=='[object '+type+']';}};var isString=isType('String');var isArray=isType('Array');var isNumber=isType('Number');var isRegExp=isType('RegExp');console.log(isNumber(2));
var Type={};for (var i = 0,type;type=['String','Array','Number'][i++];){(function (type) {Type['is'+type]=function (obj) {return Object.prototype.toString.call(obj)=='[object '+type+']';}})(type)}- //调用检测函数
Type.isArray([]);//输出:trueType.isString("str");//输出:true
var Type={};for (var i = 0,type;type=['String','Array','Number'][i++];){Type['is'+type]=function (obj) {return Object.prototype.toString.call(obj)=='[object '+type+']';}}console.log(Type.isArray([]));//输出falseconsole.log(Type.hasOwnProperty("isArray"));//输出:trueconsole.log(type);//undefined
参考:Javascript高级程序设计(第3版)
Javascript数据类型检测的更多相关文章
- JavaScript 数据类型检测总结
JavaScript 数据类型检测总结 原文:https://blog.csdn.net/q3254421/article/details/85483462 在js中,有四种用于检测数据类型的方式,分 ...
- javascript 数据类型 -- 检测
一.前言 在上一篇博文中 Javascript 数据类型 -- 分类 中,我们梳理了 javascript 的基本类型和引用类型,并提到了一些冷知识.大概的知识框架如下: 这篇博文就讲一下在写代码的过 ...
- JavaScript: 数据类型检测
由于JavaScript是门松散类型语言,定义变量时没有类型标识信息,并且在运行期可以动态更改其类型,所以一个变量的类型在运行期是不可预测的,因此,数据类型检测在开发当中就成为一个必须要了解和掌握的知 ...
- JavaScript数据类型检测 数组(Array)检测方式
前言 对于确定某个对象是不是数组,一直是数组的一个经典问题.本文专门将该问题择出来,介绍什么才是正确的javascript数组检测方式 typeof 首先,使用最常用的类型检测工具--typeof运算 ...
- JavaScript数据类型检测详解
//JS该如何检测数据的类型呢? //使用关键字: typeof //输出结果依次为:'number','string','boolean'. console.log(typeof 17); cons ...
- javascript数据类型检测方法
一.字符串.数字.布尔值.undefined的最佳选择市使用 typeof 运算符进行检测: 对于字符串,typeof 返回"string" 对于数字,typeof 返回" ...
- JavaScript系列文章:不能不看的数据类型检测
由于JavaScript是门松散类型语言,定义变量时没有类型标识信息,并且在运行期可以动态更改其类型,所以一个变量的类型在运行期是不可预测的,因此,数据类型检测在开发当中就成为一个必须要了解和掌握的知 ...
- javascript 中检测数据类型的方法
typeof 检测数据类型 javascript 中检测数据类型有好几种,其中最简单的一种是 typeof 方式.typeof 方法返回的结果是一个字符串.typeof 的用法如下: typeof v ...
- 【JavaScript框架封装】数据类型检测模块功能封装
数据类型检测封装后的最终模块代码如下: /*数据类型检验*/ xframe.extend(xframe, { // 鸭子类型(duck typing)如果它走起路来像鸭子,叫起来也是鸭子,那么它就是鸭 ...
随机推荐
- 【BZOJ-4082】Surveillance 树链剖分 LCA + 贪心
4082: [Wf2014]Surveillance Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 260 Solved: 100[Submit][ ...
- Map工具系列-05-添加业务参数工具
所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...
- SQL 事务回滚
事务(Transaction)是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便服 ...
- 如何学习Oracle
如何学习Oracle?分清几个概念是关键 经常有一些Oracle的初学者问到以下几个问题,这里集中解答一下,希望对大家有帮助. 1.如果有一定的数据库基础,知道SQL是怎么回事,即使写不出 ...
- Google 地图 API V3 之 叠加层
Google官方教程: Google 地图 API V3 使用入门 Google 地图 API V3 针对移动设备进行开发 Google 地图 API V3 之事件 Google 地图 API V3 ...
- mysql问题
mysql x64,由于没有msi版,因此,在使用上可能会出现一些问题. 一. 配置环境变量: 只需把mysql/bin文件夹地址完整地添加到Path中,用“;”与前面的参数隔开.需注意,mysql ...
- jenkins使用简记
一.安装 jenkins有多种安装方式,可以使用内嵌的Servlet容器运行,也可以基于Apache运行,也可以安装成Linux或Windows服务. 1.使用 Servlet 容器运行 从官网下载 ...
- 大熊君JavaScript插件化开发------(实战篇之DXJ UI ------ ItemSelector重构完结版)
一,开篇分析 Hi,大家好!大熊君又和大家见面了,还记得上一篇文章吗.主要讲述了以“jQuery的方式如何开发插件”,以及过程化设计与面向对象思想设计相结合的方式是 如何设计一个插件的,两种方式各有利 ...
- tyvj1202 数数食物链
描述 TsyD学习了生物的生态环境那一张后,老师留了一项作业,就是给一张食物网,求所有食物链的总数.(从最低营养级生物(它不能吃任何其他的生物)开始到最高营养级(它不能被任何其他生物吃) 叫做一条食物 ...
- ACCESS应用笔记<五>——慢慢要学会做项目管理·
综上 第一次写access学习笔记是8月19号的事情,现在已经10月31号 以下是之前的笔记目录: <一> http://www.cnblogs.com/weibaar/p/3923466 ...