「译」JavaScript 的怪癖 2:两个「空值」:undefined 和 null

汇川伺服Modbus-RTU通讯实战:从帧结构解析到西门子PLC配置 本文详细解析了汇川伺服与西门子PLC通过Modbus-RTU协议进行通讯的实战步骤,包括帧结构解析、硬件连接、参数设置及PLC程序配置。通过具体案例和常见问题排查指南,帮助工程师快速掌握工业自动化中的通讯技术,提升设备调试效率。 阅读详情

原文:JavaScript quirk 2: two “non-values” – undefined and null

译文:「译」JavaScript 的怪癖 2:两个「空值」:undefined 和 null

译者:SingleSeeker


此文是 javascript 的 12 个怪癖(quirks) 系列的第二篇。 感谢 @SingleSeeker 对本文的翻译。

以下是正文:

对于“空值”或“空引用”,大多数编程语言只有一个值。比如,在 Java 中用的是 null。 但是在 Javascript 中却有两个特殊的值:undefined 和 null。 他们基本上是相同,但用法上却略有些不同。 在这个 系列教程 的最后,我会解释一下在 ECMAScript 6 中的一些变化。

undefined 是被语言本身所分配的。 如果一个变量还没有被初始化,那么它的值就是 undefined:

> var foo;
> foo
undefined

同理,当缺失参数时 JavaScript 会分配一个 undefined:

> function id(x) { return x }
> id()
undefined

null 是被开发者用来明确指出某个值是缺失的, 例如,对于 JSON.stringify():

> console.log(JSON.stringify({ first: 'Jane' }, null, 4))
{
    "first": "Jane"
}

校检:一个变量是否有值?

如果你想知道变量 v 是否有值,正常情况下,你需要同时检验 undefined 与 null。 幸运的是两个值都是 false 型。 因此,只用一个判断,就可以同时检验这两项是否为真:

if (v) {
    // v 有值
} else {
    // v 没有值
}

在本 系列 的第 5 部分——关于函数参数的处理——你将会看到更多的上面校检例子。 有一点要注意的是:这个检查也会把 false,-0, +0, NaN 与 '' 当成“空值”。 如果这不是你想要的,那么就不能使用上面的校检方法了。

你有两个选择。

有些人提倡使用不等于(!=)来校检 v 既不是 undefined 或 null:

if (v != null) {
    // v 有值
} else {
    // v 没有值
}

不过,这要求你要明白 != 认为 null 只等于它自己或是 undefined。 我喜欢用更有可读性的 !==:

if (v !== undefined && v !== null) {
    // v 有值
} else {
    // v 没有值
}

性能方面,所有在这个章节中提到的这三个校检基本是相同的。 所以,最后用哪个取决于你的需求还有你的品味。 一些压缩工具甚至用!= 重写了最后一条校检。

GitLab社区版vs企业版:本地部署性能对比与选型建议(含实测数据) 本文深入对比GitLab社区版(CE)与企业版(EE)在本地部署中的性能差异与功能特性,提供实测数据与选型建议。测试显示EE版在并发克隆、CI流水线启动等场景性能提升显著,尤其适合需要高级安全合规与CI/CD功能的团队。文章还包含硬件配置指南与成本效益分析,帮助技术决策者做出明智选择。 阅读详情

相关推荐

VIL-SLAM论文翻译:Stereo Visual Inertial LiDAR Simultaneous Localization and Mapping

文章目录写在前面摘要1.引言2.相关工作3.系统概述4.视觉前端5.双目视觉惯性里程计A. IMU预积分因子B. 非结构化视觉因子C. 优化和边缘化6. 激光建图A. LiDAR扫描去畸变B. 帧到地图配准7. LiDAR增强的闭环A. 回环检测B. 回环约束C. 全局位姿图优化D. 重定位8. 实验结果A.平台和软件B.测试和结果C. EuRoCMAV数据集测试9.结论 写在前面 写作参考: robot L 开源代码: 开源代码链接 论文原文: 原文链接 摘要 SLAM是移动和空中机器人的一项基本任务

JaydenQ的博客 2322

JavaScript的两个“空值” undefined和null

undefined表示”没有值“(既不是原始值也不是对象)。访问未初始化的变量、缺失的参数、以及缺失的属性会返回这个空值。并且如果函数中没有任何显式的返回值时,会隐式地返回undefined。 null的意思是“没有对象”。在仅有的在访问任何属性抛出异常时都会得到的值。 undefined出现的场景 1.未初始化的变量是undefined 2.缺失的参数是undefined 3.如果访问一...

qq_37855074的博客 680

ABB机器人绝对精度实战:从焊接路径优化到TCP控制(附配置步骤)

本文深入探讨了ABB机器人绝对精度在焊接路径优化中的核心价值。通过对比重复定位精度,阐明绝对精度如何补偿机械误差,确保TCP在整个运动路径上的轨迹精度。文章提供了从示教器激活绝对精度功能的详细配置步骤,并分享了针对焊接抖动和实现0.2mm路径精度的进阶调优技巧,包括TCP标定、伺服参数优化与系统维护。

weixin_29053073的博客 351

js 中null 与undefined

1. null null && 'aaa' // null 'aaa' && null // null null && undefined // null undefined && null // undefined 2. undefined undefined && 'aaa' // undefined 'aaa' && undefined // undefin...

qiao903498225的博客 329

ccproxy 6.61 注册机(纯绿/傻瓜/真正去除线程限制)

导读:   软件介绍   1、 CCPROXY 6.61 注册机(纯绿/傻瓜/真正去除线程限制)   ***前言,这次的升级官方改动不大,据说只是为了不被某些软件当病毒***   附件包中解压即免安装版,CcREGTOOLFF.exe为注册机。   本人继续向大家隆重推出《CCPROXY6.61哎呀……破解版》   还是那个提示:   在此之前,本人还是那句老话想提示大家,CCPROXY是

i53nd的专栏 1万+

Kettle实战:如何用JavaScript脚本实现数据库表批量操作(附完整代码)

本文详细介绍了如何利用Kettle的JavaScript脚本实现数据库表批量操作,包括表名采集、循环遍历和动态SQL生成等关键步骤。通过实战案例和完整代码示例,帮助ETL工程师高效处理数据密集型任务,提升数据库操作的自动化水平。

weixin_29019241的博客 232

js中变量null,undefined和‘’空串的判断方法 及 !和!!的区别及用法

js中变量null,undefined和‘’空串的判断方法 及 !和!!的区别及用法

weixin_42504805的博客 2538

多模态特征融合方法总结

由于本人的研究是文本、语音和图像三者模态数据的融合,所以针对的是这三种模态的特征融合方法进行总结。 首先,多模态特征融合的方法大体分为三种

华辰烟雨的博客 9万+

python执行js脚本 document报错_python3 执行js出错

这是js代码 由于代码混淆了 要分析出来/thread-354129-1-1.html?_dsign=3183fa78这个链接 我用别的软件调试了js代码没问题 不知道为什么python执行了显示错误js代码:var location = {href: function ($url) {console.log($url)},assign: function ($url) {console.log(...

weixin_39630048的博客 1629

天地图Api4.0.怎么根据geojson的数据。把一个省的所有市区标记色块和文字

天地图

肖肖肖丽珠的博客 1513

AD5940阻抗测量开发板实战:从源码获取到工程调试全解析

本文详细解析了AD5940阻抗测量开发板的实战应用,从源码获取到工程调试的全过程。AD5940作为ADI公司的高精度阻抗测量前端芯片,适用于生物阻抗分析、电化学传感器等领域。文章提供了开发环境搭建、工程配置、常见问题排查及进阶调试技巧,帮助开发者快速掌握AD5940开发板的使用方法。

weixin_30919429的博客 213

Android FastMixer低延迟音频实现原理与调试实战

FastMixer是Android AudioFlinger中专为超低延迟设计的轻量级混音通道,其本质并非配置开关,而是通过绕过重采样、音效链与归一化等耗时环节,依托固定周期调度(10ms)、零拷贝共享内存(ashmem)及HAL直通机制,将端到端延迟压缩至20ms以内。该技术核心支撑语音通信、实时音乐协作、车载HUD等对时序敏感的应用场景,但需严格满足采样率(48kHz)、格式(PCM_16BIT)、缓冲区(480帧对齐)及策略标签(allow-fast-track)三重准入条件。实践中常见失效源于Aud

weixin_33850890的博客 296

PLC凸轮开关指令编程应用——控制算法

凸轮开关指令的作用是在PLC程序中根据凸轮开关(Cam Switch)的状态执行不同的操作。凸轮开关通常是机械式的开关装置,它的位置会随着机械运动的变化而改变。凸轮开关的状态可以用来检测机器的位置、角度或其他相关信息,从而触发相应的控制动作。总结起来,凸轮开关指令是PLC编程中常用的一种控制算法,通过检测凸轮开关的状态来触发相应的操作。本文将介绍凸轮开关指令的应用和相应的控制算法,并提供相关的源代码示例。在这个示例中,凸轮开关状态的值代表不同的位置,根据凸轮开关状态的不同,执行相应的动作。

LiJavascript的博客 1035

「译」javascript 的 12 个怪癖(quirks)

「译」javascript 的 12 个怪癖(quirks) 原文:12 JavaScript quirks 译文:「译」javascript 的 12 个怪癖(quirks) 译者:justjavac 实际上 javascript 是一个相当简洁的语言,但是也难免会有一些怪癖(quirks)。 本章是 javascript 的 12 个怪癖系列

程序员写的技术 FAQ 和杂文 1036

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

分享 6 个你可能还不知道的关于 “null” 和 “undefined” 的秘密

英文 | https://javascript.plainenglish.io/6-secrets-about-null-and-undefined-that-you-should-know-bf759ab59bce尽管我已经工作了很多年,但我对“null”和“undefined”还是有点模糊不清,我感到很惭愧。如果你也和我一样有关它们的困惑,请你认真看完这篇文章,它会告诉你一切。每个人都知道,它...

前端达人 400

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

JavaScript学习笔记——类型(undefined、null、NaN等)

JavaScript的优点之一是,无需知道这种语言的很多细节,就可以使用它来做很多事情。但要真正掌握这门语言、提升水平,必须对类型了如指掌。 JavaScript的类型系统并不特别缜密,我们会发现它有一些怪癖。把这些怪癖弄清才能避免各种与类型相关的难堪错误。 类型 基本类型:数字、字符串、布尔值等低级基本类型 特殊的类型:对象(用于表示问题空间中的事物) ...

Insomnia_X的博客 392

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

翻译编辑-JavaScript有关的10个怪癖和秘密

数据类型和定义 1. Null是个对象 JavaScript众多类型中有个Null类型,它有个唯一的值null, 即它的字面量,定义为完全没有任何意义的值。其表现得像个对象,如下检测代码: alert(typeof null); //弹出 'object' 您可以狠狠地点击这里:null为对象测试demo 如下截图: 尽管typeof值显示是"object",但n...

amsm18138的博客 189

javaScript怪癖分析

最近了解到javascript中有些编程怪癖现象,很有意思,有必要总结一下: 1.未知变量名创建全局变量 在我们平常的编写javascript程序的时候,有的人写法不是很正规,在定义变量的时候 直接定义“变量名=值”前面没有加上"var" 则javascript自动将其定义为全局变量看待 但在ECMAScript5 的严谨模式得到警告: 例如:fu...

weixin_30337251的博客 136

JavaScript有关的10个怪癖和秘密

JavaScript有关的10个怪癖和秘密 发布时间: 2011-08-25 15:11  阅读: 2313 次  原文链接  全屏阅读 [收藏]   摘要:在本片文章中,作者将向您讲述JavaScript中最鲜为人知的秘密。   原文作者:Andy Cro

我的博客 799

总结javascript的那些怪癖

/**  *  * @authors Benjamin(http://blog.youkuaiyun.com/cuew1987)  * @date    2013-11-29 14:04:00  * @content 总结javascript的那些怪癖(trick)     */ /**  * trick01:NaN是个数值  * NaN:表示某个值不是数值,但其本身又是数值,且不等于其自

Benjamin——前端攻城师 1584

JavaScript有关的10个怪癖和秘密(转)

数据类型和定义 ------------------------------------------------------------------------------------------------ 1. Null是个对象   JavaScript众多类型中有个Null类型,它有个唯一的值null, 即它的字面量,定义为完全没有任何意义的值。其表现得像个对象,如下检测代码: ...

weixin_33946020的博客 233

javascript 的 12 个怪癖(quirks)

实际上 javascript 是一个相当简洁的语言,但是也难免会有一些怪癖(quirks)。 本章是 javascript 的 12 个怪癖系列的第一篇, 也是一个目录,为的是你能更好的了解它们: 隐式数值转换(Implicit conversion of values) (已翻译) 两个「空值」:undefined 和 null(Two "non-values"

zhujiaxing666666的专栏 665
上一篇: 「译」JavaScript 的怪癖 1:隐式类型转换
下一篇: 为什么说任何基于比较的算法将 5 个元素排序都需要 7 次?
迷渡
迷渡 领域专家: 前端开发技术领域 领域专家: 前端开发技术领域
博客等级 码龄19年 2405粉丝 124原创
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值