当前位置: 首页 > web >正文

Javascript NaN Symbol BigInt

朋友们,请先欣赏这段让无数JS开发者深夜崩溃的代码:

console.log(NaN === NaN); // false
console.log(typeof NaN); // “number”
image.png

这就像发现自家冰箱说"我不是冰箱"却还坚持制冷——NaN就是JavaScript里的量子幽灵!今天,就让我们用《生活大爆炸》谢耳朵的较真精神,拆解ES6类型系统的三大"怪胎":

🐱‍👓 第一定律:NaN的薛定谔猫笼
想象你把一只猫、一瓶毒药和放射性原子关进黑箱。在打开前,猫既是活的又是死的——这就是NaN的量子态!它诞生于各种"数字自杀现场":

const quantumCat = 0/0; // 除零惨案
const schrodingerCat = +“hello”; // 字符串转数字失败
诡异的是:所有NaN都不等于自己!这就像克隆人军团每个都说"我是本体",但DNA检测显示:

console.log(quantumCat === schrodingerCat); // false
😅更荒诞的是typeof NaN === “number”——好比微波炉炸了厨房,厂家却说:“它确实是厨具”(1997年ES1的历史包袱)。检测量子幽灵的正确姿势:

// 错误示范:if (x === NaN)
if (Number.isNaN(x)) {
console.log(“抓到量子猫了!”);
}
image.png
🪪 第二定律:Symbol的元宇宙身份证
如果NaN是量子幽灵,Symbol就是元宇宙的加密数字DNA!每次调用Symbol()就像在区块链上铸造NFT:

const metaverseID = Symbol(“身份证”);
const fakeID = Symbol(“身份证”);

console.log(metaverseID === fakeID); // false
// 即使标签相同也是平行宇宙的个体!
实战神技:用Symbol.iterator给普通对象安装"流水线传送带":

const myGameInventory = {
items: [“光剑”, “等离子炮”, “曲速引擎”],
Symbol.iterator { // 此处有宝藏
let index = 0;
return {
next: () =>
index < this.items.length ?
{ value: this.items[index++], done: false } :
{ done: true }
};
}
};

for (const item of myGameInventory) {
console.log(装备:${item});
}
// 输出:光剑 → 等离子炮 → 曲速引擎
在大型项目中,Symbol属性键就像给代码上了量子锁:

const PRIVATE_KEY = Symbol(“金库密码”);
const bank = {
balance: 1000000,
[PRIVATE_KEY]: “0x8f8a2d3c” // 黑客永远找不到!
};
image.png
💰 第三定律:BigInt的金融革命
先看这个让程序员怀疑人生的等式:

console.log(0.1 + 0.2 === 0.3); // false!
image.png

这不是bug!是IEEE 754浮点数的设计局限:

   64位数字存储结构

┌──符号位──┬───11位指数位───┬──52位尾数位──┐
0 1 12 64

尾数位只能精确表示52位二进制小数,0.1在内存中其实是:

0.1000000000000000055511151231257827021181583404541015625
BigInt的降维打击:开辟任意长度的整数内存!

// Number的精度上限(2^53)
console.log(9007199254740992 === 9007199254740993); // true!

// BigInt突破次元壁
const billion1 = 9007199254740993n;
const billion2 = 9007199254740994n;
console.log(billion1 === billion2); // false
金融计算实战:

// 传统方案:小数转整数(依然有精度风险)
const total = (0.1 * 100 + 0.2 * 100) / 100; // 0.3

// BigInt原子级精度
const cryptoTransaction = {
eth: 1000000000000000000n, // 1 ETH = 10^18 wei
gas: 210000000000000n
};
console.log(eth + gas); // 1000210000000000000000n
image.png
🧪 类型检测的量子纠缠
JS类型体系就像多宇宙理论:

     JavaScript数据类型/      \原始类型      对象类型

┌────┬────┬────┬────┬───┐ ┌──────┐
│Null│未定义│布尔│字符│数字│Symbol │ Object │
└────┴────┴────┴────┴───┘ └──────┘
╱ ╲
Number BigInt

NaN (量子幽灵)
历史悬案解密:为什么typeof NaN === ‘number’?

// 1997年ES1标准定义:
typeof 37 === ‘number’; // true
typeof NaN === ‘number’; // 被迫true
因为NaN本质是数字运算的失败产物,就像试图用微波炉制冷——设备还是厨房电器,但产出已不是食物!

💔 类型番外篇:undefined与null的分手大戏
这对数据类型界的"前任情侣"总让人混淆:

undefined:“我从未定义过你!”(像删除联系方式的前任)
null:“我们结束了”(像通讯录里备注"别联系"的前任)
image.png

let ex;
console.log(ex); // undefined (从未赋值)

ex = null;
console.log(ex); // null (主动清空)
用代码验证关系状态:

console.log(void 0 === undefined); // true (void操作符必返undefined)
console.log(typeof null); // “object” (史上最大设计失误!)
🧪 类型体操实验室
Symbol跨模块通信:

// 元宇宙全球身份证注册
const globalID = Symbol.for(“跨次元通行证”);

// 平行宇宙验证
console.log(Symbol.keyFor(globalID)); // “跨次元通行证”
BigInt时空转换:

// 小心!不同次元不能直接运算
console.log(500n + 500); // 报错!

// 合法穿越方案
console.log(500n + BigInt(500)); // 1000n
console.log(Number(500n) + 500); // 1000
🌌 宇宙真理公式
当你在JS世界探索时,请默念这三条次元定律:

  1. NaN !== NaN // 量子不确定性原理
  2. 123n !== 123 // 整数宇宙与浮点宇宙不可互通
  3. Symbol() !== Symbol() // 元宇宙身份证不可克隆
    下次见到NaN,请优雅地打招呼:“看,这是数字界的薛定谔猫!” 而用BigInt处理金融数据时,记得对浮点数说:“大人,时代变了!”

终极彩蛋:console.log(typeof function(){}); // “function”
然而ECMA规范说:函数只是可调用的object!🧐

http://www.xdnf.cn/news/16315.html

相关文章:

  • TDengine 转化类函数 CAST 用户手册
  • 7.24 C/C++蓝桥杯 | 排序算法
  • Android15或AndroidU广播的发送流程
  • 星慈光编程虫2号小车讲解第三篇--附件概述
  • 深入理解 IO 多路复用:从 select 到 epoll
  • MySQL---索引、事务
  • VUE2 学习笔记5 动态绑定class、条件渲染、列表过滤与排序
  • 【全新上线】境内 Docker 镜像状态监控
  • 秋招Day18 - MyBatis - 基础
  • C语言转义字符‘\\‘‘ 解析与常见误区
  • 六种经典智能优化算法(PSO/GWO/WOA/HHO/DBO/SSA)无人机(UAV)三维路径规划,Matlab代码实现
  • TimeXer - 重新审视时序预测内的外生变量
  • 【LeetCode数据结构】二叉树的应用(一)——单值二叉树问题、相同的树问题、对称二叉树问题、另一棵树的子树问题详解
  • MySQL的命令行客户端
  • markdown学习笔记(个人向) Part.2
  • 跨境支付入门~国际支付结算(区块链篇)
  • C语言:20250724笔记(函数-指针)
  • JAVA_THIRTEEN_常用API
  • 【分布式锁】什么是分布式锁?分布式锁的作用?
  • tensorflow搭建神经网络
  • Linux 磁盘挂载,查看uuid
  • 前端笔记:同源策略、跨域问题
  • 专题:2025微短剧行业生态构建与跨界融合研究报告|附100+份报告PDF汇总下载
  • Python实现PDF按页分割:灵活拆分文档的技术指南
  • 大模型提示词漏洞攻防测试:技术分析与实践指南
  • vlm MiniCPM 学习部署实战
  • 模型的存储、加载和部署
  • RCLAMP0512TQTCT 升特半导体 TVS二极管 12通道全防护芯片 以太网/PLC控制/5G基站专用
  • 微信通话自动录音器
  • 复矩阵与共轭转置矩阵乘积及其平方根矩阵