以下文章来自Web前端开发1.typeof主要用于判断基本数据类型。用法:typeof(expression)和typeof变量名,第一种是对表达式进行操作,第二种是对变量进行操作。typeof运算符的返回类型是字符串,值包括以下几种:'undefined':未定义的变量或值'boolean':布尔变量或值'string':字符串变量或值'number':一个变量orvalueofnumerictype'object':对象类型的变量或值,或者null(这是js历史遗留下来的问题,null被当做对象类型)'function':函数类型的变量或值示例如下:控制台。日志(一个类型);//'undefined'console.log(typeof(true));//'boolean'console.log(typeof'123');//'string'console.log(typeof123);//'number'console.log(typeofNaN);//'number'console.log(typeofnull);//'对象'varobj=newString();console.log(typeof(obj));//'对象'varfn=function(){};控制台日志(类型(fn));//'函数'console.log(typeof(classc{}));//'function'typeof的不足:不能区分对象、数组、正则表达式,对它们的所有操作都返回"object";(正则性比较特殊,后面会讲到)Safar5和Chrome7之前的版本对正则对象返回'function'。在IE6、7、8中,大部分hosts对象是对象,不是函数;例如:警报类型;//objectandinnon-IDbrowsersorIE9andabove(includingIE9),typeofalert;//函数返回空对象。总结:typeof运算符用来判断对象的类型,但是对于一些创建的对象,都是返回'object',有时候我们需要判断这个实例是否是一个对象的实例,这时候就需要用到instanceof运算符_front——此时结束训练。其次,instanceof用于判断引用数据类型。所有引用数据类型的值都是Object的实例。目的是判断一个对象的原型链上是否有构造函数的原型属性。用法:变量instanceof构造函数示例如下://examplevararr=[];由于:arr.constructor===Arrayarr.__proto__===Array.prototypearr.__poto__.proto__===Object.prototype,下面全部返回truearrinstanceofarr.constructor(Array)arrinstanceofarr.__proto__.constructor(Array)arrinstanceofarr.__proto__.__poto__.constructor(Object)如果你了解原型链,你会很快得出一些结论:所有对象instanceof对象都会返回true所有函数instanceof函数都会返回true总结:instanceof不仅可以检测构造函数的构造对象,但也检测原型链。instanceof需要在前面有一个对象,在后面有一个构造函数。返回值是布尔值,要么是真要么是假。3.Array.isArray()Array.isArray()可以用来判断数组类型,支持的浏览器有IE9+、FireFox4+、Safari5+、Chrome;兼容实现:if(!Array.isArray){Array.isArray=function(arg){returnObject.prototype.toString.call(arg)==='[objectArray]';};}示例如下://1.Array.isArray([1,2,3,4]);//-->true//2.varobj={a:1,b:2};Array.isArray(obj);//-->false//3.Array.isArray(newArray);//-->true//4.Array.isArray("Array");//-->false总结:isArray是使用Array对象(类)调用的静态方法,而不是数组对象实例。其中Array.prototype也是一个数组,Array.isArray优于instanceof_web前端训练。4.Object.prototype.toString.call()要确定一个对象值属于哪个内置类型,最可靠的方法是使用Object.prototype.toString方法。object.prototype.toString()的输出格式是[对象对象数据类型]。示例如下:console.log(Object.prototype.toString.call("jerry"));//[objectString]console.log(Object.prototype.toString.call(12));//[objectNumber]console.log(Object.prototype.toString.call(true));//[对象布尔值]console.log(Object.prototype.toString.call(undefined));//[对象未定义]console.log(Object.prototype.toString.call(null));//[objectNull]console.log(Object.prototype.toString.call({name:"jerry"}));//[objectObject]console.log(Object.prototype.toString.call(function(){}));//[对象函数]console.log(Object.prototype.toString.call([]));//[对象数组]console.log(Object.prototype.toString.call(newDate));//[objectDate]console.log(Object.prototype.toString.call(/\d/));//[objectRegExp]functionPerson(){};console.log(Object.prototype.toString.call(newPerson));//[对象对象]
