null === undefined_【英】两个“非值”:undefined 和 null

前言

本期英文由@Dr. Axel Rauschmayer分享。

英文从这开始~~

Most programming languages have only one value for “no value” or “empty reference”. For example, that value is null in Java. JavaScript has two of those special values: undefined and null. They are basically the same (something that will change with ECMAScript 6, as will be explained in the last post of this series), but they are used slightly differently.

undefined is assigned via the language itself. Variables that have not been initialized yet have this value:

> var foo;

> foo

undefined

Similarly, JavaScript assigns undefined to missing parameters:

> function id(x) { return x }

> id()

undefined

null is used by programmers to explicitly indicate that a value is missing. E.g. for JSON.stringify():

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

{

"first": "Jane"

}

Check: does a variable have a value?

If you want to know whether a variable v has a value, you normally have to check for both undefined and null. Fortunately, both values are truthy. Thus, checking for truthiness via if performs both checks at the same time:

if (v) {

// v has a value

} else {

// v does not have a value

}

You’ll see more examples of the above check in the post for quirk 5 about parameter handling. There is one caveat: this check also interprets false, -0, +0, NaN and '' as “no value”. If that isn’t what you want then you can’t use it. You have two choices.

Some people advocate lenient non-equality (!=) to check that v is neither undefined nor null:

if (v != null) {

// v has a value

} else {

// v does not have a value

}

However, that requires you to know that != considers null to be only equal to itself and to undefined. I prefer the more descriptive use of !==:

if (v !== undefined && v !== null) {

// v has a value

} else {

// v does not have a value

}

Performance-wise, all three checks shown in this section are more or less the same. Hence, which one you will end up using depends on your needs and your taste. Some minification tools even rewrite the last check to a check via !=. 

关于本文 作者:@Dr. Axel Rauschmayer 原文:https://2ality.com/2013/04/quirk-undefined.html

74e844288a9f8ff65cf906d5b747d570.png

为你推荐

【第1244期】详解Object.create(null)

【英】在JavaScript中使用查询参数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/561202.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ios html清除缓存,iOS开发之1行代码实现缓存计算及清除缓存

话不多说,直接撸代码//// gzhCache.h// cache//// Created by 郭志贺 on 2020/5/27.// Copyright © 2020 郭志贺. All rights reserved.//#import NS_ASSUME_NONNULL_BEGINinterface gzhCache : NSObject/// 计算缓存大小(float)filePath;/// 清理缓存(void)cl…

有趣的编程代码_iPad amp; Mac 编程游戏推荐

今天想给大家推荐一款免费的编程 App,它的名字叫「Swift Playgrounds」。会不会有人一看到“编程”两个字就觉得怕了怕了,感觉太深奥了?但是,这款游戏真的简单又有趣,值得你去试试。▍应用介绍这是一款适用于 Mac 和 i…

python使用pkg包_Python deb-pkg-tools包_程序模块 - PyPI - Python中文网

python包deb-pkg-tools是要构建和检查Debian binary packages和二进制包的存储库。它的主要用例是自动化构建。一些功能在命令行界面中公开(如下所述)因为在shell脚本中使用非常方便,而其他功能将用作python api。包当前在cpython上测试2.6、2.7、3.4、3.5、3.6、3.…

有ul没有字html,HTML ul 标签

定义和用法标签定义无序列表。实例无序 HTML 列表:CoffeeTeaMilkTIY (请在页面底部查看更多实例)浏览器支持所有主流浏览器都支持 标签。HTML 与 XHTML 之间的差异在 HTML 4.01 中,ul 元素的 "compact" 和 "type" 属性是不被赞成使用…

tensorflow支持python3.7吗_TensorFlow2.1正式版上线:最后一次支持Python2,进一步支持TPU...

机器之心报道参与:杜伟、一鸣TensorFlow2.1的更新,能够让弃坑的用户回心转意吗?去年 10 月,谷歌才发布了 TensorFlow 2.0 正式版。时隔三个月后,昨日官方发布了 TensorFlow 2.1,本次版本更新带了了多项新特…

snowflake做主键 自增_自增ID算法snowflake - C#版

急景流年,铜壶滴漏,时光缱绻如画,岁月如诗如歌。转载一篇博客来慰藉,易逝的韶华。使用UUID或者GUID产生的ID没有规则Snowflake算法是Twitter的工程师为实现递增而不重复的ID实现的概述分布式系统中,有一些需要使用全局…

hashmap containsvalue时间复杂度_不看看HashMap源码,怎么和面试官谈薪资

HashMap 是日常开发中,用的最多的集合类之一,也是面试中经常被问到的 Java 类之一。同时,HashMap 在实现方式上面又有十分典型的范例。不管是从哪一方面来看,学习 HashMap 都可以说是有利无害的。分析 HashMap 的源码的文章在网上…

html5的狭义概念,“资源”这一概念,可以有狭义和广义两种理解。狭义的资源是指...

【原文】“资源”这一概念,可以有狭义和广义两种理解。狭义的资源是指人类生产活动所需要的、在自然界存在的物质(材料)和动力的天然来源。广义的资源,则是指人类用来帮助从事一定活动、以达到一定目的的一切要素和有利条件的总和,简单地说&a…

tcp序列号为什么是随机的_译文:每个开发人员应了解的 TCP 知识

为什么要把服务器放在离用户很近的地理位置上?其中一个原因是为了实现更低的延迟。当您发送的数据是短的、应该尽可能快的传输数据时,这很有意义。但如果是大文件,比如视频等大文件呢?当然,在接收第一个字节时肯定会有…

matlab时域转换成频域_从时域到频域,你只需要旋转一下!

作为一个工科生,这里我不去说很多的严密的定理和知识,我只是从我的角度,形象的去理解时域和频域。首先我们来观察一个画在空间直角坐标系中的正弦函数:现在我们从两个视角去观察它分别是垂直于xoz面和垂直于yoz面看到的图像如下&a…

win7右键计算机管理参数错误,win7纯净版虚拟磁盘管理器参数错误怎么解决?

最近有用户反映win7纯净版虚拟磁盘管理器参数错误,他是硬盘分区太多,很乱,所以想要自己设置盘符名称,但没想到在修改盘符时出现提示“硬盘参数错误”,导致修改盘符失败,这让用户非常苦恼。那么,…

mysql查看用户名_Mysql创建数据表的方法介绍(附示例)

本篇文章给大家带来的内容是关于Mysql创建数据表的方法介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。数据表是数据库最重要的组成部分之一,是其他对象的基础。如果我们的数据库没有数据表就等于没有…

vue读取终端硬件信息_双通道RFID模块助力电力数据采集终端(不必多说,直接测试对比)...

推动超高频技术应用的RFID模块打包模组、全面简化设计极高的性价比,让更多领域用得起超高频RFIDM6002 是我司自主研发的一款高性能双通道嵌入式超高频RFID 读写模块,该模块主要是解决单通道读写模块的空间盲点问题,弥补单通道读写模块在应用中…

spring 查找实现类_69道Spring面试题和答案

什么是spring?Spring是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。使用Spring框架的好…

2018全国计算机音乐大赛一等奖,2018全国数字音乐大赛总决赛精彩无限!小学员的技能震惊评委!...

2018全国数字音乐大赛总决赛精彩无限!小学员的技能震惊评委!近日,为期四天的第三届罗兰艺术节暨全国青少年数字音乐大赛总决赛于北京隆重召开并圆满闭幕。期间丰富多彩的音乐竞技赛事与演艺现场,让所有参与大赛的学员与家长们赞叹…

python3.8爬虫_python爬虫系列(3.8-正则的使用)

一、需要系统的学习正则表达式1、元字符1..:除了\n以外的任意字符2.*:出现0到多次3.?:出现0或者1次4.:表示出现1到多次2、常用的方法1.compile:表示生成正则表达式参考地址2.findall:查找全部注意返回的是一个列表参考地址import reimport requestsclass GuShiWen(object):def…

erp开发和java开发区别_Java程序员求职必学:Spring boot学习指南!

黑马程序员上海中心学姐微信:CZBKSH关注咳咳,今天学姐就来和你们说说Spring对于Java程序员的重要性。首先,Spring 官网首页是这么介绍自己的——“Spring: the source for modern Java”,这也意味着 Spring 与 Java 有着密切的关系…

irobot擦地机器人故障_33款扫地机器人口碑:售价6350元的戴森口碑垫底,小米、科沃斯谁更好用?...

市面上的扫地机器人琳琅满目,消费者该怎么选呢?2020年6月,《消费者报道》汇总了京东、天猫、苏宁上热销的33款扫地机器人的评价情况,对约3.9万条消费者评价数据进行了分析和评分。评价品牌科沃斯、海尔、iRobot、小米、浦桑尼克、…

专业显卡打游戏测试软件,专业显卡能玩游戏吗?专业卡游戏实测

专业显卡能玩游戏吗?专业卡游戏实测2013年03月06日 00:12作者:汤炜炜编辑:汤炜炜分享泡泡网显卡频道3月6日 图形工作站专业显卡与消费级游戏显卡在硬件上是完全一样的,区别只在于规格微调、驱动不同、软件验证。我们也知道&#x…

python集合运算符_Python 集合、字典、运算符

先区分一下序列类型和散列类型: 序列类型:list、string、tuple,他们中的元素是有序的。 散列类型:set、dict,他们中的元素无序的。(注意:python3.7.0开始字典变成"有序"了&#xff09…