曾经我以为JavaScript中的类型检测只要使用 typeof 或 instanceof 就可以通通解决.后来我发现我是too young too naive啊!早说过JavaScript是个不严密,有缺陷的语言,通过类型检测才深深地领悟到这一点.接下来我就来剖析下这里面的漏洞及最靠谱的检测方法吧! 一.typeof运算符     相信很多同学还跟我曾经以为的一样,typeof操作符只是判断对象类型上不太靠谱,它还是可以用来检测原始值类型的,比如数字.字符串.布尔型.但看了下面的例子你…
, ]; alert(arr instanceof Array);//true 以上老方法判断是否是数组,存在一个问题,就是它只适用于单执行环境(窗口),如果该窗口有其他框架(比如 iframe)则会出问题 比如: html: <iframe frameborder=" name="result" id="result"></iframe> script: document.querySelector('#result').src…
typeof用以获取一个变量或者表达式的类型,typeof一般只能返回如下几个结果: number,boolean,string,function(函数),object(NULL,数组,对象),undefined. 如: alert(typeof (123));//typeof(123)返回"number" alert(typeof ("123"));//typeof("123")返回"string" 我们可以使用typeof…
typeof 适合函数对象和基本类型的判断 typeof 100instanceof 适合判断对象类型 obj instanceof Object 基于原型链判断操作符,若做操作符不是对象,则会直接返回false.期望右操作数是一个函数对象或函数构造器,若不是则会抛出typeError异常Object.prototype.toString Object.prototype.toString.apply(null)--->[object Null]constructor 任何对象都有继承自原型的c…
1.typeof typeof是js的一个操作符,在类型检测中,几乎没有任何用处. typeof 返回一个表达式的数据类型的字符串,返回结果为javascript中的基本数据类型,包括:number.boolean.string.object.undefined.function等6种数据类型. 也就是说,typeof只能返回这几种类型,而对于我们的自定义对象,它只会返回object,在实际应用中作用约等于零. 此外,typeof在不同浏览器中可能存在一些兼容性的问题,如将function类型认…
在js中的类型检测目前我所知道的是三种方式,分别有它们的应用场景: 1.typeof:主要用于检测基本类型. typeof undefined;//=> undefined typeof 'a';//=> string typeof 1;//=> number typeof true;//=> boolean typeof {};//=> object typeof [];//=> object typeof function() {};//=> function…
JavaScript中基本类型包含Undefined.Null.Boolean.Number.String以及Object引用类型.基本类型可以通过typeof来进行检测,对象类型可以通过instanceof来检测.但这两检测方式本身存在大量的陷阱,因此需要进行兼容处理. 对于typeof,只能识别出undefined.object.boolean.number.string.function这6种数据类型,无法识别Null等细分的对象类型.typeof本身存在的陷阱:typeof null;…
JS有很多数据类型,对于不同数据类型的识别和相互转换也是面试中的一个常考点,本文主要讲的就是类型转换和类型检测. 数据类型 JS中的数据类型主要分为两大类:原始类型(值类型)和引用类型.常见的数据类型如下图所示: 原始数据类型存在栈中,引用类型在栈中存的是一个引用地址,这个地址指向的是堆中的一个数据对象.需要注意的是null在这里我们算在原始类型里面,但是你用typeof的时候会发现他是object,原因是就算他是一个对象,那他应该在栈中存一个引用地址,但是他是一个空对象,所以这个地址为空,也就…
对于typeof和instanceof,我们经常用来检测数据的类型.typeof可以检测Number.Boolean.String.Undefined类型,对于其他类型的数据都返回为object:而instanceof可以弥补这一不足,也就是说最常用检测数组可以用arr instanceof Array就可以,当然,es5给我们提供了一个新方法isArray. 这里我要说的是自己遇到的一个问题,当使用instanceof去检测Sting类型的数据时,返回为false,Boolean和Number…
  javascript内置的类型检测机制并非完全可靠.比如typeof操作符,并不能准确的判断数据是哪个类型,比如:数组和对象就不能通过typeof来区分. typeof [] ==="object" ; // true typeof {} === "object"; // true 但是typeof用来区别对象与基本数据类型时就比较有用了. 基本数据类型检测 由于typeof对所有对象和数组类型返回的都是"object",所以它在区别对象与基…