写点什么

再说 JavaScript 的 null 和 undefined

用户头像
devpoint
关注
发布于: 刚刚
再说JavaScript 的 null 和 undefined

在 JavaScript 中关于空值的定义会应项目的不同而不同,通常在与后台接口对接的时候,判断数据是否存在需要判断空字符串 ""nullundefined。本文带大家再复习一下 nullundefined


通常 nullundefined 是表示无值情况的判断条件。但如果使用相等操作符 == 来比较它们,将返回 true。但是 null 通常被用来显式地不给变量赋值,而 undefined 被 JavaScript 引擎本身隐式地使用来不给变量赋值。这两种基本数据类型用于完成类似的需求,但在严格类型上并不相同,使用 typeof 函数来获取其类型,null 返回 object ,而 undefined 返回 undefined ,由此可以清楚的知道使用 === 就会返回 false


console.log(undefined == null); // trueconsole.log(undefined === null); // falseconsole.log(typeof null); // objectconsole.log(typeof undefined); // undefined
复制代码

空值判断

正如上面说的,判断空值,在不同的项目下有不同的解释,下面的代码片段可以判断所有类型的空值。


const isEmpty = (x) => {    if (Array.isArray(x) || typeof x === "string" || x instanceof String) {        return x.length === 0;    }
if (x instanceof Map || x instanceof Set) { return x.size === 0; }
if ({}.toString.call(x) === "[object Object]") { return Object.keys(x).length === 0; } if (!isNaN(parseFloat(x)) && isFinite(x)) { return false; } return !x;};console.log(isEmpty(null)); // trueconsole.log(isEmpty(undefined)); // trueconsole.log(isEmpty([])); // trueconsole.log(isEmpty({})); // trueconsole.log(isEmpty("")); // trueconsole.log(isEmpty(new Set())); // trueconsole.log(isEmpty(0));
复制代码

为什么 null 是 object?

表面上看 null 是一个 object ,如果说 null 就是一个 object 是不正确的。事实上,null 是 JavaScript 中的一个基本类型。


这实际上是语言中的一个错误,不幸的是不能那么容易地修复,因为它会破坏现有的代码库。然而,实际上有一个逻辑上的解释,为什么 null 是 JavaScript 中的一个 object


在 JavaScript 的初始版本中,值以 32 位单位存储。前 3 位表示数据类型标签,后 3 位表示值。


对于所有object,类型标记位是 000null 从最初的版本开始就被认为是 JavaScrip 中的一个特殊值,null 表示空指针。然而,JavaScript 中没有像 C 语言那样的指针,所以 null 仅仅意味着什么都没有或无效,由所有的 0 表示。因此它的 32 位都是0。就这样每当 JavaScrip 解释器读取 null 时,它就认为前 3 位是object 类型。

发布于: 刚刚阅读数: 2
用户头像

devpoint

关注

细节的追求者 2011.11.12 加入

专注前端开发,用技术创造价值!

评论

发布
暂无评论
再说JavaScript 的 null 和 undefined