`
jaychang
  • 浏览: 716640 次
  • 性别: Icon_minigender_1
  • 来自: 嘉兴
社区版块
存档分类
最新评论

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

 
阅读更多
 

原文: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空值的问题

    asp.net中对数据库表插入null空值的问题

    MySQL数据库:空值比较.pptx

    MySQL有一个特殊的等于运算符“”,当两个表达式彼此相等或都等于空值时,它的值为TRUE,其中有一个空值或都是非空值但不相等,这个条件就是FALSE。 【例】 查询Sell表中还未收货的订单情况。 SELECT * FROM Sell ...

    浅谈JavaScript中null和undefined

     JavaScript还有第二个值来表示值的空缺,就是undefined啦,用未定义的值表示更深层次的“空值”。undefined出现有4种情况:①变量声明但没有初始化时②要查询的对象属性或数组的元素不存在时③如果函数没有任何...

    区分JS中的undefined,null,,0和false

    其实标题里面我已经列出了JavaScript中所有的”空值”和”假值”,除了boolean值本身就是true和false这两种情况外,其它数据类型的”空值”主要是undefined和defined这两大类。这些空值的类型分别是: 代码如下: ...

    null:可空值的合理处理

    有两个包: null和它的子包zero 。 null类型仅在输入为null时被视为null,并且JSON编码为null 。 如果需要将零和null视为单独的值,请使用这些值。 zero类型将被视为Go中的零值:空白字符串输入将产生null零zero....

    区分MySQL中的空值(null)和空字符()

    空字符(”)和空值(null)表面上看都是空,其实存在一些差异: 定义: 空值(NULL)的长度是NULL,不确定占用了多少存储空间,但是占用存储空间的 空字符串(”)的长度是0,是不占用空间的 通俗的讲: 空字符串...

    NOT NULL 和NULL

    :》一般来说MySQL会自动为你添加默认值的, 比如 为一个 NOT NULL 的 整型 赋 NULL 值, 结果是 0 CHAR 型 -> ”空值 DATATIME ->’0000-00-00 00:00:00′ 等等 Top 2 楼UNICORN_B

    MySQL null与not null和null与空值的区别详解

    相信很多用了MySQL很久的人,对这两个字段属性的概念还不是很清楚,一般会有以下疑问: 我字段类型是not null,为什么我可以插入空值 为毛not null的效率比null高 判断字段不为空的时候,到底要 select * from ...

    nulled-out:在具有空值的对象上创建副本

    nulled-out在具有nulled-out值的对象上创建一个副本。 安装 $ npm install nulled-out 例子 var nulled = require ( 'nulled-out' ) nulled ( { name : { type : 'string' } , human : { type : 'boolean' } , ...

    JavaScript程序设计课件:数值型.pptx

    JavaScript程序设计 数值型 2.4.1 数值型 1、数据类型简介 在计算机中,不同的数据所需占用的存储空间是不同的,为了便于把数据分成所需内存大小不同的数据,充分利用存储空间,于是定义了不同的数据类型。 2.4.1 ...

    初学JavaScript第一章第1/2页

    此时的name即为Undefined Null:空值,一般将Undefined型和Null型等同对待 Function:函数,可以通过new操作符和构造函数Function()来动态创建所需要功能的函数,并为其添加函数体.如: var myFunction = new Function() {

    java程序员面试题

    HashMap和Hashtable的区别。 HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。 HashMap...

    javascript中的undefined 与 null 的区别 补充篇

    在Javascript中有两个值用来代表类似空值的概念,undefined和null,这两个很容易被混淆,他们表示的是两个不同的概念。

    oraclesql判断值为空-Oracle-sqlserver的空值(null)判断.pdf

    oraclesql判断值为空-Oracle-sqlserver的空值(null)判断.pdf

    javaScript中的空值和假值

    JavaScript 是世界上最流行的编程语言...javaScript中有五种空值和假值,分别为false,null,undefined,“”,0。从广义上来说,这五个值都是对应数据类型的无效值或空值。 这五个值的共同点是在执行if语句时都会执行

    JavaScript知识点总结之如何提高性能

    JavaScript的性能问题不容小觑,这就需要我们开发人员在编写JavaScript程序时多注意一些细节,本文非常详细的介绍了一下JavaScript性能优化方面的知识点,绝对是干货。...空值:null 引用类型object function

    处理JavaScript值为undefined的7个小技巧

    我刚刚开始学习JavaScript时,大约是八年前,当时我对于undefined 和 null 比较困惑 ,因为他们都表示空值。   他们有什么明确的区别吗?他们似乎都可以定义一个空值,而且 当你进行 在做null ===undefined 的比较时...

    PostgreSQL 10 基础课程第五章 高级知识Null空值详解

    PostgreSQL 10 基础课程第五章 高级知识Null空值详解

    Oracle NULL值的比较函数(是NULL=NULL为真的函数)

    你是否也为在Oracle里如何实现NULL的比较而犯愁呢?

Global site tag (gtag.js) - Google Analytics