原文: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 没有值 }
性能方面,所有在这个章节中提到的这三个校检基本是相同的。 所以,最后用哪个取决于你的需求还有你的品味。 一些压缩工具甚至用!= 重写了最后一条校检。
相关推荐
asp.net中对数据库表插入null空值的问题
MySQL有一个特殊的等于运算符“”,当两个表达式彼此相等或都等于空值时,它的值为TRUE,其中有一个空值或都是非空值但不相等,这个条件就是FALSE。 【例】 查询Sell表中还未收货的订单情况。 SELECT * FROM Sell ...
JavaScript还有第二个值来表示值的空缺,就是undefined啦,用未定义的值表示更深层次的“空值”。undefined出现有4种情况:①变量声明但没有初始化时②要查询的对象属性或数组的元素不存在时③如果函数没有任何...
其实标题里面我已经列出了JavaScript中所有的”空值”和”假值”,除了boolean值本身就是true和false这两种情况外,其它数据类型的”空值”主要是undefined和defined这两大类。这些空值的类型分别是: 代码如下: ...
有两个包: null和它的子包zero 。 null类型仅在输入为null时被视为null,并且JSON编码为null 。 如果需要将零和null视为单独的值,请使用这些值。 zero类型将被视为Go中的零值:空白字符串输入将产生null零zero....
空字符(”)和空值(null)表面上看都是空,其实存在一些差异: 定义: 空值(NULL)的长度是NULL,不确定占用了多少存储空间,但是占用存储空间的 空字符串(”)的长度是0,是不占用空间的 通俗的讲: 空字符串...
:》一般来说MySQL会自动为你添加默认值的, 比如 为一个 NOT NULL 的 整型 赋 NULL 值, 结果是 0 CHAR 型 -> ”空值 DATATIME ->’0000-00-00 00:00:00′ 等等 Top 2 楼UNICORN_B
相信很多用了MySQL很久的人,对这两个字段属性的概念还不是很清楚,一般会有以下疑问: 我字段类型是not null,为什么我可以插入空值 为毛not null的效率比null高 判断字段不为空的时候,到底要 select * from ...
nulled-out在具有nulled-out值的对象上创建一个副本。 安装 $ npm install nulled-out 例子 var nulled = require ( 'nulled-out' ) nulled ( { name : { type : 'string' } , human : { type : 'boolean' } , ...
JavaScript程序设计 数值型 2.4.1 数值型 1、数据类型简介 在计算机中,不同的数据所需占用的存储空间是不同的,为了便于把数据分成所需内存大小不同的数据,充分利用存储空间,于是定义了不同的数据类型。 2.4.1 ...
此时的name即为Undefined Null:空值,一般将Undefined型和Null型等同对待 Function:函数,可以通过new操作符和构造函数Function()来动态创建所需要功能的函数,并为其添加函数体.如: var myFunction = new Function() {
HashMap和Hashtable的区别。 HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。 HashMap...
在Javascript中有两个值用来代表类似空值的概念,undefined和null,这两个很容易被混淆,他们表示的是两个不同的概念。
oraclesql判断值为空-Oracle-sqlserver的空值(null)判断.pdf
JavaScript 是世界上最流行的编程语言...javaScript中有五种空值和假值,分别为false,null,undefined,“”,0。从广义上来说,这五个值都是对应数据类型的无效值或空值。 这五个值的共同点是在执行if语句时都会执行
JavaScript的性能问题不容小觑,这就需要我们开发人员在编写JavaScript程序时多注意一些细节,本文非常详细的介绍了一下JavaScript性能优化方面的知识点,绝对是干货。...空值:null 引用类型object function
我刚刚开始学习JavaScript时,大约是八年前,当时我对于undefined 和 null 比较困惑 ,因为他们都表示空值。 他们有什么明确的区别吗?他们似乎都可以定义一个空值,而且 当你进行 在做null ===undefined 的比较时...
PostgreSQL 10 基础课程第五章 高级知识Null空值详解
你是否也为在Oracle里如何实现NULL的比较而犯愁呢?