以前打码的时候,在判断变量是否已经定义,一般都是使用 变量==undefined,其实这并没有错,我们确实可以直接这样判断,但是有人建议用 typeof来判断是否是undefined;
我直接写出了类似下面的代码:
if( typeof ( a ) == undefined ){ //do something }
然后这个bug就出来了,我没初始化a,这个if返回的却是false;
这是很费解的东西,因为这显而易见了,a 没有初始化,我用
//我采用下列方式查看aalert(a); //undefinedconsole.log(a);//undefinedconsole.log( typeof(a)); //undefined
上面的调试结果都是undefined,那我就纳闷了,为什么 typeof( a ) == undefined 不是true,打码的时候因为时间问题没有细想,就把这个问题记录下来了。
然后你可能就猜中了,这是一个低级错误,稍微想一下就知道,typeof既然是返回数据类型的,返回的结果有string,number,object,boolean,function,undefined,这说明什么了?
如果我想判断一个变量是不是数字,难道我会像下面这样写吗?
if( typeof ( a ) == number ){ //do something }
很明显你不会这样写,因为js没有number这个东东,此时你会想到:
if( typeof ( a ) == 'number' ){ //do something }
对的这样写就是对的,typeof返回的事字符串结果,差点吐血,然后那个bug就这样被解决了:
if( typeof ( a ) == 'undefined' ){ //do something }
官方文档也说的很清楚:
typeof 运算符是返回一个用来表示表达式的数据类型的字符串。
typeof 返回值有六种可能: "number," "string," "boolean," "object," "function," 和 "undefined.
本来是经常查官方文档的,但是这次因为事太多并没有去查,这就直接导致了这个问题困扰了我几天,但是这是得不偿失的,遇到对函数语法的问题,查官方文档永远是最准确的,要养成查官方文档,甚至阅读官方文档的习惯。
记录这个问题的始末,就是提醒自己多阅读官方文档!