null、undefined、NaN的区别。它们之间的隐式转换和全等结果又是什么?

news/2024/10/18 18:27:34/

前言

在 JavaScript 中,null、undefined 和 NaN 是三种不同的特殊值,它们在使用时有着不同的含义和用途。而我们在做项目时候,常常与它们打交道。

因此,在编写 JavaScript 代码时需要了解它们之间的区别和相互之间的隐式转换,以避免产生错误或不可预料的行为。比如:

1. 在使用 if 语句进行条件判断时,没有考虑到 undefined 可能隐式转换为 false。

let foo;
if (foo) {console.log("This should not be executed");
}

在这个例子中,由于 foo 的值为 undefined,因此 if 语句会将其隐式转换为 false,从而不执行其中的代码。如果忘记了这种隐式转换,就可能导致逻辑上的错误。

2. 在进行数学运算时,没有考虑到 NaN 的影响。

let bar = "hello";
console.log(bar - 1); // NaN
console.log(typeof (bar - 1)); // number

在这个例子中,由于将一个字符串减去一个数字会产生 NaN,因此 bar - 1 的结果就是 NaN。如果没有考虑到 NaN 的影响,就可能导致无效的计算结果或不可预测的行为。

3.在进行对象属性访问时,没有考虑到某个属性的值可能为 undefined。

let baz = {};
console.log(baz.prop); // undefined
console.log(baz.prop.foo.bar); // TypeError: Cannot read property 'foo' of undefined

在这个例子中,由于 baz 对象中不存在名为 prop 的属性,因此访问 baz.prop 会返回 undefined。然而,再次访问 undefined.prop.foo.bar 就会导致 TypeError 错误。如果没有考虑到这种情况,就可能导致运行时错误。

一、null

null 表示一个空对象指针。当一个变量被赋值为 null 时,它表示一个空对象引用,并且 typeof 运算符会返回 "object"。

let foo = null;
console.log(foo); // null
console.log(typeof foo); // object

二、undefined

undefined 表示一个未定义的值。当一个变量被声明但没有被赋值时,它的值为 undefined。同时,函数没有返回值时也会返回 undefined。typeof 运算符会返回 "undefined"。

let bar;
console.log(bar); // undefined
console.log(typeof bar); // undefinedfunction baz() {}
console.log(baz()); // undefined

三、NaN

NaN 表示不是数字的值。当进行无效的数学操作或将非数字字符串转换为数字时,会返回 NaN。NaN 与任何值(包括它自己)都不相等。

console.log(0 / 0); // NaN
console.log("hello" - 1); // NaN
console.log(NaN == NaN); // false

NaN 与任何值(包括它自己)都不相等这里可能有人不能理解。NaN和NaN明明长得一样,为什么不相等呢?可以从它的定义去理解“不是数字的值”表示这个值仅仅不是数字,可以是除数字外的任何值,既然是任何值了,两个不是数字的任何值,自然不相等。

四、==和===的情况

在 JavaScript 中,null、undefined 和 NaN 之间的相等比较是一个比较微妙的问题。由于它们的含义和类型都不同,因此它们之间的相等比较有时可能会产生出人意料的结果。

  • ==的特殊情况

1. null 和 undefined

特别注意:null 和 undefined 相等比较时,它们会相等!这是因为在 JavaScript 中,它们被认为是相同类型的“空值”。

console.log(null == undefined); // true
console.log(null == null); // true
console.log(undefined == undefined); // true
console.log(null == 0); // false
console.log(undefined == "hello"); // false

2. NaN

NaN 和任何值,包括 NaN 自身,在相等比较时都不相等。这是因为 NaN 表示不是数字的值,它与任何值的比较结果都为 false。

console.log(NaN == NaN); // false
console.log(NaN == 0); // false
console.log(NaN == "hello"); // false

需要注意的是,虽然 NaN 与任何值比较的结果都为 false,但在使用 isNaN() 函数时,它会将传入的值转换为数字后再进行比较。

console.log(isNaN(NaN)); // true  NaN转为数字是NaN
console.log(isNaN("hello")); // true  字符串转化为数字是NaN
console.log(isNaN(undefined)); // true  undefined转化为数字是NaN,因为 undefined 表示一个未定义的值,在转换为数字时没有明确的意义
console.log(isNaN(null)); // false  null转化为数字是0
  • ===的特殊情况

ull、undefined 和 NaN 是不同的类型,在严格相等比较(===)时会被认为是不相等的。同时,与 NaN 进行严格相等比较时,无论与哪个值比较都会返回 false,因为 NaN 是唯一不等于自身的值。

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


http://www.ppmy.cn/news/274909.html

相关文章

携程、艺龙、酷讯演绎在线旅游三国志

携程、艺龙、酷讯演绎在线旅游三国志 文/王易见 在线旅游目前最热门的话题可能非“酷讯屏蔽携程”这一新闻事件莫属了。在此次事件中,有人认为是携程不同意酷讯收录携程信息,所以主动法律函要求酷讯停止搜录其产品信息的,也有人认为是酷讯主动…

爱旅行

我在时间的轨迹上徘徊,踏上每一列经过的车。沿途的风景在渐渐远去,我举着那快叫思念的车牌,等待着最后一站——故乡。 有一天,飞驰的火车中,坐着一个旅行者,他望着窗外的山、树被夕阳刷上了一层鲜艳的红&am…

旅游咨询系统

开发工具(eclipse/idea/vscode等):idea 数据库(sqlite/mysql/sqlserver等):mysql 功能模块(请用文字描述,至少200字): 1.登录模块:实现用户登录验证的功能、用户注册的功能(注册为普通用户或者专业导游&…

畅快沟通,网易云信携手无忧行与途家让旅行一路惊喜

国庆假期才过去不久,热爱出游的朋友们已经开始计划上了元旦假期。日前2020年的第一个法定假的安排新鲜出炉,虽然只放一天,但通过休假两天就可与周末连成5天小长假,对上班族来说,假期已经ready,就差行「心」…

Argo Rollouts 体验

文章目录 1. Argo Rollouts 简单介绍2. Argo Rollouts 安装3. Argo Rollouts Kubectl 插件安装4. Argo Rollouts 架构5. 官方示例体验6. 示例体验6.1 基本使用6.1.1 部署 rollout6.1.2 更新 rollout6.1.3 恢复 rollout6.1.4 中断 rollout6.1.5 小结 6.2 Argo Rollouts 配合 Ist…

携程商旅荣膺“年度受企业认可差旅管理公司”

1月6日,由财视中国举办的“CEFO年度峰会”于上海圆满落幕,此次峰会围绕“新常态下企业CEFO使命与资本市场新机遇”主题,邀约社科院、上国会的著名教授,世界五百强企业CFO,国际国内著名企业的实控人和高管,财…

乐不起来的中国式旅游

21寸的彩色电视机,不拍打不出影儿;卫生间贴着纸条,21时后无热水,可我们入住的时候就22点了;别说网线,连网口都没;气哼哼想找电话打给客服要点热水吧,赫然发现房间压根没这物件儿。 …

乐人之乐,人亦乐其乐!继续分享五款好用的软件

分享爱,分享时光,分享精彩瞬间,大家好,我是互联网的搬运工,今天继续给大家带来几款好用的软件。 1.文档多开工具——Office Tab Enterprise Office Tab Enterprise是一款office文档多开工具,使用它可以同时…