undefined与null的区别

猫耳语音下载(mediadown) 西宾猫耳语音下载工具,能够帮助你下载猫耳音频节目。如果你是会员,它还能帮你下载会员节目。 阅读详情

大多数计算机语言,有且仅有一个表示"无"的值,比如,C语言的NULL,Java语言的null,Python语言的None,Ruby语言的nil。

有点奇怪的是,JavaScript语言居然有两个表示"无"的值:undefined和null。这是为什么?

undefined vs. null

一、相似性

在JavaScript中,将一个变量赋值为undefined或null,老实说,几乎没区别。


var a = undefined;

var a = null;

上面代码中,a变量分别被赋值为undefined和null,这两种写法几乎等价。

undefined和null在if语句中,都会被自动转为false,相等运算符甚至直接报告两者相等。


if (!undefined) 
    console.log('undefined is false');
// undefined is false

if (!null) 
    console.log('null is false');
// null is false

undefined == null
// true

上面代码说明,两者的行为是何等相似!

既然undefined和null的含义与用法都差不多,为什么要同时设置两个这样的值,这不是无端增加JavaScript的复杂度,令初学者困扰吗?Google公司开发的JavaScript语言的替代品Dart语言,就明确规定只有null,没有undefined!

二、历史原因

最近,我在读新书《Speaking JavaScript》时,意外发现了这个问题的答案!

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

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


Number(null)
// 0

5 + null
// 5

但是,JavaScript的设计者Brendan Eich,觉得这样做还不够,有两个原因。

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

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

因此,Brendan Eich又设计了一个undefined。

三、最初设计

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

【软考高级系统架构论文】论微服务架构及其应用 本文围绕“论微服务架构及其应用”展开论述。首先概要介绍了本人参与的某公司线上电子商务平台项目,在其中担任系统架构设计师。接着分析了微服务架构相较于单块架构的特点,如模块化与组件化、技术栈多样性、独立部署与扩展、高度容错与可用性等。最后结合项目阐述了软件架构对微服务模式的采用情况,以及实施过程中遇到的问题及解决方案,如服务划分粒度、数据一致性、监控与故障排查等问题,并给出了相应解决办法。 阅读详情

相关推荐

【计算机视觉】pyrealsense2:Intel RealSense 深度相机的 Python 接口实战指南

pyrealsense2:Intel RealSense 深度相机的 Python 接口实战

weixin_43988131的博客 4350

undefined == null的正确解释

console.log( undefined == null ) //true 有文章对此进行了解释,大致是下面的意思:undefined的布尔值是false,null的布尔值也是false,所以它们在比较时都转化为了false,所以 undefined == null 。 好吧,上面的解释是错误的。 可以从Javascript规范中找到答案: 规范中提到, 要比较相等性之前,不能将...

个人前端记录 3万+

手把手移植st7701s驱动:MT6763+安卓8.0屏幕适配保姆级教程

本文详细介绍了在MT6763平台上移植ST7701S驱动的完整流程,涵盖从LK层到Kernel层的适配方案,特别针对安卓8.0系统的特殊要求。通过MIPI转RGB屏幕适配的实战教程,帮助开发者解决常见显示问题,包括无显示、色彩异常和屏幕错位等,并提供高级调试技巧如彩条测试模式和闪屏解决方案。

weixin_29186249的博客 156

如何理解undefined和null的比较?

undefined == null

98年热爱开发的前后端开发工程师! 2482

MT5交易软件系统源码

Manager配置的功能及权限:管理客户、开户,销户、入金、信用额度、修改定单、人工交易报表、设定点差、强制平仓、修改密码,设定持仓交割单或挂单小止盈止损点数;26、修改价格 27、更改K线图历史价格 28、同步历史数据;2、系统设置 3、交易管理 4、交易柜台 5、价格更改 6、多台服。务器联机 7、恢复交易历史 8、数据源调整 9、备份服务调整 10、交易市场设定 11、交易单更改 12、平台时间设定(全世界) 13、可添加商品;15、设置商品利息;独立主机(服务器、VPS、VM)

tutujunjun的博客 904

第77步 时间序列建模实战:多因素预测 vol-2(以决策树回归为例)

第77步 时间序列建模实战:多因素预测 vol-2(以决策树回归为例)

Jet4505的博客 1008

"==" undefined== null ?

1、undefined == null // true 这个奇葩我也不知道为什么就相等了。毕竟在进行类型转换的时候都是转换为数字,undefined 转换为数字是 NaN ,null 转换为数字是0 2、null == 0 // false null有属于自己的类型 Null,而不属于Object类型,typeof之所以会判定为 Object类型,是因为JavaScript数据类型在底层都...

Ultraman_and_monster的博客 2724

从零开始学 PyTorch 7天路线图(完整可运行代码版)

本文提供了5天PyTorch入门教程的完整代码,涵盖从基础到实战的核心内容。Day1测试环境并介绍张量基础;Day2讲解常用张量操作;Day3演示自动求导机制;Day4实现完整线性回归模型;Day5构建MNIST手写数字识别全连接网络。所有代码可直接运行,包含GPU检测、梯度计算、模型训练和可视化等关键环节,帮助新手快速掌握PyTorch核心概念和典型应用场景。

IT老农民的博客 314

==和===的区别,Undefined与Null的区别,Undefined为什么“==“Null?

==和===的区别,Undefined与Null的区别,Undefined为什么"=="Null?

lznmvp777的博客 601

044、镜头脏污与异物检测:产线 AOI 检测方案与 ISP 脏污补偿

文章摘要(148字) 本文针对镜头生产中的脏污检测问题,提出产线AOI检测与ISP补偿结合的解决方案。产线端采用明场、暗场、偏振三通道联合检测技术,将油污漏检率从8.3%降至0.2%。ISP端通过RAW域局部梯度分析和频域补偿算法,动态修复产线漏检的微小脏污。作者结合实战案例,详细分析了传统灰度阈值法的局限性,并给出多模态检测的代码实现要点,强调必须建立"产线拦截+终端补偿"的双重防护机制。

sundong_81的博客 228

财务数字化——解读美的战略规划之财务组织体系建设【附全文阅读】

本文提出适用于集团企业的财务管控方案,面向财务负责人、HR及战略规划人员。方案整合四种管控模式,结合500强案例,构建"职能定位-架构设计-权责划分-人才发展"体系,涵盖财务五大模块。通过明确总部与事业部权责边界,提供组织架构等实操框架,旨在平衡财务管控与业务支持,提升效率与风控能力,满足集团财务体系规范化建设需求。

cdfunlove的博客 663

undefined等于null

undefined==null 返回true

qq_27806371的博客 299

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Undefined与Null的区别

Undefined与Null的区别 一、基本数据类型 在介绍undefined与null之前,我们先来了解一下ECMAScript中的数据类型。在ECMAScript中有六种简单数据类型(也称为基本数据类型): Undefined、Null、Boolean、Number 和 String、Symbol (ES6中引入) 。还有一种复杂数据类型——Object。 Undefined和Null都只有一个值,分别对应着undefined和null。这两种不同类型的值,既有着不同的语义和场景,又表现出较为相似

qq_42239440的博客 1万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

NULL和undefined的区别

1、JavaScript的最初版本是这样区分的:null是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值,转为数值时为NaN。 Number(undefined) // NaN 5 + undefined // NaN 2、null表示"没有对象",即该处不应该有值。典型用法是: (1) 作为函数的参数,表示该函数的参数不是对象。 (2) 作为对象原型链的终点。 Object.getPrototypeOf(Object.prototype) // null

Zhou_xiaoqian的博客 2880

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Undefined和Null的区别

Undefined类型只有一个值,即undefined。当声明的变量还未被初始化时,变量的默认值为undefined。 Null类型也只有一个值,即null。null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。 1. 代码显示为true,代表a的值即为undefined,因为我们没有初始化它。 2. 这段代码显示为"true",因为我们尝试获取一个不存在...

weixin_42213025的博客 1万+

null和undefined的区别是什么?

参考:undefined与null的区别 1、undefined 表示“无”的原始值或者说表示“缺少值”,就是此处应该有一个值但是还没有定义 转为数值为NaN 例如变量被声明了但没有赋值,就等于undefined;函数没有返回值默认返回undefined;对象没有赋值的属性,该属性的值为undefined var i; i // undefined function f(x){console.log(x)} f() // undefined var o = new Object(); o.p //

weixin_43912756的博客 5337

Null和undefined的区别

Null和undefined的区别 null是一个表示”无”的对象,数值是为0,undefined是一个表示”无”的原始值,转为数值时为NaN。当声明的变量还未被初始化时,变量的默认值为undefined。 Null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象 Undefined表示”缺少值”,就是此处应该有一个值,但是还没有定义。 null表示”没有对象”,即该处不应该有值。...

珎珎啊 1122

JS中Null与Undefined的区别

在JavaScript中存在这样两种原始类型:Null与Undefined。这两种类型常常会使JavaScript的开发人员产生疑惑,在什么时候是Null,什么时候又是Undefined? 一. 定义上的区别 Undefined类型只有一个值,即undefined。当声明的变量还未被初始化时,变量的默认值为undefined。 Null类型也只有一个值,即null。null用来表示尚未存在的对象(...

EmotionComputer 199

null 与 undefined 的区别

null 表示一个空对象指针。 也就是说,它通常表示一个对象应该存在,但目前是空值。 它是一种故意为之的“无值”。 程序赋予的。 undefined 表示一个变量声明了但未赋值,或者一个对象缺少某个属性,或者函数没有返回值(或者 return 语句没有明确返回值)。 它是一种更偏向于“不存在”或者“未定义”的含义。 引擎赋予的。

2302_81312344的博客 2536

null和undefined的区别

在 JavaScript 中, 和 都表示“没有值”或“值不存在”,但它们有一些重要区别: :通常是有意将变量赋值为空,以表示“没有对象”或“值为空”。 4. 比较不同 :返回 ,因为它们在非严格比较时被认为是相等的。 :返回 ,因为类型不同。 5. 常见用途 :表示未初始化的变量、未定义的属性或函数没有返回值。 :表示对象为空、手动清除对象引用或赋值为空。 示例对比 总结 是 JavaScript 自动赋值的,表示“未定义”或“缺失”

江湖的博客 550

null 和 undefined 的区别

null 和 undefined 的区别

weixin_62800373的博客 1万+

null和undefined区别

相同性: 在JavaScript中,null 和 undefined 几乎相等 在 if 语句中 null 和 undefined 都会转为false两者用相等运算符比较也是相等 console.log(null==undefined); //true 因为两者都默认转换成了false console.log(typeof undefined); //"undefined" console.log(typeof null); //"object" console.log

田兴的博客 5502

null 和 undefined 有什么区别

尽管二者在布尔上下文中均被视为“假值”(falsy),且常被开发者视为可互换的“空值”,但它们在语义、产生机制、类型检测和工程实践层面存在本质差异。其语义是“有意的空”,常用于初始化对象变量、表示可选对象的缺失,或作为API的返回值指示“无结果”。希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。是JavaScript中两个独立的原始类型(primitive types),各自代表不同的“无”状态。它表示一个有意的、明确的“空对象引用”或“无值”。

一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身"农奴"把歌唱,一边打入敌人内部一边持续提升自己,为我们广大开发同胞谋福祉,坚决抵制睿智产品折磨我们码农兄弟! 1070

null和undefined有什么区别?

​ 一.类型与定义 null:表示“空对象指针”,属于 object 类型(typeof null 返回 "object"),需显式赋值 。 undefined:表示“未定义”或“未初始化”,属于 undefined 类型(typeof undefined 返回 "undefined"),是未赋值变量的默认值 。 ​

m0_72762367的博客 1016

null 和undefined 的区别

null 和undefined 的区别 1、undefined  表示"缺少值",就是此处应该有一个值,但是还没有定义  典型用法是:   (1)变量被声明了,但没有赋值时,就等于undefined。   (2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。   (3)对象没有赋值的属性,该属性的值为undefined。   (4)函数没有返回值时,默认返回undefined...

wuyitong116的博客 3485
上一篇: JS仿百度搜索自动提示框匹配查询功能
下一篇: http协议Connection:Keep-alive 是怎么用,一次连接可以处理多个请求?
java_zhaoyanli
博客等级 码龄12年 61粉丝 250原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值