JavaScript类型检测笔记之typeof
JavaScript的类型检测说实话在我目前的工作中的用到很少,除了较为熟悉的typeof可以检测类型,经常在书中或者其他博文里还看到“instanceof”和“constructor”这两个与类型判断相关的词。
记录一下以备查阅,以下代码仅在chrome下测试,并且不太严谨,看客轻喷~
感觉篇幅有点长,分成了几部分:
typeof
语法:typeof 操作数 或者typeof(操作数)
作用:返回一个字符串来代表此操作数的类型
检测一下:
1 2 3 4 5 6 7 8 9 10 | console.log(typeof 1); //number console.log(typeof 'hello'); //string console.log(typeof true); //boolean console.log(typeof undefined); //undefined console.log(typeof function(){}); //function console.log(typeof null); //object console.log(typeof {}); //object console.log(typeof []); //object console.log(typeof new String('hello')); //object console.log(typeof new Number(1)); //object |
根据以上结果,直白的说用typeof是不能完全准确的判断一种数据的类型。
假设我有一个判断String类型的方法是用typeof来实现的
1 2 3 4 5 6 7 | var getType = function(str){ return typeof(str) == 'string'; } 同事A:var a = 'hello'; console.log(getType(a));//true 同事B:var b = new String('hello'); console.log(getType(b));//false |
可能你会觉得同事B比较新手,那你是对的。
可能你会觉得你这前端没规范,那你也是对的。
所以这种代码确实会出现。
更不用说当我用typeof来判断数组类型了。
用typeof来判断基本类型Number、Boolean、String、Undefined、Null基本可行(null还要再做处理),用typeof来判断引用类型Object、Array、Function是不靠谱的全部返回object
相关:
JavaScript类型检测笔记之constructor
JavaScript类型检测笔记之instanceof