每天做一件自己害怕的事。——<埃莉诺·罗斯福>
1. null
值 null
特指对象的值未设置。它是 JavaScript
基本类型 之一,在布尔运算中被认为是false
。
1 | function getVowels(str) { |
值 null 是一个字面量,不像 undefined,它不是全局对象的一个属性。null 是表示缺少的标识,指示变量未指向任何对象。把 null 作为尚未创建的对象,也许更好理解。在 API 中,null 常在返回类型应是一个对象,但没有关联的值的地方使用。
1 | // foo 不存在,它从来没有被定义过或者是初始化过: |
null 与 undefined 的不同点:
当检测 null
或 undefined
时,注意相等(==)与全等(===)两个操作符的区别 ,前者会执行类型转换:
1 | typeof null // "object" (因为一些以前的原因而不是'null') |
2. undefined
全局属性undefined
表示原始值undefined
。它是一个JavaScript
的 原始数据类型 。
1 | function test(t) { |
undefined
是全局对象的一个属性。也就是说,它是全局作用域的一个变量。undefined
的最初值就是原始数据类型undefined。
在现代浏览器(JavaScript 1.8.5/Firefox 4+),自ECMAscript5标准以来undefined是一个不能被配置(non-configurable),不能被重写(non-writable)的属性。即便事实并非如此,也要避免去重写它。
一个没有被赋值的变量的类型是undefined
。如果方法或者是语句中操作的变量没有被赋值,则会返回undefined
(对于这句话持疑惑态度,请查看英文原文来理解)。
1 | function test(a){ |
一个函数如果没有使用return语句指定返回值,就会返回一个undefined值。
但是它有可能在非全局作用域中被当作标识符(变量名)来使用(因为undefined不是一个保留字)),这样做是一个非常坏的主意,因为这样会使你的代码难以去维护和排错。
// 不要这样做!
// 打印 ‘foo string’ PS:说明undefined的值和类型都已经改变
(function() {
var undefined = ‘foo’;
console.log(undefined, typeof undefined)
})()
// 打印 ‘foo string’ PS:说明undefined的值和类型都已经改变
(function(undefined) {
console.log(undefined, typeof undefined)
})(‘foo’)
严格相等和undefined
1 | 你可以使用undefined和严格相等或不相等操作符来决定一个变量是否拥有值。在下面的代码中,变量x是未定义的,if 语句的求值结果将是true |
注意:这里是必须使用严格相等操作符(===)而不是标准相等操作符(==),因为 x == undefined 会检查x是不是null,但是严格相等不会检查(有点饶人,其实 === 会严格判断双方的类型、值等是否相等)。null不等同于undefined。移步比较操作符查看详情。
Typeof 操作符和undefined
1 | 或者,可以使用typeof: |
Void操作符和undefined
1 | void 操作符是第三种可以替代的方法。 |
undefined
表示尚未声明或已声明但尚未分配值的变量null
是一个赋值,表示“无价值”Javascript
设置未分配的变量,其默认值为undefined
Javascript
从不将值设置为null
。程序员使用它来表示avar
没有值。undefined
无效的JSON
而null
为undefined
typeof
是undefined
null
typeof
是一个object
。为什么?- 都是原语
- 两者都是虚假的 (Boolean(undefined) // false,Boolean(null) // false)
-您可以知道变量是否未定义
1 | typeof variable === "undefined" |
您可以检查变量是否为空
1 | variable === null |
在平等的经营者认为他们平等的,但身份不
1 | null == undefined // true |
参考
- https://www.jstips.co/en/javascript/writing-a-single-method-for-arrays-and-a-single-element/
- MDN - https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/undefined#%E4%B8%A5%E6%A0%BC%E7%9B%B8%E7%AD%89%E5%92%8Cundefined
- MDN - https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/null
关注【公众号】,了解更多。
赞赏一下 坚持原创技术分享,您的支持将鼓励我继续创作!