null、undefined、typeof、instanceof

概述

JavaScript(ECMAScript标准)里共有5种基本类型:
undefined, null, Boolean, Number, String,
和一种复杂类型Object

JavaScript的设计者希望用null表示一个空的值,而undefined表示值未定义。事实证明,这并没有什么卵用,区分两者的意义不大。大多数情况下,我们都应该用nullundefined仅仅在判断函数参数是否传递的情况下有用。

undefined类型只有一个值,即undefined。当声明的变量还未被初始化时,变量的默认值为undefined
null类型也只有一个值,即nullnull用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。

var oValue;  
console.log(oValue == undefined); // true

这段代码显示为true,代表oVlaue的值即为undefined,因为我们没有初始化它。

console.log(null==document.getElementById('notExistNode'));

当页面上不存在id为"notExistNode"的DOM节点时,这段代码显示为"true",因为我们尝试获取一个不存在的对象。

 console.log(typeof undefined) // undefined
 console.log(typeof null) // object

第一行代码很容易理解,undefined的类型为undefined;第二行代码却让人疑惑,为什么null的类型又是Object了 呢?其实这是JavaScript最初实现的一个错误,后来被ECMAScript沿用下来。在今天我们可以解释为,null即是一个不存在的对象的占位符,但是在实际编码时还是要注意这一特性。

null

null表示"没有对象",即该处不应该有值。典型用法是:

  • 作为函数的参数,表示该函数的参数不是对象。
  • 作为对象原型链的终点。
Object.getPrototypeOf(Object.prototype) // null

undefined

undefined表示"缺省值",就是此处应该有一个值,但是还没有定义。典型用法是:

  • 变量被声明了,但没有赋值时,就等于undefined。
  • 调用函数时,应该提供的参数没有提供,该参数等于undefined。
  • 对象没有赋值的属性,该属性的值为undefined。
  • 函数没有返回值时,默认返回undefined。

typeof

typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型。
它返回值是一个字符串,该字符串说明运算数的类型。typeof 一般只能返回如下几个结果:number,boolean,string,function,object(null,数组,对象),undefined。我们可以使用 typeof 来获取一个变量是否存在,如:

if(typeof a != "undefined"){alert("ok")}

而不要去使用 if(a) 因为如果 a 不存在(未声明)则会出错,对于 Array,Null 等特殊对象使用 typeof 一律返回 object,这正是 typeof 的局限性。

instanceof

instanceof 用于判断一个变量是否某个类的实例.

var a=new Array();
alert(a instanceof Array); // true
alert(a instanceof Object); // true

两个结果都为true,因为ArrayObject 的子类。

function test(){};
var a = new test();
alert(a instanceof test) // true

谈到 instanceof 我们要注意一点,就是 functionarguments,我们大家也许都认为 arguments 是一个
Array,但如果使用 instaceof 去测试会发现 arguments 不是一个 Array 对象,尽管看起来很像,但其实它是类数组对象。

原文地址:https://www.cnblogs.com/peakleo/p/10572985.html