Javascript中null与Infinity是否可互换?为何属性打印为null却和Infinity全等
1. Infinity 和 null 完全不能互换使用
二者是 JavaScript 中完全不同的两类值,任何场景下都不可以互换:
Infinity属于数字(Number)类型的特殊值,代表超出 JavaScript 可表示最大数值的无穷大值,执行typeof Infinity得到的结果是numbernull属于独立的 Null 类型,代表主动定义的空值引用,执行typeof null得到的结果是object
二者的类型、语义、适用场景完全不同,不存在等价性。
2. 日志打印和全等判定结果不一致的原因
这个现象和 JavaScript 本身的运行逻辑无关,是在线运行环境的控制台序列化显示导致的问题:
- 代码实际运行过程中,
RANGE_DEFAULT_OPTIONS.max的值确实是Infinity,所以全等判定RANGE_DEFAULT_OPTIONS.max === Infinity会返回true,这个是代码真实运行的结果。 - 在线环境的控制台需要把运行时的对象转成字符串展示给用户时,通常会使用类似
JSON.stringify的序列化逻辑,而 JSON 标准本身不支持Infinity、NaN这类特殊数值,序列化时会自动将这类值转换为null,你看到的控制台打印结果只是序列化后的展示值,不是对象真实的属性值。
你可以自行执行以下代码验证这个序列化逻辑:
console.log(JSON.stringify({ min: 0, max: Infinity })) // 输出结果:{"min":0,"max":null}
如果在本地浏览器控制台或者 Node.js 环境执行你写的原代码,会看到对象打印时 max 属性会正确显示为 Infinity,不存在显示异常的问题。
内容的提问来源于stack exchange,提问作者Ole
相关产品推荐
相关产品推荐

