null 和 undefined 的区别

1. 前言

null 和 undefined 的区别 ?这是一道基础面试题

很多人都会说 null 是空,undefined 是未定义,这样回答太过于笼统。

面试官反问:null 是空代表没有值是吧,undefined 是未定义也是没有值是吧,都是没有值,它们的区别到底是什么 ?

应聘者:这下芭比Q了 !

2. 历史原因

JavaScript 语言居然有两个表示 “无” 的值:null、undefined,这是为什么 ?

1995 年 JS 诞生时,最初像 Java 一样,只设置了 null 作为表示 “无”,根据 C 语言的传统,null 被设计成可以自动转为 0

但是,JS 的设计者,觉得这样做还不够,主要有下面两个原因

一、JS 中的 null 像 Java 中的 null 一样,被当作一个对象。但是 JS 中的数据类型分为 原始类型 和 合成类型(复合类型),作者觉得表示 “无” 的值最好不是对象,也可以理解为不应该是对象

 
  1. // 返回值是 object
  2. typeof null

二、JS 的最初版本没有错误处理机制,发生数据类型不匹配时,会自动进行类型转换,作者觉得,如果 null 自动转为 0,很不容易发现错误

 
  1. // 2
  2. null + 2
  3. // NaN
  4. undefined + 2

因此,作者又设计了一个 undefined。先有 null 后有 undefined,出来 undefined 是为填充之前的坑

3. 具体区别

a. 自动转换

JS 最初版本是这样区分的:

null 表示一个 “无” 的对象(空对象指针),转为数值时是 0,undefined 表示一个 “无” 的原始值,转为数值时是 NaN

b. 含义不同

null 的含义是空对象。一般用于赋值给那些可能返回对象的变量作为初始化值。typeof null 的返回值是 object

undefined 的含义是未定义。变量声明了但没有赋值,变量的值是 undefined。typeof undefined 的返回值是 undefined

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/795567.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20240406在Ubuntu20.04下让移远的4G模块EC200A-CN通过USB底板直接上网

20240406在Ubuntu20.04下让移远的4G模块EC200A-CN通过USB底板直接上网 2024/4/6 15:42 缘起:最近在调试全志H3平台在linux(Ubuntu Core/openWRT)下适配EC200A-CN。 以前调试移远的EC20的时候是先在Ubuntu下确认模块时好的,然后再开…

最新在线工具箱网站系统源码

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 系统内置高达72种站长工具、开发工具、娱乐工具等功能。此系统支持本地调用API,同时还自带免费API接口, 是一个多功能性工具程序,支持后台管理、上…

蓝凌OA单点登录实现方案:以统一身份管理提升效率与安全新举措

蓝凌OA的优势与挑战 在数字化浪潮的推动下,企业对于高效、安全的身份管理需求愈发迫切。蓝凌OA系统,以其出色的流程管理和协同办公能力,已经成为众多企业实现数字化转型的重要工具。然而,随着企业信息化建设的不断深入&#xff0…

配置vscode链接linux

1.安装 remote SSH 2.按F1 ssh ljh服务器公网ip 3. 选择保存远端host到本地 某位置 等待片刻后 4. 切换到远程资源管理器中 应该可以看到一台电脑,右键在当前窗口链接,输入你的服务器用户密码后电脑变绿说明远程连接成功 5.一定要登陆上云服务器后再…

错误:找不到或无法加载主类(vscode的解决方法)

项目场景: 某天,喵某人在敲代码的过程中,点击运行代码,突然显示找不到或无法加载主类。之前创建的java文件都可以正常运行。但新建的java文件无论是什么,点击运行都会显示“错误:找不到或无法加载主类”。 …

深入剖析:HTML页面从用户请求到完整呈现的多阶段加载与渲染全流程详解

HTML页面的加载全过程是一个涉及网络通信、文件解析、资源加载、渲染树构建、布局计算以及最终绘制等多个环节的复杂过程。以下是详细的步骤说明: 1. 用户输入URL并发送请求 用户在浏览器地址栏输入一个URL(统一资源定位符),或者…

【内存泄漏】数据库连接connectionPhantomRefs内存过大

1. 问题背景 线上出现内存报警,内存增长曲线如下 dump内存文件,临时重新发布服务。后经排查发现是数据库连接池设置不合理以及mysql-connector-java 5.1.49有内存泄漏bug。以下为对此问题的分析及问题总结。 1.1 应用背景 数据库连接池: …

[StartingPoint][Tier1]Ignition

Task 1 Which service version is found to be running on port 80? (发现哪个服务版本在端口 80 上运行?) $ nmap -sV -Pn 10.129.1.27 -p 80 nginx 1.14.2 Task 2 What is the 3-digit HTTP status code returned when you visit http://{machine IP}/? (访…

【Linux篇】makefile一次形成两个可执行

首先要知道,正常的makefile文件,在执行的时候,遇到第一个目标文件,就只生成这一个 exec:exec.cgcc -o $ $^ mycmd:mycmd.cgcc -o $ $^ .PHONY:clean clean:rm -rf exec上面的makefile只会生成exec,因为第一次遇到的…

【ubuntu】增加swap容量

一、背景 当在编译大型工程或者运行大型应用时,如果内存大小不足,就会失败,此时可以通过设置swap空间来缓解一下问题,一定程度上解决问题 二、swappiness swappiness是Linux内核的一个属性,其值代表了将运行内存数据交…

Centos7下docker安装jenkins

个人记录 安装Docker与Docker-compose Centos7安装Docker与Docker-compose【图文教程】 配置docker-compose.yml vim docker-compose.yml按i进行编辑模式,粘贴如下内容 version: 3 services:jenkins:image: jenkinsci/blueoceancontainer_name: jenkinsrestart…

Pyinstaller打包exe,无法运行playwright

playwright 与Pyinstaller结合使用来创建独立的可执行文件 set PLAYWRIGHT_BROWSERS_PATH0 playwright install chromium pyinstaller -F main.pypythonplaywright 简单实用

剑指Offer题目笔记26(动态规划的基础知识)

面试题88: 问题: ​ 一个数组cost的所有数字都是正数,它的第i个数字表示在一个楼梯的第i级台阶往上爬的成本,在支付了成本cost[i]之后可以从第i级台阶往上爬1级或2级。请计算爬上该楼梯的最少成本。 解决方案一:&…

Java | Leetcode Java题解之第9题回文数

题目&#xff1a; 题解&#xff1a; class Solution {public boolean isPalindrome(int x) {// 特殊情况&#xff1a;// 如上所述&#xff0c;当 x < 0 时&#xff0c;x 不是回文数。// 同样地&#xff0c;如果数字的最后一位是 0&#xff0c;为了使该数字为回文&#xff0…

Linux:数据链路层

文章目录 路由表数据链路层分片mac帧报头ARP协议ARP的周边话题 路由表 当主机a想要发送消息到主机b&#xff0c;这一整个过程中&#xff0c;数据报文在进行传输的过程实际上是一跳一跳的过去的&#xff0c;而报文可能会经过公网进行传递&#xff0c;本质上这些网络都是靠对应的…

Ubuntu18.04下利用conda虚拟环境实现ROS Melodic编译python3的cv_bridge踩坑全记录

众所周知ros依赖python2.7环境,而深度学习最低要求是python3.x。因此在实现的过程中我遇到很多关于ros catkin_make失败,python路径找不到,以及OpenCV-python找不到版本,cv2不能import等等问题。我自认为是由于ros和深度学习的python版本或者其他包不兼容的事情。 再说一下…

【python毕业设计】基于Python的医院信息管理系统的设计与实现(源码+数据库+毕业论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

Google视觉机器人超级汇总:从RT、RT-2到AutoRT、SARA-RT、RT-Trajectory

前言 随着对视觉语言机器人研究的深入&#xff0c;发现Google的工作很值得深挖&#xff0c;比如RT-2 ​想到很多工作都是站在Google的肩上做产品和应用&#xff0c;​Google真是科技进步的核心推动力&#xff0c;做了大量大模型的基础设施&#xff0c;服 故有了本文&#xf…

【前端Vue】Vue0基础完整教程第5篇:vue指令(下),成绩案例【附代码文档】

Vue从0基础到大神学习完整教程完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;vue基本概念&#xff0c;vue-cli的使用&#xff0c;vue的插值表达式&#xff0c;{{ gaga }}&#xff0c;{{ if (obj.age > 18 ) { } }}&#xff0c;vue指令&#xff0c;综合…

更高效、更简洁的 SQL 语句编写丨DolphinDB 基于宏变量的元编程模式详解

元编程&#xff08;Metaprogramming&#xff09;指在程序运行时操作或者创建程序的一种编程技术&#xff0c;简而言之就是使用代码编写代码。通过元编程将原本静态的代码通过动态的脚本生成&#xff0c;使程序员可以创建更加灵活的代码以提升编程效率。 在 DolphinDB 中&#…