第一种方法typeof

typeof是一种运算符,它的值有以下几种

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ces</title>
</head>
<body>
<script>
console.log(typeof "Liesbeth");//"string"
console.log(typeof 12);//"number"
console.log(typeof true); //"boolean"
console.log(typeof undefined);//"undefined"
console.log(typeof null);//"object"
console.log(typeof {name:"Liesbeth"});//"object"
console.log(typeof function(){});//"function"
console.log(typeof []);//"object"
console.log(typeof new Date);//"object"
console.log(typeof /[0-9]/);//'object'
console.log(typeof new Number(123));//'object'
function Person(){};
console.log(typeof new Person);//'object' </script> </body>
</html>

typeof

运行结果如下,可以看出typeof能判断基本类型的值,其他通过new创建的类型除了function外,其他都是object,其中null也是object

第二种方法instanceof

instanceof运算符可以用来判断某个构造函数的prototype属性所指向的對象是否存在于另外一个要检测对象的原型链上即某个对象是否是某个构造函数的实例,如下

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ces</title>
</head>
<body>
<script>
//能判别内置对象内型
console.log([] instanceof Array);//true
console.log([] instanceof Object);//true
console.log(/[0-9]/ instanceof RegExp);//true
console.log(new String('123') instanceof String);//true
console.log(function(){} instanceof Function);//true //不能判断原始类型
console.log('123' instanceof String);//false
console.log(123 instanceof Number);//false
console.log(true instanceof Boolean);//false //判别自定义对象类型
function Point(x,y){
this.x=x;
this.y=y;
}
function Circle(x,y,r){
Point.call(this,x,y);
this.radius=r;
}
Circle.prototype=new Point();
Circle.prototype.constructor=Circle;
var c= new Circle(1,1,2);
console.log(c instanceof Circle);//true
console.log(c instanceof Point);//true
</script> </body>
</html>

instanceof

运行结果如下图

由此可看出instanceof不能识别原始类型,能识别自定义对象和内置对象类型同时它们都属于Object

 第三种方法Object.prototype.toString.call

这个方法获取的是对象的[[Class]]属性值,返回结果是固定的'[object'+[[class]]属性+']',jquery中的$.type()就是利用这个属性判断对象类型的。

function type(obj){
return Object.prototype.toString.call(obj).slice(8,-1);
}

运行结果如下:

其中的type(c)为instanceof时创建的对象。

可以看出toString能识别原始类型和内置对象,但是不能识别自定义对象类型,另外在ie7和8中null和undefined都是返回"Object"如下

同时在IE6中字符串也会返回"Object"所以用的时候要多注意这几个值。

第四种方法constructor

constructor 属性返回对创建此对象的数组函数的引用,如图所示

利用此特性我们可以判别类型,其中由于null和undefined没有构造函数所以特殊处理,编写函数如下

function getConstructorName(obj){
return (obj===undefined||obj===null)?obj:(obj.constructor&&obj.constructor.toString().match(/function\s*([^(]*)/)[1]);
}

运行结果如下

可以看出constructor能判别原始类型(除null和undefined),内置对象和自定义对象.

参考资料:http://www.cnblogs.com/ziyunfei/archive/2012/11/05/2754156.html其中对Object.prototype.toString解释的清楚。

 

js中类型识别的方法的更多相关文章

  1. javascript四种类型识别的方法

    × 目录 [1]typeof [2]instanceof [3]constructor[4]toString 前面的话 javascript有复杂的类型系统,类型识别则是基本的功能.javascrip ...

  2. node.js中的url.parse方法使用说明

    node.js中的url.parse方法使用说明:https://blog.csdn.net/swimming_in_it_/article/details/77439975 版权声明:本文为博主原创 ...

  3. JS中 call() 与apply 方法

    1.方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call ...

  4. js中this和回调方法循环-我们到底能走多远系列(35)

    我们到底能走多远系列(35) 扯淡: 13年最后一个月了,你们在13年初的计划实现了吗?还来得及吗? 请加油~ 主题: 最近一直在写js,遇到了几个问题,可能初入门的时候都会遇到吧,总结下. 例子: ...

  5. js中object的申明方法

    //js中的对象申明使用new Object(); //object类型的数据类似于数组通过下表来访问其中的值 //example1 var person=new Object(); person.n ...

  6. JS中令人发指的valueOf方法介绍

    彭老湿近期月报里提到了valueOf方法,兴致来了翻了下ECMA5里关于valueOf方法的介绍,如下: 15.2.4.4 Object.prototype.valueOf ( ) When the ...

  7. JS中定义类的方法<转>

    转载地址:http://blog.csdn.net/sdlfx/article/details/1842218 PS(个人理解): 1) 类通过prototype定义的成员(方法或属性),是每个类对象 ...

  8. JS中判断数组的方法

    JavaScript中检测对象的方法 1.typeof操作符 这种方法对于一些常用的类型来说那算是毫无压力,比如Function.String.Number.Undefined等,但是要是检测Arra ...

  9. JS 中类型鉴别

    JS中的基本类型有:数字(Number(NaN,Infinity)),字符串(String),Undefined,Null,Boolean 引用类型有:数组(Array),对象(Object),函数( ...

随机推荐

  1. expect基本使用方法

    参考: http://www.cnblogs.com/lzrabbit/p/4298794.html expect是linux系统中可以和子进程进行交互的一个命令,使用它可以做一些自动化工作.pyth ...

  2. 新手入门JUnit单元测试

    首先将JUnit插件安装到Eclipse或myeclipse里面,编写完一个模块或者实体类的时候,直接右击,new一个JUnit项目,选择你想测试的实体类(模块),然后会自动生成一个类,这个类,我们将 ...

  3. ASP.NET MVC4入门到精通系列目录汇总

    序言 最近公司在招.NET程序员,我发现好多来公司面试的.NET程序员居然都没有 ASP.NET MVC项目经验,其中包括一些工作4.5年了,甚至8年10年的,许多人给我的感觉是:工作了4.5年,We ...

  4. 物联网框架ServerSuperIO(SSIO)更新、以及增加宿主程序和配置工具,详细介绍

    一.更新内容 1.修改*Server类,以及承继关系.2.增加IRunDevice的IServerProvider接口继承.3.修复增加COM设备驱动可能造成的异常.4.修复网络发送数据可能引发的异常 ...

  5. php-fpm优化

    pid = run/php-fpm.pid #pid设置,默认在安装目录中的var/run/php-fpm.pid,建议开启 error_log = log/php-fpm.log #错误日志,默认在 ...

  6. SQLSERVER截取字符串

    ) SET @Name = '\EXAM\061023478874' DECLARE @Position INT --sql first indexof SET @Position = CHARIND ...

  7. viewport理解

    viewport预备知识 dpr === dppx dpr:device pixel ratio 设备像素比 dppx:Number of dots per px unit 每像素有多少点 . 1dp ...

  8. mac下查看.mobileprovision文件及钥匙串中证书.cer文件

    mac下查看.mobileprovision文件及钥匙串中证书.cer文件 一. mobileprovision文件查看 xxx.mobileprovision是ios开发中的设备描述文件,里面有证书 ...

  9. 【代码笔记】iOS-自定义导航条颜色

    一,效果图. 二,工程图. 三,代码. AppDelegate.m - (BOOL)application:(UIApplication *)application didFinishLaunchin ...

  10. Laravel大型项目系列教程(一)

    Laravel大型项目系列教程(一) 一.课程概述 1.课程介绍 本教程将使用Laravel完成一个多用户的博客系统,大概会包含如下内容: 路由管理. 用户管理,如用户注册.修改信息.锁定用户等. 文 ...