第一种方法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. Spring 实现数据库读写分离

    随着互联网的大型网站系统访问量的增高,数据库访问压力方面不断的显现而出,所以许多公司在数据库层面采用读写分离技术,也就是一个master,多个slave.master负责数据的实时更新或实时查询,而s ...

  2. Json map

    1. 返回数据形式 Class returnMsg{ boolean success; String   msg; String   errorMsg; } 2.问题 当msg中的数据由对象 或 集合 ...

  3. ArcGIS Engine开发之书签加载

    ArcGIS中书签是保存特定视图范围的快捷方式.使用书签保存关注的视图范围,可在需要时快速定位.查看与浏览.书签功能主要用到IMapBookmarks.ISpatialBookmark和IAOIBoo ...

  4. android图片验证码--自绘控件

    自绘控件的内容都是自己绘制出来的 大致流程如下: 1.定义一个类继承view 使用TypedArray初始化属性集合 在view的构造方法中 有一个AttributeSet的参数 很明显是用来保存控件 ...

  5. WWDC2016 观后杂感

    WWDC2016已经落幕了,我没有熬夜看看的录播. 总的来说觉得还是比较兴奋的,因为苹果将更多的APi开发出来了,可以玩出更多花样了.

  6. IOS之Objective-C学习 代理设计模式

    鉴于Objective-C是不支持多继承的,所以需要用协议来代替实现其他类的方法,所以有了代理设计模式. 代理,又称委托,delegation. 代理模式可以让一个单继承的类实现父类以外其他类的方法. ...

  7. 玩转Podfile

    前言 经常使用CocoaPods来管理iOS项目中的第三方库,但是我们要使用CocoaPods来管理第三方库,前提是要写好Podfile文件,通过这个文件来配置第三方库与项目之间的依赖.版本等信息. ...

  8. jsonp跨域请求

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. javaWeb项目中Web.xml的基本配置

    这个地址写的非常好 ,欢迎大家访问 Å:http://www.cnblogs.com/hxsyl/p/3435412.html 一.理论准备 先说下我记得xml规则,必须有且只有一个根节点,大小写敏感 ...

  10. vim快捷键

    #vim  filename :scriptname //查看vim加载了哪些脚本 :set nu //设置行号 :set tabstop=4 //设置一个tab为4个空格长度 :set ai //设 ...