zoukankan      html  css  js  c++  java
  • javascript中undefined和null的区别详解

    一、问题的由来

    永远不要直接使用undefined进行变量判断
    使用字符串"undefined"对变量进行判断



    这里,undefined是原始值,在JS中undefined出现只有两种情况,一种是变量未定义。一种是定义了变量,但是没有赋值。

    如果这个地方person未定义,那么利用person===undefined全等判断就会报错,person未定义
    但是如果使用typeof来判断,那么就不会报错了.

    ep:

    alert(person == undefined);//报错 person is undefined

    alert(typeof person);//不会报错 undefined

    二、什么是原始值?

    原始值是什么意思呢?

    在ECMAScript中,变量可以存放两种类型的值,即原始值和引用值.

    原始值(primitive value):

    原始值是固定而简单的值,是存放在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置.

    引用值(reference value):

    引用值则是比较大的对象,存放在堆(heap)中的对象,也就是说,存储在变量处的值是一个指针(pointer),指向存储对象的内存处.

    所有引用类型都集成自Object.

    如果一个值是引用类型的,那么它的存储空间将从堆中分配.由于引用值的大小会改变,所以不能把它放在栈中,否则会降低查询速度.相反,存放变量的栈空间中的值是该对象存储在堆中的地址.地址的大小是固定的,所以把它存放在栈中对变量性能无任何负面影响.如图:

    有哪些类型是原始类型呢?

    原始类型(primitive type)有以下五种类型:Undefined,Null,Boolean,Number,String

    我们可以使用typeof来判断一个是否在某个类型的范围内.

    typeof运算符

    对变量或值使用typeof运算符将会返回下列值之一:

    "undefined" 如果变量是Undefined类型的
    "boolean" 如果变量是Boolean类型的
    "number" 如果变量是Number类型的
    "string" 如果变量是String类型的
    "object" 如果变量是一种引用类型或者Null类型的

    注意:

    1.返回值为字符串类型.

    2.和原始类型比,还差了个null,这个比较特殊,使用typeof(null),返回的是"object",我们将null理解成是object的占位符.

    三、最初设计

    JavaScript的最初版本是这样区分的:null是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值,转为数值时为NaN。

    
    Number(undefined)
    // NaN
    
    5 + undefined
    // NaN
    

     

    四、目前的用法

    但是,上面这样的区分,在实践中很快就被证明不可行。目前,null和undefined基本是同义的,只有一些细微的差别。

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

    (1) 作为函数的参数,表示该函数的参数不是对象。

    (2) 作为对象原型链的终点。

    
    Object.getPrototypeOf(Object.prototype)
    // null
    
    

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

    (1)变量被声明了,但没有赋值时,就等于undefined。

    (2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。

    (3)对象没有赋值的属性,该属性的值为undefined。

    (4)函数没有返回值时,默认返回undefined。

    
    var i;
    i // undefined
    
    function f(x){console.log(x)}
    f() // undefined
    
    var  o = new Object();
    o.p // undefined
    
    var x = f();
    x // undefined
    

     



  • 相关阅读:
    SoapUI 使用笔记
    git 使用笔记(二)
    git 使用笔记(一)
    jquery 拓展
    hdu 1024 Max Sum Plus Plus (DP)
    hdu 2602 Bone Collector (01背包)
    hdu 1688 Sightseeing (最短路径)
    hdu 3191 How Many Paths Are There (次短路径数)
    hdu 2722 Here We Go(relians) Again (最短路径)
    hdu 1596 find the safest road (最短路径)
  • 原文地址:https://www.cnblogs.com/lirui1992/p/3833548.html
Copyright © 2011-2022 走看看