• 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 对象,尽管看起来很像,但其实它是类数组对象。

  • 相关阅读:
    ref和out的区别
    final、finally、finalize的区别
    get和post的区别
    什么是事务
    锁的详细
    什么是游标
    什么是存储过程
    委托的来由
    多线程的秘密
    String str=null; 和String str=""的区别
  • 原文地址:https://www.cnblogs.com/peakleo/p/10572985.html
Copyright © 2020-2023  润新知