Javascript-标准内置对象-值属性-globalThis-Infinity-Nan-undefined 手写实现globalThis功能

news2024/10/2 6:11:22

1 globalThis

1.1 globalThis简介

        globalThis 是 ECMAScript 2020(ES11)引入的全局对象的标准化引用。在不同JavaScript 运行环境中,全局对象的名称可能不同: 浏览器中是 window。 Node.js 中是 global。 Web Workers 中是 self。 使用 globalThis,你可以在任何环境中统一访问全局对象。

// globalThis
console.log(globalThis)
// 挂载全局对象
globalThis.a = 1
console.log(a)

// 使用全局对象Math Math也是任意环境下都可以使用的
const num = globalThis.Math.random()
console.log(num) 

1.2 手写实现globalThis

        通过条件判断实现一个跨环境的全局对象获取函数,代码如下所示,利用了所有环境都有Math对象挂载到全局对象来判断实现:

function check(val){
    return val && val.Math === Math && val
}

function getGlobal(){
    return check(typeof window === "object" && window) ||
    check(typeof self === "object" && self) ||
    check(typeof global === "object" && global) ||
    (function(){
        return this
    })() || Function("return this")()
}

const myglobal = getGlobal()
console.log(myglobal)

2 Infinity

        Infinity 表示正无穷大,是一个数值类型的全局属性。在数学计算中,当结果超出 JavaScript 能表示的最大数字时,会返回 Infinity。负无穷大用 -Infinity 表示。 Infinity 大于任何数值。与任何数进行算术运算,遵循特定规则。

  • 对Infinity加减都是Infinity,Infinity任意数都是+-Infinity,但是乘法中乘以0的时候是Nan
  • Math.pow(10, 10000)是Infinity因为大于某个值就会成为Infinity,Math.log(0)是-Infinity
  • 常数除以Infinity是0, 1 / 0是Infinity
  • 1**infinity, Infinity * infinity, infinity - infinity也是Nan

        代码示例如下所示:

// Infinity
console.log(Infinity === Number.POSITIVE_INFINITY) // true
console.log(Infinity * 0) // NaN
console.log(Infinity); /* Infinity */
console.log(Infinity + 1); /* Infinity */
console.log(Math.pow(10, 1000)); /* Infinity */
console.log(Math.log(0)); /* -Infinity */
console.log(1 / Infinity); /* 0 */
console.log(1 / 0); /* Infinity */

3 Nan

        NaN 代表 "Not-a-Number"(非数字),是一个特殊的数值类型。当数学运算无法得到有效数值结果时,会返回 NaN。

  • NaN 不等于任何值,包括它自身。
  • 可以使用 isNaN() 函数或 Number.isNaN() 方法来检测是否为 NaN。
  • 如果 NaN 涉及数学运算(但不涉及位运算),结果通常也是 NaN。
  • 当 NaN 是任何关系比较(>、<、>=、<=)的操作数之一时,结果总是 false。
  • NaN 不等于(通过 ==、!=、=== 和 !==)任何其他值——包括与另一个 NaN 值。

 3.1 争对NaN的测试

        测试关系比较运算符,以及==, ===, !==的测试,测试isNaN和Number.isNaN的使用,发现:

  • isNaN会将参数转换为数字判断,Number.isNaN不会
  • NaN !== NaN判断为真,可以使用 x !== x来判断NaN
// NaN
console.log(NaN === NaN) // false
console.log(NaN > 3) // false
console.log(NaN < 3) // false
console.log(NaN == 3) // false
console.log(NaN === 3) // false
console.log(NaN !== NaN) // true

// isNaN
console.log(isNaN(NaN)) // true
console.log(Number.isNaN(NaN)) // true
// Number.isNaN不会将参数转换为数字(只会判断当前状态是否为NaN)
console.log(Number.isNaN("Hello")) // false
// 全局isNaN会将参数转换为数字(包含未来状态)
console.log(isNaN("Hello")) // true

         如果数组当中存在Nan那么有些方法无法查找到NaN的存在,例如indexOf、lastIndexOf,但是查找值的可以,例如includes。

4 undefined

        undefined 表示未定义的值,是 JavaScript 中的一种基本数据类型。当变量声明但未赋值时,其值为 undefined,有以下要点:

  • 访问对象中不存在的属性,返回 undefined。
  • 没有return的函数返undefined。
  • undefined 与 null 不同,null 表示空值。
  • 必须使用严格等于运算符 === 来检测是否为 undefined,因为undefined和null在==下为true。
  • 如果方法或者是语句中操作的变量没有被赋值,则会返回 undefined
  • undefined可以在非全局作用域中被当作标识符(变量名)来使用(因为 undefined 不是保留字)。
let x;
console.log(x);                     // 输出:undefined
const obj = {};
console.log(obj.prop);              // 输出:undefined
function foo() {}
console.log(foo());                 // 输出:undefined
console.log(undefined === undefined); // 输出:true
console.log(null == undefined) // true


// 这里没有声明 y
if (typeof y === "undefined") {
    // 没有错误,执行结果为 true
    console.log("y is " + typeof y); // y is undefined
  }
  
  if (y === undefined) {
    // ReferenceError: y is not defined
  }

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

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

相关文章

记录|Modbus-TCP产品使用记录【摩通传动】

目录 前言一、摩通传动实验图1.1 配置软件 IO_Studio1.2 测试软件Modbus Poll1.2.1 读写设置测试1.2.2 AI信号的读取 1.3 对应的C#连接Modbus的测试代码如下【自制&#xff0c;仅供参考】1.4 最终实验图 更新时间 前言 参考文章&#xff1a; 自己需要了解和对比某些产品的Modbu…

GAN|对抗| 生成器更新|判别器更新过程

如上图所示&#xff0c;生成对抗网络存在上述内容&#xff1a; 真实数据集&#xff1b;生成器&#xff1b;生成器损失函数&#xff1b;判别器&#xff1b;判别器损失函数&#xff1b;生成器、判别器更新&#xff08;生成器和判别器就是小偷和警察的关系&#xff0c;他们共用的…

【STM32单片机_(HAL库)】4-4【定时器TIM】脉冲计数配置步骤及实验

脉冲计数配置步骤 1.硬件 STM32单片机最小系统按键模块 2.软件 定时器HAL驱动层文件添加counter驱动文件添加GPIO常用函数main.c程序 #include "sys.h" #include "delay.h" #include "led.h" #include "uart1.h" #include "…

热销的五款骨传导耳机真的好用吗?无广测评五款骨传导耳机

在科技快速发展的背景下&#xff0c;产品设计的重点开始转向考虑人们的行为方式与健康需求。耳机&#xff0c;已成为现代生活中不可或缺的一部分&#xff0c;无论是出于日常习惯、隐私考量&#xff0c;还是在公共场合的礼貌需求&#xff0c;耳机都始终陪伴着我们。 随着耳机在…

JAVAEE如何实现网页(jsp)间的数据传输?一文总结

刚刚接触到JAVAEE的WEB开发&#xff0c;解释不周的地方希望感谢指正&#xff01;&#xff01;&#xff01; 情景如下&#xff1a; 我的使用是21版的IDEA&#xff0c;9.03版本的tomcat&#xff0c;来做一个示范。 构建项目 点击下一步 -> 完成&#xff0c;等待项目构建结束…

如何设计具体项目的数据库管理

### 例三&#xff1a;足协的数据库管理算法 #### 角色&#xff1a; - **ESFP学生**&#xff1a;小明 - **ENTP老师**&#xff1a;张老师 #### 主题&#xff1a;足协的数据库管理算法 --- **张老师**&#xff1a;小明&#xff0c;今天我们来讨论一下足协的数据库管理算法。你…

CATIA风扇

记录下风扇绘制的要点 1、 图纸 2、 先画出投影面的草图&#xff0c;下图中白色线&#xff0c;然后目标是获得紫色线&#xff0c;紫色线是白色线在淡黄色面上的投影。红色线和蓝色线是螺旋线。 3、根据以下投影视图&#xff0c;螺旋线从起点到终点&#xff0c;围绕旋转轴旋转一…

【C++】第一节:C++入门

1、C关键字 2、命名空间 在C/C中&#xff0c;变量、函数和后面要学到的类都是大量存在的&#xff0c;这些变量、函数和类的名称将都存在于全局作用域中&#xff0c;可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化&#xff0c;以避免命名冲突或名字污染&am…

Activiti7 工作流引擎学习

目录 一. 什么是 Activiti 工作流引擎 二. Activiti 流程创建步骤 三. Activiti 数据库表含义 四. BPMN 建模语言 五. Activiti 使用步骤 六. 流程定义与流程实例 一. 什么是 Activiti 工作流引擎 Activiti 是一个开源的工作流引擎&#xff0c;用于业务流程管理&#xf…

SpringCloud源码:服务端分析(二)- EurekaServer分析

背景 从昨日的两篇文章&#xff1a;SpringCloud源码&#xff1a;客户端分析&#xff08;一&#xff09;- SpringBootApplication注解类加载流程、SpringCloud源码&#xff1a;客户端分析&#xff08;二&#xff09;- 客户端源码分析。 我们理解了客户端的初始化&#xff0c;其实…

车辆种类分类识别数据集,可以识别7种汽车类型,已经按照7:2:1比 例划分数据集,训练集1488张、验证集507张,测试集31张, 共计2026张。

车 车辆种类分类识别数据集&#xff0c;可以识别7种汽车类型&#xff0c;已经按照7:2:1比 例划分数据集&#xff0c;训练集1488张、验证集507张,测试集31张&#xff0c; 共计2026张。 数据集分为一类客车(tinycar) &#xff0c;类客车(midcar) &#xff0c;三类 客车(bigcar) ,…

数据库重建索引的作用?

重建索引是数据库管理中的一个重要操作&#xff0c;主要用于优化数据库性能和提高查询效率。以下是重建索引的一些主要用途&#xff1a; 提高查询性能&#xff1a;随着时间的推移&#xff0c;数据的插入、更新和删除会导致索引碎片化&#xff0c;重建索引可以减少碎片&#xf…

C语言_内存函数

内存函数是 C 标准库中的一组函数&#xff0c;用于管理和操作内存。使用时需要包含头文件<string.h>。 1. memcpy的使用和模拟实现 函数形式如下&#xff1a; void* memcpy(void* destination, const void* source, size_tnum);函数解析和注意事项&#xff1a; memcp…

【有啥问啥】SimAM(Similarity-Aware Activation Module)注意力机制详解

SimAM&#xff08;Similarity-Aware Activation Module&#xff09;注意力机制详解 引言 在计算机视觉领域&#xff0c;注意力机制通过引导模型关注图像中的关键区域&#xff0c;显著提升了模型处理和理解图像的能力。SimAM&#xff08;Similarity-Aware Activation Module&a…

【网络安全 | 渗透工具】自动化 .env/.git文件检测

原创文章,禁止转载。 文章目录 1. 安装 DotGit2. 配置 DotGit3. 使用 DotGit 检测 .env / .git 文件1. 安装 DotGit 在谷歌应用商店中搜索 DotGit 并进行安装: 2. 配置 DotGit 安装完成后,可以在设置中开启或关闭相关功能: 3. 使用 DotGit 检测 .env / .git 文件 接下来…

音悦 1.5.1 完全免费,无广告,纯净听歌体验

音悦是一款完全免费的听歌应用&#xff0c;汇聚全网多平台曲库&#xff0c;拥有排行榜、MV、个性电台、我的歌单、收藏喜欢等功能。无需会员&#xff0c;没有广告&#xff0c;免费听歌下歌&#xff0c;是一款非常纯净小巧但功能齐全的听歌神器。 大小&#xff1a;27.6M 百度网…

【Linux 24】网络基础概念

文章目录 &#x1f308; 一、计算机网络的发展⭐ 1. 独立模式⭐ 2. 网络互联⭐ 3. 局域网 LAN⭐ 4. 广域网 WAN &#x1f308; 二、计算机网络的协议⭐ 1. 协议的概念⭐ 2. 协议分层⭐ 3. OSI 七层参考模型⭐ 4. TCP / IP 五层模型 &#x1f308; 三、网络传输基本流程⭐ 1. 同…

【计算机毕业设计】springboot企业客户信息反馈平台

摘 要 网络的广泛应用给生活带来了十分的便利。所以把企业客户信息反馈管理与现在网络相结合&#xff0c;利用java技术建设企业客户信息反馈平台&#xff0c;实现企业客户信息反馈的信息化。则对于进一步提高企业客户信息反馈管理发展&#xff0c;丰富企业客户信息反馈管理经验…

软考-高级系统分析师知识点合集记录

一、计算机基础知识 存储系统 计算机指令&#xff1a; 复杂指令&#xff0c;精简指令 指令的流水线周期计算方式 计算机系统体系结构&#xff1a; flynn方法 根据指令流和数据流的并行程度对计算机体系结构进行分类&#xff1a; 冯.诺依曼结构 &#xff0c;哈佛结构 根据指…

获取和解析JWT令牌

一、JWT令牌介绍 JWT&#xff08;JSON Web Tokens&#xff09;是一种开放标准&#xff08;RFC 7519&#xff09;&#xff0c;它定义了一种紧凑且自包含的方式&#xff0c;用于在各方之间以JSON对象的形式安全地传输信息。每个JWT令牌由三部分组成&#xff1a;Header&#xff0…