基于你不知道的js中,里面的内容都是基于es6的引擎环境,所以增加了一种内置类型:一共是:
(1)null
(2)undefined
(3)boolean
(4)number
(5)string
(6)object
(7)symbol
当你使用typeof 来查看类型的时候,返回的是类型的字符串,其中,对于null的判断,我们采用复合条件来检测null值的类型:
var a = null;
(!a && typeof a==='object')//true
当你检测函数的时候:
typeof function a(){} ==='function'//true
函数不仅仅是对象,还可以拥有属性,如:
function a(b,c){
/*...*/
}
a.length //2 表示其声明的参数的个数
当你使用undefined的时候一定要与undeclared分开,是两码事,已经在作用域中声明但是还没赋值的变量是undefined,相反,还没有在作用域中声明的变量是undeclared的:
var a ;
typeof a://"undefined";
b;//ReferenceError:b is not defined
but...
二者的typeof的结果是一样的,都是undefined
举一个例子:在程序中使用全局变量DEBUG作为调试模式的开关,在输出调试信息到控制台之前,我们要检测DEBUG变量是否已经声明,但是顶层的全局变量声明var DEBUG = true只是在debug.js的文件中才有,这时候采用这样的安全防范机制:
if(typeof DEBUG !=="undefined"){
console.log(' debug is staring here')
}
通常使用typeof来做安全防范机制,还有一种方法:检测所有全局变量是否是全局对象的属性
if(window.DEBUG){
//...
}
当访问的属性不存在的时候,也不会产生ReferenceError,只是undefined.