js | undefined vs null vs void 0

背景

你就说为啥吧👇

console.log(null==undefined,null===undefined); // true false
console.log(null ==false,undefined==false) // fasle false
console.log(0==false,NaN==false) // true falseconsole.log(0==null,0<=null); // false  true
console.log(0==false,0<=false);// true  true
console.log(0==NaN,0<=NaN);// false  false
console.log(0==undefined,0<=undefined);// false  false
console.log(0==void 0,0<=void 0);// false  false

在这里插入图片描述

数据类型

在这里插入图片描述

  • undefinednull 都是js的基本数据类型。其中,null除非认为设置,否则,变量不会是null; 变量如果没有被赋值,默认是undefined; void 0 也是用来声明变量是undefined类型的

==中的类型转换

参考链接:js中==的隐式转换

  • 双等号,会发生类型转换,比如,‘1’==1,会把’1’转成1,再比较。除==之外,逻辑运算、比较运算等也会发生。
  • 怎么转换呢?根据上面的图,无非三大种,primitive vs primitive, object vs object, promitive vs object; 只写常见的
    • string vs number: string ->number
    • boolean vs number: boolean->number
    • object vs primitive: object.valueOf().toString()
    • nullundefined不会发生类型转换,但具有其他特殊性。

console.log(nullundefined,null=undefined); // true false

前置

  • js中,==,会先进行类型转换,然后再进行值比较。 ===先比较类型,再比较值
  • 对象的类型转换,先调用valueOf,再调用toSring

分析

  • 1==‘1’ // true发生了什么?
  • 先进行类型转换,都转换成number,然后再比较值,所以是true.
  • 照理,null == undefined,也是先进行类型转换,要么都是null 要么都是 undefined,然后再比较。但实际真的转换了吗?没有。有Number(‘1’),但貌似是没见过Undefiend(null)对吧。
  • null == undefiend的时候并没有发生类型转换,但应该有其他机制,代替了这个Undefiend(null)=undeifned,从而达到浅相等。因为null本来就有bug,所以不排除人家专门针对null == undefined进行了特殊处理,始终返回true。八股文的时候,就死记,null遇到==,就被当成undefined。

为什么要用void 0 代替undefined;

写得很好:https://juejin.cn/post/6844903832560861191

  • undefined是一个变量,允许更改。虽然现在,大多数浏览器中,全局作用域下,不允许更改,但是在函数作用域下,是允许更改的。p.s.(null是关键字,更改会报错,所以没有这个问题)

比如在chorme中,虽然不允许更改,如下,但ie8什么的,好像就有问题,全局下也允许更改

// 高chrome是正常的
undefined=1;
console.log(undefined) // undefined// reason:
console.log(Object.getOwnPropertyDescriptor(window,undefined))

nodejs中把上面的window,换成global就行了。

  • 函数作用域,undefined的问题。如下,是可以直接更改的。
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【YOLOv11[基础]】实例分割Seg | 导出ONNX模型 | ONN模型推理以及检测结果可视化 | python

本文将导出YOLO-Seg.pt模型对应的ONNX模型,并且使用ONNX模型推理以及结果的可视化。话不多说,先看看效果图吧!!! 目录 一 导出ONNX模型 二 推理及检测结果可视化 1 代码 2 效果图

qt QDataStream详解

1. 概述 QDataStream是Qt框架中的一个核心类&#xff0c;主要用于处理二进制数据的序列化和反序列化。它提供了高效、跨平台的方式&#xff0c;将C数据结构转化为字节流&#xff0c;便于在网络传输、持久化存储等场景下使用。QDataStream可以处理包括整数、浮点数、布尔值、字…

云专线优势有哪些?对接入网络有什么要求?

云专线是一种连接企业本地数据中心与云服务提供商之间的专用网络连接方式&#xff0c;具有以下优势&#xff1a; 高安全性&#xff1a;云专线提供了物理隔离的数据传输通道&#xff0c;减少了数据在公共互联网上传输时可能遭遇的安全风险。 低延迟&#xff1a;由于是直接连接&a…

使用python向钉钉群聊发送消息

使用python向钉钉群聊发送消息 一、在钉钉群中新建机器人二、使用代码发送消息 一、在钉钉群中新建机器人 在群设置中添加机器人 选择自定义 勾选对应的安全设置 完成后会展示webhook&#xff0c;将地址复制出来&#xff0c;并记录&#xff0c;后面会用到 二、使用代码发送消…

简单又便宜的实现电脑远程开机唤醒方法

现有的远程开机方案 1&#xff09;使用向日葵开机棒 缺点是比较贵一点&#xff0c;开机棒要一百多&#xff0c;而且查了评论发现挺多差评说不稳定&#xff0c;会有断联和无法唤醒的情况&#xff0c;而且设置也麻烦&#xff0c;还需要网卡支持WOL 2&#xff09;使用远程开机卡 …

Netty ByteBuf 分配 | 池化复用 、直接内存

Netty ByteBuf 分配 本文主要内容关于 ByteBuf 分配介绍&#xff0c;为了更好的理解本文&#xff0c;我们可以带着几个问题思考 在IO密集型业务场景下&#xff0c;可能涉及大量ByteBuf分配&#xff0c;这时我们需 要考虑会不会产生OOM会不会出现频繁GC会不会内存泄露 根据上…

推荐一款windows右键管理工具:ContextMenuManager

Windows右键菜单管理工具是一款可以为系统打造一个异常丰富的右键菜单组&#xff0c;能自定义添加右键菜单项和管理“发送到”及第三方程序添加的右键菜单项目。 主要功能 一个纯粹的Windows右键菜单管理程序 • 管理常见位置右键菜单、自定义添加右键菜单 • 启用或禁用文件…

#渗透测试#SRC漏洞挖掘#自动化脚本的编写01

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…

个人学习记录平台的

摘 要 随着互联网的不断发展&#xff0c;人们由Web 1.0以静态、单向阅读为主的只读式网络走向了以分享为内核的实时现代化网络&#xff0c;即Web 2.0时代逐渐向着Web 3.0迈进。 随着技术的不断更新迭代&#xff0c;互联网从业者也必须处于终身学习的状态&#xff0c;他们要不…

算法日记 14—16 day 二叉树

前两天没有更新&#xff0c;这次把之前的补上&#xff0c;大篇章。 直接冲&#xff01;&#xff01;&#xff01; 题目&#xff1a;找树坐下角的值 513. 找树左下角的值 - 力扣&#xff08;LeetCode&#xff09; 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最…

第三十一章 Vue之路由(VueRouter)

目录 一、引言 1.1. 路由介绍 二、VueRouter 三、VueRouter的使用 3.1. 使用步骤&#xff08;52&#xff09; 3.2. 完整代码 3.2.1. main.js 3.2.2. App.vue 3.2.3. Friend.vue 3.2.4. My.vue 3.2.5. Find.vue 一、引言 1.1. 路由介绍 Vue中路由就是路径和组件的映…

特朗普钦定的编程语言!

大家好&#xff0c;我是程序员面试刷题平台的鸭鸭&#xff01; 鸭鸭昨天一直关注美国大选&#xff0c;最终川普获胜&#xff01;然后就刷到了一个图&#xff1a; 看到上面这张图片了吗&#xff1f; 你没有看错&#xff0c;特朗普也开始关心起 Java 了&#xff01;Java 的迷弟…

day20:三剑客——awk基础

一&#xff0c;概述 AWK 是一种用于处理文本和数据的编程语言&#xff0c;特别擅长用于处理格式化文本文件。它通过将输入数据分成字段&#xff0c;逐行进行处理&#xff0c;广泛应用于数据分析、文本处理和系统管理中。 二&#xff0c;使用方式 命令模式&#xff08;重点&a…

如何优化 B2B 转化率?这些步骤你不可不知

企业怎么才能把上网逛的人变成潜在买家&#xff0c;再进一步变成真金白银的付费客户呢&#xff1f;这对营销团队来说&#xff0c;可是头等大事。特别是在B2B这行&#xff0c;提升转化率&#xff08;CRO&#xff09;不光是任务&#xff0c;更是让营销更高效、收入噌噌涨的秘密武…

CPU Study-Multi-Port Cache

参考来源&#xff1a;《超标量处理器设计》—— 姚永斌 关于Multi-Port Cache可以参考&#xff1a;https://compas.cs.stonybrook.edu/~nhonarmand/courses/sp16/cse502/slides/04-caches.pdf 为了实现每个周期执行多条load/store指令&#xff0c;Cache必须支持多端口。 True…

Linux-c TCP服务模型

1、TCP模型&#xff0c;服务端与客户端的搭建时序图 2、TCP模型&#xff0c;在创建阶段和通信阶段&#xff0c;对套接字的理解 2.1、tcp连接阶段 2.2、tcp通信状态 一个服务端与多个客户端的通信状态 TCP与UDP的对比 &#xff08;下图是笔者理解所画&#xff0c;可能也许有错…

一文了解Android的Doze模式

Android 的 Doze 模式是一项省电功能&#xff0c;主要用于减少设备的功耗&#xff0c;特别是在屏幕关闭且设备长时间未被使用的情况下。Doze 模式在 Android 6.0&#xff08;API Level 23&#xff09;首次引入&#xff0c;并在后续版本中不断改进&#xff0c;以便更智能地管理后…

Redis设计与实现 学习笔记 第十六章 Sentinel

Sentinel&#xff08;哨岗、哨兵&#xff09;是Redis的高可用性&#xff08;high availability&#xff09;解决方案&#xff1a;由一个或多个Sentinel实例&#xff08;instance&#xff09;组成的Sentinel系统可以监视任意多个主服务器&#xff0c;以及这些主服务器属下的从服…

I.MX6U 裸机开发3. GPIO操作控制LED灯

I.MX6U 裸机开发3. GPIO操作控制LED灯 一、创建项目目录及源文件1. 新建目录2. 远程开发环境3. 创建源文件 二、代码编写1. 打开时钟2. 配置端口复用功能为GPIO3. 配置端口电气属性4. 设置GPIO方向&#xff08;GDIR寄存器&#xff09;5. 输出6. 死循环等待 三、编译程序1. 整体…

雷军-2022.8小米创业思考-11-新零售:用电商思维做新零售,极致的效率+极致的体验。也有弯路,重回极致效率的轨道上。

第十一章 新零售 当我们说到小米模式的时候&#xff0c;其实我们说的是两件东西&#xff1a; 一是小米模式的本质&#xff0c;即高效率的商业模式&#xff1b; 另一件是小米这家公司具象的商业模式&#xff0c;这是小米在实践中摸索、建立的一整套业务模型。 从2015年到202…