1、typeof 操作符
typeof
是一个一元运算,放在一个运算数之前,运算数可以是任意类型。
它返回值是一个字符串,该字符串说明运算数的类型。
例如,
// Numbers typeof 37 === 'number'; typeof 3.14 === 'number'; typeof Math.LN2 === 'number'; typeof Infinity === 'number'; typeof NaN === 'number'; // 尽管NaN是"Not-A-Number"的缩写 typeof Number(1) === 'number'; // 但不要使用这种形式! // Strings typeof "" === 'string'; typeof "bla" === 'string'; typeof (typeof 1) === 'string'; // typeof总是返回一个字符串 typeof String("abc") === 'string'; // 但不要使用这种形式! // Booleans typeof true === 'boolean'; typeof false === 'boolean'; typeof Boolean(true) === 'boolean'; // 但不要使用这种形式! // Symbols typeof Symbol() === 'symbol'; typeof Symbol('foo') === 'symbol'; typeof Symbol.iterator === 'symbol'; // Undefined typeof undefined === 'undefined'; typeof declaredButUndefinedVariable === 'undefined'; typeof undeclaredVariable === 'undefined'; // Objects typeof {a:1} === 'object'; // 使用Array.isArray 或者 Object.prototype.toString.call // 区分数组,普通对象 typeof [1, 2, 4] === 'object'; typeof new Date() === 'object'; // 下面的容易令人迷惑,不要使用! typeof new Boolean(true) === 'object'; typeof new Number(1) ==== 'object'; typeof new String("abc") === 'object'; // 函数 typeof function(){} === 'function'; typeof Math.sin === 'function'; //NaN typeof 1/0 === 'NaN';
2、null
null
是JavaScript语言的关键字,它表示一个特殊值,常用来描述“空值”。对null
执行typeof
预算,结果返回字符串“object"
,那么也可以将null
认为是一个特殊的对象值,它的含义是"非对象"。但实际上,通常认为null
是它自有类型的唯一的一个成员,它可以表示数字、字符串、对象是“无值”的。
例如,
//处理null及'null'值 function dealNull(obj){ for(var i in obj){ if(null == obj[i] || 'null' == obj[i]){ obj[i]=''; }else if('object' == typeof obj[i]){ dealNull(obj[i]); } } }; // 测试的对象 var a = {}; a.aa = null; a.bb = 'null'; a.c = 1; a.b = {}; a.b.aaa = null; a.b.bbb = 'null'; a.b.c = 1; a.array = []; a.array.push({ 'a': null, 'b': 'null', 'c': 1 }); a.array.push({ 'a1': null, 'b1': 'null', 'c1': 1 }); a.array.push({ 'a2': null, 'b2': 'null', 'c2': 1 }); console.log(a); dealNull(a); console.log(a);
3、undefined
在 JavaScript 中有 Undefined (type)、undefined (value) 和 undefined (variable)。
Undefined (type) 是 JavaScript 的内置类型。
undefined (value) 是 Undefined 类型的唯一的值。任何未被赋值的属性都被假定为 undefined
(ECMA 4.3.9 和 4.3.10)。没有 return
语句的函数,或者 return
空的函数将返回 undefined
。函数中没有被定义的参数的值也被认为是 undefined
。
var a; typeof a; //"undefined" window.b; typeof window.b; //"undefined" var c = (function() {})(); typeof c; //"undefined" var d = (function(e) {return e})(); typeof d; //"undefined" 从 ECMA 3 开始,它可以被重新赋值,例如, undefined = "cjavapy"; //把一个字符串赋值给 undefined (变量) typeof undefined //"string" f = undefined; typeof f; //"string" console.log(f); //"cjavapy"
4、undefined 和 null 的区别
undefined
表示一个变量自然的、最原始的状态值,而 null
则表示一个变量被人为的设置为空对象,而不是原始状态。所以,在实际使用过程中,为了保证变量所代表的语义,不要对一个变量显式的赋值 undefined
,当需要释放一个对象时,直接赋值为 null
即可。
null
和 undefined
的值相等,但类型不同。
例如,
console.log(typeof undefined) // undefined console.log(typeof null) // object console.log(null === undefined) // false console.log(null == undefined) // true