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日

相关文章

  • Spring MVC 关于controller的字符编码问题

    首先,要解决Spring MVC中Controller的字符编码问题,可以通过配置字符编码过滤器来实现。具体操作如下: 在web.xml中添加字符编码过滤器 在web.xml文件中,添加以下代码配置字符编码过滤器,将所有请求的字符编码设置为UTF-8: <filter> <filter-name>encodingFilter</…

    Java 2023年5月20日
    00
  • Java面向对象之抽象类,接口的那些事

    Java面向对象之抽象类与接口 什么是抽象类? 抽象类是一种特殊的类,它不能被实例化,只能被继承。 定义抽象类 抽象类的定义方式为,在class前加上abstract关键字。 下面是一个定义抽象类的示例代码: abstract class Animal { public abstract void move(); } 其中,Animal是一个抽象类,而mov…

    Java 2023年5月26日
    00
  • java生成随机数(字符串)示例分享

    下面是详细的完整攻略: 标题:Java生成随机数(字符串)示例分享 1. 生成随机整数 Java生成随机整数可以通过使用Java中的random类实现。以下是一个示例代码,生成一个1-100之间的随机整数: import java.util.Random; public class GenerateRandomNumber { public static v…

    Java 2023年5月27日
    00
  • Maven pom.xml 添加本地jar包依赖以及打包方法

    下面是Maven pom.xml添加本地jar包依赖以及打包方法的完整攻略。 1. 添加本地Jar包依赖 1.1 使用systemPath属性添加本地Jar包 在Maven pom.xml文件的dependencies节点下添加如下代码: <dependency> <groupId>local</groupId> <…

    Java 2023年5月19日
    00
  • 如何使用intellij IDEA搭建Spring Boot项目

    使用IntelliJ IDEA搭建Spring Boot项目的完整攻略如下: 安装IntelliJ IDEA 首先,我们需要安装IntelliJ IDEA。可以从官方网站下载并安装最新版本的IntelliJ IDEA。 创建Spring Boot项目 在IntelliJ IDEA中,我们可以使用Spring Initializr来创建Spring Boot项…

    Java 2023年5月15日
    00
  • mybatis代码生成+自定义注解+自定义注释实例

    Mybatis代码生成器 Mybatis Generator是Mybatis提供的一个代码生成器,可以通过数据库中的表结构自动生成对应的Java、Mapper和XML文件。自动生成的代码基于Mybatis的最佳实践,可以大大减轻Java开发者的工作量,并且保证代码的规范性和正确性。 安装Mybatis Generator Mybatis Generator是…

    Java 2023年5月26日
    00
  • 最常用的1000个Java类(附代码示例)

    最常用的1000个Java类(附代码示例)攻略 一、简介 最常用的1000个Java类(附代码示例)是一份收集了Java程序员常用的1000个类以及它们的代码示例的列表。该列表涵盖了许多方面,例如:IO、集合、多线程、网络等。它不仅能够为Java编程初学者提供学习的参考,还可以为有经验的开发人员提供快速开发的支持。 二、使用方式 在使用最常用的1000个Ja…

    Java 2023年5月20日
    00
  • solaris 10下安装java+tomcat

    下面是“solaris 10下安装java+tomcat”的完整攻略: 安装Java 下载并解压Java安装包,建议使用JDK 8及以上版本。 bash $ cd /usr/local $ wget https://download.oracle.com/java/8u201-b09/42970487e3af4f5aa5bca3f542482c60/serv…

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