JavaScript 的怪癖 2:两个「空值」:undefined 和 null
来源:互联网 发布:软件项目培训教材资料 编辑:程序博客网 时间:2024/05/16 15:50
原文: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;> fooundefined
同理,当缺失参数时 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 没有值}
性能方面,所有在这个章节中提到的这三个校检基本是相同的。 所以,最后用哪个取决于你的需求还有你的品味。 一些压缩工具甚至用!=
重写了最后一条校检。
- 「译」JavaScript 的怪癖 2:两个「空值」:undefined 和 null
- 「译」JavaScript 的怪癖 2:两个「空值」:undefined 和 null
- 「译」JavaScript 的怪癖 2:两个「空值」:undefined 和 null
- JavaScript 的怪癖 2:两个「空值」:undefined 和 null
- Javascript 对象值与null undefined和空字符串
- javascript中的null,空串和undefined
- javascript的null和undefined
- javaScript的null和undefined
- javascript 的null和undefined
- JavaScript值 null 和 undefined
- Javascript 中的false、0、null、undefined和空字符串对象
- Javascript 中的false、0、null、undefined和空字符串对象
- Javascript 中的false、0、null、undefined和空字符串对象
- Javascript 中的false、0、null、undefined和空字符串对象
- Javascript 中的false、0、null、undefined和空字符串对象
- Javascript 中的false、0、null、undefined和空字符串对象
- Javascript 中的false、0、null、undefined和空字符串对象
- Javascript 中的false、0、null、undefined和空字符串对象
- 关于OpenCV中图像的widthStep
- java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
- 对象作用域
- Linux export 命令与环境变量
- Scheme实现个税计算
- JavaScript 的怪癖 2:两个「空值」:undefined 和 null
- <Unity 3D工作笔记>关于不显示组件,无法保存到预设物的问题
- VC 目录不存在就创建
- 全排列的STL实现
- 等性运算符
- 《构建高性能web站点》笔记--基础架构篇
- VirtualBox 使用 NAT 方式网络的 SSH 连接
- linux内核空间和用户空间的区别及交互
- Graph