• js中的null和undefined


    JS里的6大类型: number,string,boolean,null,undefined,object,其中null和undefined就占了2个位子,而它们的作用都是代表空,在平时的工作中我也完全没有发现这两者之间的差异,那它们到底有什么区别呢。

    主要体现在语义上:

    null表示一个值被定义了,定义为“空值”。undefined表示值根本没被定义,值不存在。换句话说,设置一个值为null是合理的,而设置一个值为undefined是不合理的。

    注意不管值是null还是undefined,变量必须声明,否则是会报错的,这和访问属性的值是不同的。

    var a;
    var b = {};
    
    console.log(a === undefined);    //true
    console.log(a === null);    //false
    
    console.log(c);    //报错
    
    console.log(b.x === undefined);    //true
    console.log(b.x === null);    //false

    当访问属性时,会调用内部的[[get]]方法(详见汤姆大叔的深入理解javascript系列),在原型链上没找到属性的话则返回undefined。

    O.[[Get]](P):
     
    // 如果是自己的属性,就返回
    if (O.hasOwnProperty(P)) {
      return O.P;
    }
     
    // 否则,继续分析原型
    var __proto = O.[[Prototype]];
     
    // 如果原型是null,返回undefined
    // 这是可能的:最顶层Object.prototype.[[Prototype]]是null
    if (__proto === null) {
      return undefined;
    }
     
    // 否则,对原型链递归调用[[Get]],在各层的原型中查找属性
    // 直到原型为null
    return __proto.[[Get]](P)

    再回到我们的话题,所以如果判断一个值是否存在,那么应该使用obj.value === undefined而不应用null。

    在平时常见的情况中:

    1.原型链的终点是null

    2.变量声明没有赋值是undefined

    3.对象没有定义的属性值是undefined

    4.函数没有返回值时,返回undefined

    5.调用函数时,缺失的参数值是undefined

    有不足之处,欢迎指正交流。

  • 相关阅读:
    Spark实战练习03--Pair RDD
    Spark实战练习02--处理分隔符
    Spark实战练习01--XML数据处理
    做一个”合格“的程序员(二)——学习管理
    做一个“合格”的程序员(一)——基础能力
    图像处理算法之帧间差分法
    图像几何变换之透视变换
    图像几何变换之仿射变换
    内部排序之简单选择排序
    非极大值抑制算法
  • 原文地址:https://www.cnblogs.com/coiorz/p/4727649.html
Copyright © 2020-2023  润新知