javascript中undefined与null的区别

来详细讲解一下 JavaScript 中 undefined 与 null 的区别。

概述

JavaScript 中的 undefined 和 null 都是表示值的不存在或无效。它们两者很相似,但又有所不同。下面我们来逐个解释。

undefined

undefined 代表某个变量未被定义,或者存在但没有被赋值。在以下三种情况中,变量的值将默认为 undefined:

  • 给未声明过的变量赋值时;
  • 函数没有显式地返回值时;
  • 对象中没有命名的属性。

下面是一些示例:

var x; // 声明但未被赋值
console.log(x); // undefined

function foo() {}
console.log(foo()); // undefined

var obj = { a: 1 };
console.log(obj.b); // undefined

null

undefined 不同,null 表示某个变量被定义了,但无值可用。在以下两种情况中,可以将变量值赋为 null:

  • 用于清空变量中的引用数据类型(如对象、数组)的值;
  • 等待服务器响应时,可以将变量值初始化为 null。

以下是一些示例:

var x = null; // 变量已被定义,但赋值为 null
console.log(x); // null

var obj = null;
obj = { a: 1 }; // 赋值为一个对象
console.log(obj); // { a: 1 }
obj = null; // 清空变量中的对象值
console.log(obj); // null

区别

总结一下,undefined:未定义、值为 undefined,通常是变量声明后未被赋值或者没有返回值;null:已定义但没有值可用,通常用于清空变量中的对象值或者变量初始化。

所以我们可以这样区分:未定义的变量其默认值为 undefined,已定义但未被赋值的变量也默认为 undefined;而 null 是一个已定义的空值。

示例:

var x;
console.log(x); // undefined

var y = null;
console.log(y); // null

示例

示例 1

下面的代码中,我们定义了一个对象,并且给它赋值为 null,之后再打印出来。但是这段代码会打印出 { a: null } 而不是 null

var obj = { a: null };
console.log(obj.a); // null
console.log(obj.b); // undefined

原因是虽然在上面将变量 obj 赋值为 null,意味着这个变量并没有值可以使用了,但是它实际上已经被定义了。因此,打印出 obj 将仍然会得到一个对象,只是这个对象的属性 a 值为 null。

示例 2

我们在调用函数时,如果未传递预期的参数,则函数中的那个参数被定义为 undefined,而不是 null。

function foo(a, b) {
  console.log(a); // undefined
  console.log(b); // null
}

foo(undefined, null);

在以上例子中,我们将 foo 函数的第一个参数设置为 undefined,第二个参数设置为 null,所以第一个参数的值为 undefined,第二个参数的值为 null。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javascript中undefined与null的区别 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Java实现的数字签名算法RSA完整示例

    针对“Java实现的数字签名算法RSA完整示例”,我提供以下攻略: 1. 什么是数字签名算法RSA RSA是一种基于大素数因子分解难题的公钥加密算法,也可以应用于数字签名,其原理是利用公钥对数据进行加密,利用私钥对数据进行解密或者签名。RSA算法广泛应用于数字签名和网上支付等安全领域。 2. Java中RSA的实现 Java中提供了JCE支持,其中包括了对R…

    Java 2023年5月18日
    00
  • HTML5拖拽文件到浏览器并实现文件上传下载功能代码

    下面是具体的步骤和示例代码: 1. HTML代码 首先,在HTML中创建一个用于拖放的区域,用<div>或其他HTML元素包裹住: <div id="drag-box"> <p>将文件拖到此区域</p> </div> 2. JavaScript代码 然后,通过JavaScript…

    Java 2023年6月15日
    00
  • SpringBoot默认使用HikariDataSource数据源方式

    Spring Boot 是一种在 Spring 框架基础上开发应用程序的快速,便捷的方式。在 Spring Boot 应用程序中,HikariDataSource 是默认的数据源,以提高应用程序的性能。 Spring Boot 框架中默认使用 HikariDataSource 数据源方式,这是因为 HikariCP 是一个高性能的数据库连接池,它具有以下优点…

    Java 2023年5月20日
    00
  • 关于Apache默认编码错误 导致网站乱码的解决方案

    关于Apache默认编码错误 导致网站乱码的解决方案 问题描述 当在Apache服务器上部署网站时,如果网页中含有非英文字符,有时会出现乱码的情况,这是因为Apache服务器默认使用ISO-8859-1编码,而网页可能是采用UTF-8等编码格式。 解决方案 出现这种情况时,可以通过修改Apache服务器的配置文件httpd.conf来解决乱码问题。 打开ht…

    Java 2023年5月20日
    00
  • 线上dubbo线程池耗尽CyclicBarrier线程屏障异常解决记录

    下面我来详细讲解“线上dubbo线程池耗尽CyclicBarrier线程屏障异常解决记录”的完整攻略。 问题背景 最近在自己开发的一个微服务中,使用了Dubbo框架(版本2.6.5),在线上运行时突然出现了一个严重的问题:dubbo线程池耗尽CyclicBarrier线程屏障异常。具体表现为调用Dubbo服务时,服务提供方无法及时响应请求,出现了较长时间的等…

    Java 2023年5月26日
    00
  • JAVA中数组插入与删除指定元素的实例代码

    下面是针对“JAVA中数组插入与删除指定元素的实例代码”的完整攻略: 一、JAVA数组插入指定元素 在JAVA中,数组的长度是固定的,所以如果需要在数组中插入元素,我们必须新建一个长度为原数组长度+1的新数组,并将原数组中的元素复制到新数组中,在新数组中插入指定元素。 以下是一个示例代码,用于将指定元素插入到数组的指定位置: public class Arr…

    Java 2023年5月26日
    00
  • Java入门教程–带包的类如何编译与运行

    Java是一门面向对象的高级编程语言,使用它编写的程序可以运行在不同的平台上,最重要的是Java是开源的。在Java入门教程中,带包的类在编译和运行时,需要注意以下几点: 包的概念 Java中的包是用来组织类和接口的,用于避免命名冲突,也方便管理和维护代码。在包中的类和接口使用前需要导入。 编写带包的Java类 在编写Java类时,需要在文件的头部加入包声明…

    Java 2023年5月26日
    00
  • Go Java算法之从英文中重建数字示例详解

    Go Java算法之从英文中重建数字示例详解 概述 本文将为大家详细讲解如何从一段英文中提取数字,并将其重建成原本的数字。本文的实现会使用到Java语言和正则表达式的相关知识,需要读者有一定的Java编程基础和正则表达式的基本理解。 实现过程 步骤一:字母替换 首先,我们需要将英文字符串中的所有与数字无关的字符都去除。这一过程中我们将采用Java的正则表达式…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部