当讨论JavaScript中的原始数据类型时,大多数人都知道的基本知识,从String,Number到Boolean。这些原始类型相当简单,行为符合常识。但是,本文将更多聚焦独特的原始数据类型Null和Undefined,是什么让他们如此相似,却又似是而非。
理解Null和Undefined
在JavaScript中,null是字面量同时也是语言中的关键字,用来表示无法识别的对象值。换句话说,这用来表示“无值(no value)”。虽然相似,undefined实际上代表了不存在的值(non-existence of a value)。都是完全不可变的,没有属性和方法,也不能给其属性赋值。事实上,试图访问或定义一个属性将会引发一个类型错误(TypeError)。正如他们的名字暗示的那样,他们是完全无效的值。
没有值代表的布尔值是false,这意味着他们在条件上下文中会被被计算为false,如if语句。使用相等操作符(= =)比较这两个值和其他false值,他们并不等于除了自己:
null == 0; // false undefined == ""; // false null == false; // false undefined == false; // false null == undefined; // true
尽管如此,和其他相似之处,但null和undefined并不是等价的。每个作为其独特的类型的唯一成员,undefined是Undefined类型和null是Null类型。使用全等操作符(===)比较这两个值,这要求类型和值都相等,下面证明这一点:
undefined === null; // false
产生Undefined
var foo; // 默认值为 undefined
当试图访问一个不存在的对象属性或数组项时,返回一个undefined值:
var array = [1, 2, 3]; var foo = array.foo; // foo 属性不存在, 返回 undefined var item = array[5]; // 数组中没有索引为5的项,返回 undefined
如果省略了函数的返回语句,返回undefined:
var value = (function(){})(); // 返回 undefined
函数调用时未提供的值结果将为undefined参数值:
(function(undefined){ // 参数是 undefined })();
void操作符也可以返回一个undefined值。像Underscore的库使用它作为一个防御式的类型检查,因为它是不可变的,可以在任何上下文依赖返回undefined:
function isUndefined(obj){ return obj === void 0; }
最后,undefined是一个预定义的全局变量(不像null关键字)初始化为undefined值:
'undefined' in window; // true
ECMAScript 5中,这个变量是只读的,以前并非如此。
Null的用例
在api中,null是经常检索对象的地方可以预期,但没有相关的对象。
深入挖掘
Object.prototype.toString.call(null); // [object Null] Object.prototype.toString.call(undefined); // [object Undefined]
然而,Object.prototype.toString方法实际上并不是检索null的内部[[Class]]属性或undefined的公开构造函数。根据文档,以下步骤发生在被调用过程中:
- 如果值是undefined,返回“
[object Undefined]
”。 - 如果这个值为null,则返回“[object Null]”。
- 让O作为调用ToObject同时传递this值作为参数的结果值。
- 让class是O的内部属性
[[Class]]
的值。 - 返回的结果连接三个字符串“[object ”,class,和“]”的结果的字符串值。
该方法执行一个简单的字符串返回值,如果它检测到null或undefined和其他对象统一的功能。在整个规范中这是很常见的,因为当遇到null和undefined值时大多数方法包含一个简单的捕捉并返回。事实上,没有迹象表明他们包含与任何原生对象相关联的内部属性。就好像他们不是对象。我很想知道如果一个JavaScript的原生环境内部实际存在的显式方案会怎样?也许有人更熟悉一个可以参与的实现。
结论
无论这些原生对象多么不寻常,理解null和undefined之间的差异,和他们在JavaScript的语言基础中截然不同的角色。它可能不能使你的应用程序有所突破,但是一般来说,它仅被证明在开发和调试中长期有益。
译者注
本文问翻译文章,原文为“Exploring the Abyss of Null and Undefined in JavaScript”
本文较难以理解,可参照原文便于理解。
相关推荐
在JavaScript编程语言中,Null和Undefined是两种不同的原始值,它们在特定场景下有特定的含义,有时也会引起初学者的困惑。理解这两者之间的差异是编写健壮JavaScript代码的关键。 首先,Undefined类型是一个特殊的...
在JavaScript编程中,undefined和null是两种特殊的值,它们在处理变量和对象时扮演着重要的角色。尽管它们都表示“没有值”的概念,但它们之间存在着一些关键的区别。本文将深入探讨undefined和null的含义、用途以及...
在 JavaScript 中,undefined、null、NaN 是三个经常被混淆的概念,但它们有着不同的含义和用途。今天,我们将深入探讨这三个概念的区别和应用。 undefined 在 JavaScript 中,undefined 是一个基本数据类型,表示...
在JavaScript编程语言中,`null` 和 `undefined` 是两个重要的概念,它们都用来表示某种“不存在”或“没有”的状态,但它们之间存在着微妙的差异。了解这些差异对于编写健壮的JavaScript代码至关重要。 首先,`...
一时间不好回答,特别是... null 是 JavaScript 保留关键字。 null 参与数值运算时其值会自动转换为 0 ,因此,下列表达式计算后会得到正确的数值: 表达式:123 + null 结果值:123 表达式:123 * null 结果
在JavaScript编程语言中,null和undefined是两个基本的数据类型,它们分别代表了不同的概念和用途。虽然有时它们在某些情况下看起来相似,但它们具有本质上的区别。 首先,我们需要了解JavaScript是一种弱类型(或...
1.javascript中定义而未赋...//output undefined==testundefined } 2.javascript中null和undefined是相等的。 代码如下: var testNull=null; var testundefined; if(testNull==testundefined){ alert(“undefined==test
本文将详细介绍javascript中的undefined和null 历史原因 1995年JavaScript诞生时,最初像Java一样,只设置了null作为表示”无”的值。根据C语言的传统,null被设计成可以自动转为0 但是,JavaScript的设计者...
在JavaScript编程语言中,null和undefined是两个基本且重要的数据类型,它们通常用来表示无值或者缺值的状态。但是在很多情况下,新手开发者和一些经验丰富的开发者都会对这两个值之间的区别感到困惑。本文将深入...
JavaScript 类型系统中的 `undefined` 和 `null` 是两种特殊的原始值,它们分别代表不同的概念。在 JavaScript 中,每个变量都有一个类型,当变量未初始化或引用的对象不存在时,就会出现 `undefined` 或 `null`。 ...
在JavaScript编程中,有时我们需要处理复杂的数据结构,例如对象和数组,确保它们不包含无效的值,如`null`、`undefined`、空对象或空数组。这些无效值可能会导致错误或不必要的处理开销。本篇文章将深入探讨如何在...
但是,本文将更多聚焦独特的原始数据类型Null和Undefined,是什么让他们如此相似,却又似是而非。 一、理解Null和Undefined 在JavaScript中,null是字面量同时也是语言中的关键字,用来表示无法识别的对象值。...
在JavaScript(JS)编程中,`undefined` 和 `null` 是两种不同的特殊值,它们各自表示不同的含义。理解和正确地判断这两个值对于编写健壮的JavaScript代码至关重要。在这篇文章中,我们将深入探讨如何在JavaScript中...
之前软件开发网发不过类似的文章JavaScript null和undefined区别分析JavaScript Undefined,Null类型和NaN值区别先说说undefined: Javascript中的变量是弱类型的(关于这个我想就不用我多解释啦), 所以声明变量的...
在JavaScript编程语言中,了解和正确使用数据类型是非常重要的,特别是`typeof`操作符、`null`和`undefined`这三个概念。它们在处理变量和数据时起着关键作用。 `typeof`操作符: `typeof`是JavaScript中的一个一元...
- `null` 是一个明确的值,表示“无”或“空”,它不是对象,但在 JavaScript 中 `typeof null` 返回 "object",这是历史遗留问题。 - `NaN`(Not-a-Number)是 number 类型的一个特殊值,表示非数字。它用来表示...
undefined <br />")}\</script></body>在JavaScript中,`undefined`和`null`是两个特殊的值,它们在很多情况下都用来表示空或者不存在的值,但两者有着本质的区别。 1. `undefined`:当试图访问一个未声明的...
在JavaScript编程语言中,`undefined`和`null`是两种不同的数据类型,它们虽然在某些情况下可能被视为等价,但有着本质的区别。了解这两者的差异对于编写健壮的JavaScript代码至关重要。 首先,`undefined`是一种...
在JavaScript编程语言中,`undefined` 和 `null` 是两种特殊的数据类型,它们都表示“没有值”,但具有不同的含义和使用场景。了解这两者的差异对于编写健壮的JavaScript代码至关重要。 首先,让我们来明确两者的...
JavaScript 类型系统中,`undefined` 和 `null` 是两种重要的原始值,它们各自具有特定的含义和用途。本文将深入探讨这两种类型的起源、差异、使用场景以及类型转换。 首先,`undefined` 在 JavaScript 中主要表示...