null 和undefined异同

本文探讨了JavaScript中null和undefined的起源与区别,详细解释了它们在类型转换、typeof运算及内存管理上的不同,以及在什么场景下应使用null或undefined。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常见的数计算机语言中,有且仅有一个表示“空”的值。例如:C语言中的NULL,Java语言中的null,Python语言中的None,Ruby语言中的nil等。

然而,在JavaScript语言中出现了两个表示“空”的值:undefined和null。这是因为祖师爷留个咱们的遗产呀。虽然都表示“空”,但是并不完全一致的,面试中经常提及异同这类的问题。

历史原因

这与JavaScript的历史有关。1995年JavaScript诞生时,最初像Java一样,只设置了null作为表示"无"的值。

根据C语言的传统,null被设计成可以自动转为0。

Number(null)// 0
5 + null // 5

但是,JavaScript的祖师爷(Brendan Eich),觉得这样做还不够,有两个原因。

首先,null像在Java里一样,被当成一个对象。但是,JavaScript的数据类型分成原始类型(primitive)和合成类型(complex)两大类,祖师爷觉得表示"无"的值最好不是对象。

其次,JavaScript的最初版本没有包括错误处理机制,发生数据类型不匹配时,往往是自动转换(隐式转换)类型或者默默地失败。祖师爷觉得,如果null自动转为0,很不容易发现错误。

因此,祖师爷又设计了一个undefined。

先看不同点
  • Number类型转换的值不同
console.log(Number(null)); // 0
console.log(Number(undefined)); // NaN
  • typeof 运算输出值不同

null: null类型,代表“空”,代表一个空对象指针,使用typeof运算得到"object"。

undefined:undefined类型,当一个声明了一个变量未初始化时,得到的就是"undefined"

 console.log(typeof null); // 'object'
 console.log(typeof undefined); // 'undefined'
  • 设置为null的变量或者对象会被内存收集器回收
相同点
  • 相等
    实际上,undefined值是派生自null值的,ECMAScript标准规定对二者进行相等性测试返回true。也就是说在js的隐式转换中,if判断都是false
console.log(null === undefined); // false
何时是null,何时是undefined
  • null表示"没有对象",此处应该无值。例如:
    1、作为函数的参数,表示该函数的参数不是对象
    2、作为对象原型链的终点

  • undefined表示"缺少值",此处应该有值却未定义。例如:
    1、声明的变量未赋值时等于undefined
    2、调用函数未传递应有的参数时,对应参数等于undefined
    3、对象的属性没有赋值时等于undefined
    4、函数没有返回值时,默认返回undefined

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值