js数据类型判断、unll和undefined
1、js判断数据类型
-
typeof
可以判断 undefined、string、number、Boolean、function。
但不能判断 null,typeof null
返回Object
。
也不能判断 Array,typeof 数组
返回Object
。 -
instanceof
用于测试构造函数的 prototype 属性是否出现在对象的原型链中。
可以用它判断 Function、Array。
但不要用它判断Object
,因为数组/函数 instanceof Object
为 true。 -
constructor
目前运算最快的判断变量类型的方式。
可以判断除了null
或undefined
类型。
当检测null
或undefined
类型的constructor
属性时会报错。 -
Object.prototype.toString.call()
Object.prototype.toString.call(null); // "[object Null]"
Object.prototype.toString.call(undefined); // "[object Undefined]"
Object.prototype.toString.call(false); // "[object Boolean]"
Object.prototype.toString.call(123); // "[object Number]"
Object.prototype.toString.call('abc'); // "[object String]"
Object.prototype.toString.call([]); // "[object Array]"
Object.prototype.toString.call({}); // "[object Object]"
Object.prototype.toString.call(function(){}); // "[object Function]"
PS:在ES5中的判断数组还可以用Array.isArray()。
2、null 和 undefined 的区别
- undefined 希望表示一个变量最原始的状态,而非人为操作的结果 。
- typeof 之所以会判定 null 为 Object 类型,是因为JavaScript 数据类型在底层都是以二进制的形式表示的,二进制的前三位为 0 会被 typeof 判断为对象类型,而 null 的二进制位恰好都是 0 ,因此,null 被误判断为 Object 类型。
- null 希望表示 一个对象被人为的重置为空对象。
- 当一个对象被赋值了null 以后,原来的对象在内存中就处于游离状态,GC 会择机回收该对象并释放内存。因此,如果需要释放某个对象,就将变量设置为 null,即表示该对象已经被清空,目前无效状态。