Javascript中NaN、null、undefined的区别

前言

在JavaScript中,NaN、null和undefined都是特殊的值,它们各自有不同的含义和用途。

undefined

未定义的值和定义未赋值的,不存在的对象属性。在JavaScript中,如果一个变量被声明了,但没有赋值,那么它的值就是undefined。另外,如果一个对象没有某个属性,那么访问这个属性就会返回undefined。在函数内部,如果一个变量没有被声明,那么它就是undefined。使用typeof运算符可以检测一个变量是否为undefined。

// 声明一个变量但没有赋值,默认值为 undefined  
let declaredButNotAssigned;  
console.log(declaredButNotAssigned); // 输出 undefined  
  
// 访问未声明的变量会抛出错误  
// console.log(undeclaredVariable); // ReferenceError: undeclaredVariable is not defined  
  
// 函数内部未声明的变量  
function checkUndefined() {  
  console.log(undeclared); // ReferenceError  
}  
  
checkUndefined();  
  
// 访问对象的未定义属性  
let obj = {};  
console.log(obj.nonExistentProperty); // 输出 undefined  
  
// 使用 typeof 检测 undefined  
console.log(typeof declaredButNotAssigned); // 输出 undefined

null

null是一种特殊的对象,表示无值。在JavaScript中,null通常用于表示一个空对象或空引用。例如,如果一个函数没有返回任何值,那么它的返回值就是null。另外,如果一个对象的某个属性不存在或没有赋值,那么该属性的值也可以是null。需要注意的是,null和undefined在某些情况下是相等的,但它们在本质上是不同的。

// 声明一个变量并赋值为 null  
let nothing = null;  
console.log(nothing); // 输出 null  
  
// null 是一个对象类型  
console.log(typeof null); // 输出 object(这是一个历史遗留问题,实际上在ES5后更准确的描述应该是 null)  
  
// 函数返回 null  
function findUserById(id) {  
  // 假设没有找到用户  
  if (id !== 1) {  
    return null;  
  }  
  return { name: 'Alice' };  
}  
  
let user = findUserById(2);  
console.log(user); // 输出 null

NaN

NaN是一种特殊的数字,表示非数字。当一个数学运算无法得出有效的数字结果时,就会返回NaN。例如,0除以0的结果就是NaN。另外,NaN有一些特殊的行为,例如它与任何值都不相等,包括它自己。使用isNaN()函数可以检测一个值是否为NaN。

// NaN的产生  
let result = 0 / 0; // 结果是 NaN  
console.log(result); // 输出 NaN  
  
// 检测 NaN  
let num = parseInt("hello"); // 尝试将字符串转换为数字,但失败了,结果是 NaN  
console.log(isNaN(num)); // 输出 true  
  
// NaN与任何值(包括它自身)比较都会返回false  
console.log(NaN === NaN); // 输出 false  
console.log(NaN == NaN);  // 输出 false  
  
// 正确检测NaN的方法  
function isReallyNaN(value) {  
  return value !== value; // NaN是唯一不等于自身的值  
}  
  
console.log(isReallyNaN(NaN)); // 输出 true

总结

总结来说,NaN、null和undefined都是JavaScript中的特殊值,它们各自有不同的含义和用途。NaN表示非数字,null表示无值或空引用,而undefined表示未定义或不存在的值。

  • 13
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值