一些被忽略的小知识之Nan、undefined、null

作者通过面试发现自身小知识点和原理理解不足,强调总结的重要性。接着介绍了JavaScript中NaN、undefined和null的相关知识,包括NaN是非数字特殊值、数据类型为number等,undefined是基本类型及出现情况,null表示空对象等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    要不是因为去面试,我才发现自己原来有那么的小知识点不知道,还有一些原理理解的不透彻,想来面试真的是检验自己学的是否扎实的不二途径,所以,多多总结才会变得更稳呐。

Nan

1,Nan表示not number,中文解释是“非数字的特殊值”;

2,Nan的数据类型是number(这是事实,我没有说错);

typeof NaN;  //number
console.log(NaN == NaN); //false

虽然结果是false很奇怪,也是要接受的:NaN和所有值都不相等,包括它自己(所以,创造出来这个关键字究竟有啥用途呢?!!!!)

3,在哪种情况下会出现NaN

var str = "i wanna a cat";
var str2int = parseInt(str);
console.log(str2int);//NaN
console.log(typeof str2int);//number

这时候的str2int的值是一个NaN,它的类型是number,即parseInt成功的将字符串转换成了数字,但是这个值无法用数字表示出来

4,如何判断一个变量是否是NaN

方法一:这个方法括号里面的东西都是要加上“”的

console.log(isNaN('i wanna a cat'));//true

如果传入数字,就会返回false了

console.log(isNaN('123')); // false

方法二:这个方法括号里的就是你想检测的对象,包括上标

console.log(Number.isNaN('hello'));  // false

undefined

遇到一道面试题:undefined 和not defined有什么区别

1,undefined是javascript中五个基本类型中的一个,undefined是表示系统级的、出乎意料的或类似错误的值的空缺;

2,在一下几种情况下会出现undefined:

  • 变量被声明,但是没有被赋值,这个时候使用这个变量就会报undefined
  • 一个不存在的对象空成员
  • 在变量提升(预解析)阶段,只声明未定义,默认值就是undefined
  • 在JS的严格模式下(”use strict”),没有明确的主体,this指的就是undefined
  • 函数定义没有返回值(return或者return后面什么也不带),默认的返回值就是undefined
  • 函数定义形参不传值,默认就是undefined
  • 函数定义形参不传值,默认就是undefined

3,not defined仅仅表示一个对象没有被定义就被使用了,这是一种系统异常

null

1,null是javascript的五个基本数据类型之一,表示“空的”,表示程序级的、正常的或在意料之中的值的空缺

typeof null; //object

2,null可以表示为一个空对象

3,你可以将一个对象赋值为null,表示这是一个空对象,就像一个占位符一样(一般不会手动将一个变量赋值为undefined,这样做感觉有点傻)

 

<think>嗯,用户问的是前端面试题中undefinednull的区别,怎么回答更全面。首先,我得回想一下自己学过的知识,确保理解正确。这两个概念在JavaScript中确实容易混淆,但又有明确的区别。 首先,应该从定义入手。undefined表示变量声明了但未赋值,而null是一个表示“无”的对象,是开发者主动赋予的值。比如,var a; 这里a就是undefined,而var b = null; 这里b被显式设置为null。 接着,类型不同。undefinedUndefined类型,而null是Object类型。这一点可能让初学者困惑,因为typeof null返回的是object,这其实是JavaScript的一个历史遗留问题。需要解释清楚,虽然null的类型是object,但它本身表示空值。 然后,比较和转换。当使用==时,nullundefined是相等的,因为它们都表示“无”,但使用===时则不相等,因为类型不同。比如null == undefined返回true,而null === undefined返回false。此外,在数值转换时,null转为0,而undefined转为NaN,这可能影响数学运算的结果。 应用场景也需要说明。undefined通常由系统自动分配,比如函数参数未传入时,或者访问对象不存在的属性。而null常用于主动释放对象引用,或者作为函数的参数表示缺少对象。比如,开发者可能会将变量设为null来清除引用,帮助垃圾回收。 另外,可以提到默认行为。例如,函数没有return语句时,默认返回undefined。JSON处理时,null可以被序列化,而undefined会被忽略,这可能影响数据传递。 可能还需要补充一些常见的面试问题,比如如何判断一个变量是null还是undefined。使用typeof判断undefined,而判断null则需要全等运算符,因为typeof null返回的是object。例如,if (x === null)或者if (x === undefined)。 还要注意历史背景,比如为什么typeof null是object,这是因为JavaScript最初的实现中的错误,后来被保留下来,导致了这个不一致的结果。 最后,总结两者的区别,强调在开发中的正确使用,避免因为混淆而导致的bug。比如,主动使用null来初始化可能赋值为对象的变量,而undefined则让系统自动处理。 可能用户希望得到一个结构清晰、涵盖各个方面的回答,所以在组织答案时要分点说明,确保全面性。同时,举例子能帮助理解,比如变量声明后的默认值、函数返回值等实例。这样面试官会觉得候选人对JavaScript的理解比较深入,不仅知道区别,还能结合实际应用场景。</think>### 分步解释:`undefined`和`null`的区别及回答要点 --- #### **1. 核心定义区别** - **`undefined`** 表示变量已声明但未赋值时的默认值,或访问对象不存在的属性时的返回值。 ```javascript let a; // a 的值为 undefined let obj = {}; obj.key; // 访问不存在的属性,返回 undefined ``` - **`null`** 表示一个明确的“空值”,是开发者主动赋予的标识符,用于表示“无对象”或“空对象引用”。 ```javascript let b = null; // 显式赋值为 null,表示“无对象” ``` --- #### **2. 类型与`typeof`操作符** - **`undefined`** - 类型为 `Undefined` - `typeof` 返回 `"undefined"` ```javascript typeof undefined; // "undefined" ``` - **`null`** - 类型为 `Null`(ECMAScript 定义) - `typeof` 返回 `"object"`(历史遗留问题) ```javascript typeof null; // "object"(注意:这是语言设计缺陷) ``` --- #### **3. 相等性比较** - **宽松相等(`==`)** `null` 和 `undefined` 在 `==` 比较中相等(设计上认为两者都表示“无”): ```javascript null == undefined; // true ``` - **严格相等(`===`)** 类型不同,结果为 `false`: ```javascript null === undefined; // false ``` --- #### **4. 数值转换行为** - **`Number()`转换** - `null` → **`0`** - `undefined` → **`NaN`** ```javascript Number(null); // 0 Number(undefined); // NaN ``` --- #### **5. 应用场景** - **`undefined`的常见场景** 1. 变量未赋值 2. 函数未传参数时的默认值 3. 对象属性未定义 ```javascript function test(param) { console.log(param); // 未传参 → undefined } ``` - **`null`的常见场景** 1. 显式清空对象引用(如释放内存) 2. 作为函数参数表示“无对象” 3. 初始化可能赋值为对象的变量 ```javascript let element = document.getElementById("non-existent-id"); // 未找到 → null ``` --- #### **6. 如何检测** - **检测`undefined`** ```javascript if (variable === undefined) { /* ... */ } // 严格比较 // 或使用 void 0(避免 undefined 被重写的风险) if (variable === void 0) { /* ... */ } ``` - **检测`null`** ```javascript if (variable === null) { /* ... */ } // 必须用严格比较 ``` --- #### **7. 总结回答(面试要点)** 1. **定义差异**:`undefined`是未赋值的默认值,`null`是显式空对象引用。 2. **类型不同**:`typeof undefined`为`"undefined"`,`typeof null`为`"object"`。 3. **相等性**:`null == undefined`为`true`,但严格比较为`false`。 4. **数值转换**:`null`转数值为`0`,`undefined`为`NaN`。 5. **应用场景**:系统自动生成用`undefined`,主动清空用`null`。 --- #### **附加分:历史背景** - **`typeof null`的陷阱**:JavaScript 早期设计将`null`的二进制标签与对象相同,导致此问题,沿用至今。 - **JSON处理**:`JSON.stringify()`会忽略`undefined`属性,但保留`null`。 通过以上结构化回答,可体现对 JavaScript 底层机制的理解,助你在面试中脱颖而出!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值