全面解析JavaScript中null

本篇文章给大家带来了关于javascript的相关知识,null是一种原始类型,表示有意不包含任何对象值,下面就来看一下 javascript 中的 null 的一切: 它的含义,如何检测它,null 和 undefined 之间的区别,以及为什么大量使用 null 会造成代码维护困难等,希望对大家有帮助。

全面解析JavaScript中null

【相关推荐:javascript视频教程、web前端】

JavaScript 有两种类型:原始类型(strings, booleans, numbers, symbols)和对象

对象是一个复杂的数据结构。最简单的 JavaScript 对象是普通对象 —— 键和相关值的集合

立即学习“Java免费学习笔记(深入)”;

let myObject = {  name: 'Eric Cartman'};

登录后复制

但是很多情况下不能创建一个对象。在这种情况下,JavaScript 提供了一个特殊的值 null —— 表示缺少对象

let myObject = null;

登录后复制

在这篇文章中,你将学习关于 JavaScript 中的 null 的一切: 它的含义,如何检测它,null 和 undefined 之间的区别,以及为什么大量使用 null 会造成代码维护困难等

1.null 的概念

JavaScript 规范中这么描述 null

null 是一种原始类型,表示有意不包含任何对象值

如果您看到 null(分配给变量或由函数返回),那么在那个位置原本应该是一个对象,但由于某种原因,一个对象没有创建

比如,函数 greetObject() 创建对象,但也可以在无法创建对象时返回 null:

function greetObject(who) {  if (!who) {    return null;  }  return { message: `Hello, ${who}!` };}greetObject('Eric'); // => { message: 'Hello, Eric!' }greetObject();       // => null

登录后复制

当上面的函数中传入一个字符串参数时,如预期的,函数返回一个对象 { message: ‘Hello, Eric!’ }

但是,函数中不传任何参数时,该函数返回 null。返回 null 是合理的,因为 who 参数没有值,导致 greeting 对象无法创建

1.1 null 的一个比较贴切的比喻

考虑关于 null 的一个比较贴切的比喻,你可以把变量想象成一个盒子。就像变量可以容纳对象一样,盒子也可以容纳像茶壶等的物品

但一旦你收到一个盒子,打开它,什么也没有!有人弄错了,给了你一个空盒子。该盒子不包含任何内容,或者换句话说,它包含一个 null 值

2. 如何去检测 null

检查 null 好方法是使用严格相等运算符

const missingObject = null;const existingObject = { message: 'Hello!' };missingObject  === null; // => trueexistingObject === null; // => false

登录后复制

missingObject === null 的结果为 true,因为 missingObject 变量包含一个 null 值。如果变量包含非空值,比如对象,则表达式 existingObject === null 的结果为 false

2.1 null 是一个假值

null 与 false、0、”、undefined、NaN 都是假值。如果在条件语句中遇到它们,那么 JavaScript 将把它们强制为 false

Boolean(null); // => falseif (null) {  console.log('null is truthy');} else {  console.log('null is falsy'); // logs 'null is falsy'}

登录后复制

2.2 typeof null

typeof value 类型操作符可以确定值的类型。例如,类型为 15 的是 number,typeof { prop: ‘Value’ } 等于 object。

有趣的是,null 值类型的结果是什么

typeof null; // => ‘object’

一个缺失的对象类型怎么被判断为 object? 原来 typoef null 作为 object 是早期 JavaScript 实现中的一个错误

不要使用 typeof 操作符检测 null 值。如前所述,使用严格的相等运算符 myVar === null

如果你想使用 typeof 去检查一个变量是否是一个对象,你必须排除掉 null 的情况

function isObject(object) {  return typeof object === 'object' && object !== null;}isObject({ prop: 'Value' }); // => trueisObject(15);                // => falseisObject(null);              // => false

登录后复制

3. null 的陷阱

null 通常会在你希望使用对象的情况下意外出现。然后,如果尝试从 null 中提取属性,JavaScript 会抛出一个错误

让我们再次使用 greetObject() 函数并尝试从返回的对象中访问 message 属性

let who = '';greetObject(who).message; // throws "TypeError: greetObject() is null"

登录后复制

因为 who 变量是一个空字符串,所以函数返回 null。当从 null 访问 message 属性时,将抛出类型错误错误

你可以通过使用 可选链操作符 来处理 null

let who = '';greetObject(who)?.message ?? 'Hello, Stranger!';  // => 'Hello, Stranger!'

登录后复制

或者使用下一节中描述的两种选择。

4. null 的替代方案

当你不能构造一个对象时,很容易返回 null。但这种做法也有缺点

一旦 null 出现在执行堆栈中,你总是必须检查它

我们尽量避免返回 null:

返回默认对象而不是 null抛出错误而不是返回 null

让我们回忆一下 greetObject() 函数返回 greeting 对象

当缺少参数时,可以返回一个默认对象,而不是返回 null

function greetObject(who) {  if (!who) {    who = 'Stranger';  }  return { message: `Hello, ${who}!` };}greetObject('Eric'); // => { message: 'Hello, Eric!' }greetObject();       // => { message: 'Hello, Stranger!' }

登录后复制

或者抛出一个错误

function greetObject(who) {  if (!who) {    throw new Error('"who" argument is missing');  }  return { message: `Hello, ${who}!` };}greetObject('Eric'); // => { message: 'Hello, Eric!' }greetObject();       // => throws an error

登录后复制

这些实践可以让你完全避免处理 null

5. null vs undefined

undefined 就是未初始化的变量或对象属性的值

例如,如果在声明变量时没有赋初值,那么访问该变量的结果为 undefined

let myVariable;myVariable; // => undefined

登录后复制

null 和 undefined 之间的主要区别是,null 表示丢失了的对象,而 undefined 表示未初始化的状态

严格相等运算符 === 区分 null 和 undefined

null === undefined; // => false

登录后复制

而松散相等运算符 == 则认为 null 和 undefined 相等

null == undefined; // => true

登录后复制

我使用松散相等运算符检查变量是否为 null 或 undefined

function isEmpty(value) {  return value == null;}isEmpty(42);                // => falseisEmpty({ prop: 'Value' }); // => falseisEmpty(null);              // => trueisEmpty(undefined);         // => true

登录后复制

6. 总结

null 是 JavaScript 中的一个特殊值,表示丢失的对象

严格相等运算符判断变量是否为空: variable === null。

typoef 操作符用于确定变量的类型(number, string, boolean)。但是,typeof 在 null 情况下会引起误解: typeof null 结果为 object

null 和 undefined 在某种程度上是等价的,但null 表示一个丢失的对象,而 undefined 表示未初始化状态

尽可能避免返回 null 或将变量设置为 null。因为这种做法会导致 null 值的扩展和需要对 null 的验证。相反,尝试使用具有默认属性的对象,或者甚至抛出错误会是更好的实践

你会使用什么方法来检查 null?

【相关推荐:javascript视频教程、web前端】

以上就是全面解析JavaScript中null的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2698433.html

(0)
上一篇 2025年3月7日 18:49:56
下一篇 2025年3月7日 11:18:53

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 简单了解JavaScript变量or循环中的var和let

    本篇文章给大家带来了关于javascript的相关知识,其中主要介绍了javascript变量or循环中的var和let详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,下面一起来看一下,希望对大家有帮助。 【相关推荐:javasc…

    2025年3月7日
    200
  • 分享12道面试题,看你懂不懂JavaScript!

    你到底懂不懂javascript?下面本篇文章给大家整理分享12道javascript面试题,来做做这12道面试题试试,看看能不能全部答对! JavaScript 是每一个前端开发者都应该掌握的基础技术,但是很多时候,你可能并不完全懂 Ja…

    2025年3月7日
    200
  • JavaScript如何改变this指向?三种方法浅析

    javascript如何改变this指向?下面本篇文章给大家介绍一下js改变this指向的三种方法,希望对大家有所帮助! 一、this指向 点击打开视频讲解更加详细 this随处可见,一般谁调用,this就指向谁。this在不同环境下,不同…

    2025年3月7日
    200
  • 一文带你熟练使用最常用的ES6

    本篇文章带大家聊聊es6,带你30分钟熟练使用最常用的es6,还不学是等着被卷死? 一. 关于ES6 了解一门技术或者语言,最好的方法就是知道它能做些什么  ES6 , 它是由 ECMA 国际标准化组织,制定的一项脚本语言的标准化规范 那么…

    2025年3月7日
    200
  • javascript怎么求素数

    求素数的方法:1、遍历1~n区间中的所有自然数给n来除,若余数为0则表示该数n不是素数,否则就是素数,语法“for(i=2;i 本教程操作环境:windows7系统、javascript1.8.5版、Dell G3电脑。 素数的概念 素数又…

    2025年3月7日 编程技术
    200
  • JavaScript五个常用功能示例(总结分享)

    本篇文章给大家带来了关于javascript的相关知识,其中主要介绍了五个常用功能及其示例,包括了计时器、流程控制、闭包应用、arguments剩余参数以及二次封装函数的相关问题,下面一起来看一下,希望对大家有帮助。 【相关推荐:javas…

    2025年3月7日
    200
  • JavaScript怎么拿捏箭头函数

    本篇文章给大家带来了关于javascript视频教程的相关知识,其中主要介绍了关于箭头函数的相关问题,包括了语法规则、简写规则、常见应用等等内容,下面一起来看一下,希望对大家有帮助。 【相关推荐:JavaScript视频教程、web前端】 …

    2025年3月7日
    200
  • JavaScript中Number类型常见误区背后原理及解决办法

    本篇文章给大家带来了关于javascript的相关知识,其中主要介绍了关于number类型的相关知识,包括了number类型的常见误区背后原理以及解决方法等内容,下面一起来看一下,希望对大家有帮助。 【相关推荐:JavaScript视频教程…

    2025年3月7日 编程技术
    200
  • 通过示例探索 9 个常用的 javascript 函数

    函数是 JavaScript 最重要的方面之一。如果没有 JavaScript 函数,它将非常有限。javascript 中的函数用于执行特定的操作或任务。 它们可以写入代码中,也可以使用 Function 构造函数创建。函数可以定义在其他…

    2025年3月7日
    200
  • JavaScript万字面试总结

    本篇文章给大家带来了关于javascript的相关知识,其中主要介绍了一些面试常见的问题总结,下面一起来看一下,希望对大家有帮助。 【相关推荐:JavaScript视频教程、web前端】 一、JS基础 1.1 Js有哪些数据类型 JavaS…

    2025年3月7日 编程技术
    200

发表回复

登录后才能评论