空值NULL与undefined的区别

前言

不同语言有不同表示空值的写法和关键字

C++用NULL、java用null、Python用None NULL、JavaScript用NULL/undefined

一、NULL

null :空值

语义:希望表示一个对象被人为的重置为空对象,而非一个变量最原始的状态 。

在内存里的表示就是,栈中的变量没有指向堆中的内存对象。

1、NULL是一个特殊的对象

    typeof null	//object null值表示一个空对象指针,它代表的其实就是一个空对象
    Number(null)//0
    parseInt(null)//NaN

2、NULL是对象原型链的终点

对象Object的原型prototype为NULL

    console.log(Object.getPrototypeOf(Object.prototype))//null

3、NULL是对象变量初始值

定义了一个对象变量,在这个对象变量没有真正保存对象之前,一般情况会初始化为NULL。

4、释放引用NULL

当一个变量不再被需要被使用的时候,设置其值为NULL来解除引用。但是并不意味着会自动回收改值所占用的内存空间。设置为NULL的作用一方面是使得全局变量和全局变量的属性脱离执行环境,以便垃圾回收机制下次运行的时候将其回收;另一方面是避免循环引用的情况。(局部变量会在它们离开执行环境的时候自动解除引用)

二、undefined

声明一个空,js语言设计者认为不应该是或最好不是对象,于是发明了undefined表示缺少值,表示此处应该有值,但是没有定义,转换为数值时表示未定义。undefined 一般都来自于某个表达式最原始的状态值,不是人为操作的结果。

1、变量被声明但没有被初始化赋值

    var variable
    console.log(variable)

在这里插入图片描述

2、调用函数时,函数定义了形参,但调用函数时没有传递实参

    function fn(a) {
    
    
        console.log(a)
    }
    fn()

在这里插入图片描述

3、访问对象的不存在属性/未声明的变量

    console.log(Object.time)
    console.log(typeof day)

在这里插入图片描述

4、函数没有返回值

    function fn() {
    
    
        console.log('hello world')
    }
    var a = fn()
    console.log(a)

在这里插入图片描述

三、NULL和undefined的区别

NULL是人为设置的空对象的状态值

undefined不是人为设置的,是一个变量最原始、最自然的状态值

在开发过程中,为了更好的语义化,不要将一个变量随便赋值为undefined,释放对象的引用用NULL

猜你喜欢

转载自blog.csdn.net/weixin_45709829/article/details/123810478