zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    数组是个好东西
    排列(permutation) 用1,2,3,…,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要 求abc:def:ghi=1:2:3。按照“abc def ghi”的格式输出所有解,每行一个解。
    子序列的和
    韩信点兵
    水仙花数
    阶乘之和
    3n+1问题
    MongoDB 安装
    mysql中bigint在php中表示
    Android之NDK开发
  • 原文地址:https://www.cnblogs.com/coiorz/p/4727649.html
Copyright © 2011-2022 走看看