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