JavaScript类型检测笔记之typeof

Js
yutao

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