undefind, null, NaN理解

本文详细解析了JavaScript中undefined、null与NaN的概念及其区别。undefined为未初始化的变量状态,null代表空或无效的对象引用,而NaN则表示非数字,是唯一不等于任何值的特殊数字类型。

undefined:

全局属性,变量声明未初始化时,变量是undefind,及变量声明了,获取的typeof(变量)得到的结果也是         "undefind" ;如果变量未经声明就直接用回直接报错,但是获取未经声明变量的数据类型得到的结果也是 "undefind"。

null:

全局对象,表示"空",表示不存在或无效的对象,

NaN:

typeof(NaN)为"number", 表示不是一个数字,唯一一个不等于任何东西包括自己。所以要判断某个值是否是 NaN,不能使用 == 或 === 运算符。 
提示:isNaN() 函数通常用于检测 parseFloat() 和 parseInt() 的结果,以判断它们表示的是否是合法的数字。当然也可以用 isNaN() 函数来检测算数错误,比如用 0 作除数的情况。 

三者的判断见:

https://www.jb51.net/article/48481.htm此链接

### 关于 JavaScript 中函数返回 `undefined` 的原因 在 JavaScript 中,如果一个函数执行完毕而未显式指定返回值,则该函数会自动返回 `undefined`[^2]。这意味着即使函数体中有逻辑处理或其他操作,只要缺少 `return` 语句或者 `return` 后面没有任何表达式,那么最终的结果就是 `undefined`。 #### 函数无返回值的情况 考虑以下代码片段中的 `fn2()` 函数: ```javascript function fn2(){ var hometown = '赣州市于都县'; } var b = fn2(); console.log('fn2()函数的返回值=' + b); ``` 由于 `fn2()` 并没有通过 `return` 显式地返回任何值,因此变量 `b` 将接收到默认值 `undefined`。 #### 条件分支中遗漏返回值 有时候,在复杂的条件结构下,可能会忽略某些路径上的返回值设置。例如下面的例子展示了这种情况下的行为: ```javascript function checkValue(x){ if (x === true){ return "True"; } // 如果这里不加else或者其他返回,默认也是undefined } let result = checkValue(false); console.log(result); // 输出 undefined ``` 上述情况表明,如果没有覆盖所有的可能场景并提供相应的返回值,JavaScript 不会在运行时抛出错误而是简单地赋予其 `undefined` 值[^3]。 #### 递归过程中丢失返回值 对于递归调用来说,特别需要注意每次调用都需要正确传递和接收结果。假如在一个递归定义里忘记给后续层级的调用添加 `return` ,则可能导致顶层只得到底层计算完成后的局部成果而非整体解决方案。观察这段有问题的递归实现及其修正版本: 原始版(存在问题): ```javascript m=1; nn=1; function factorial(n){ nn *= m; if(m===n){ console.log(nn); return nn; } m++; factorial(n); // 缺少在这里加上return关键字 } console.log(factorial(5)); // 可能打印中间过程但最后输出的是undefined而不是预期的阶乘数 ``` 修复后: ```javascript m=1; nn=1; function factorial(n){ nn *= m; if(m===n){ console.log(nn); return nn; } m++; return factorial(n); // 加上必要的return使得每一层都能向上一层反馈结果 } console.log(factorial(5)); // 正确显示阶乘结果即120 ``` 此案例强调了即便内部已经成功得出部分答案,但如果未能恰当利用这些子问题解来构建完整的解答链路的话,整个程序依旧无法达到预想效果[^4]。 综上所述,无论是普通的顺序流程还是嵌套式的循环迭代亦或是自我重复性质强烈的递归模式之中,“遗忘”去明确定义每一个出口处应该携带的数据都会致使全局范围内遭遇难以预料的行为表现形式之一便是——意外遇见那个神秘莫测却又司空见惯的老朋友:“Undefined”。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值