Web/04-JavaScript基础/05-基本数据类型:Null 和 Undefined.md
2020-06-06 18:31:03 +08:00

3.1 KiB
Raw Blame History

很多其他的语言中,只有 null但 JS 语言中,既有 null又有 undefined。很多人会弄混由此觉得 JS 语言很麻烦。其实不然,学习完这篇文章后,你会发现 null 和 undefined 的区别很容易理解。

Null空对象

null 专门用来定义一个空对象(例如:let a = null)。

如果你想定义一个变量用来保存引用类型,但是还没想好放什么内容,这个时候,可以在初始化时将其设置为 null。

比如:

let myObj = null;
cosole.log(typeof myObj); // 打印结果object

补充:

  • Null 类型的值只有一个,就是 null。比如 let a = null

  • 使用 typeof 检查一个 null 值时,会返回 object。

undefined

case1变量已声明未赋值时

声明了一个变量,但没有赋值,此时它的值就是 undefined。举例:

let name;
console.log(name); // 打印结果undefined
console.log(typeof name); // 打印结果undefined

补充:

  • Undefined 类型的值只有一个,就是 undefind。比如 let a = undefined

  • 使用 typeof 检查一个 undefined 值时,会返回 undefined。

case2变量未声明未定义

如果你从未声明一个变量,就去使用它,则会报错(这个大家都知道);此时,如果用 typeof 检查这个变量时,会返回 undefined。举例:

console.log(typeof a); // undefined
console.log(a); // 打印结果Uncaught ReferenceError: a is not defined

case3函数无返回值时

如果一个函数没有返回值,那么,这个函数的返回值就是 undefined。

或者,也可以这样理解:在定义一个函数时,如果末尾没有 return 语句,那么,其实就是 return undefined

举例:

function foo() {}

console.log(foo()); // 打印结果undefined

case4调用函数时未传参

调用函数时,如果没有传参,那么,这个参数的值就是 undefined。

举例:

function foo(name) {
    console.log(name);
}

foo(); // 调用函数时未传参。执行函数后的打印结果undefined

实际开发中,如果调用函数时没有传参,我们可以给形参设置一个默认值:

function foo(name) {
    name = name || 'qianguyihao';
}

foo();

等学习了 ES6 之后,上方代码也可以这样写:

function foo(name = 'qianguyihao') {}

foo();

其他区别

null 和 undefined 有很大的相似性。看看 null == undefined 的结果为 true 也更加能说明这点。

但是 null === undefined 的结果是 false。它们虽然相似但还是有区别的其中一个区别是和数字运算时

  • 10 + null 结果为 10。

  • 10 + undefined 结果为 NaN。

规律总结:

  • 任何数据类型和 undefined 运算都是 NaN;

  • 任何值和 null 运算null 可看做 0 运算。

我的公众号

想学习代码之外的技能?不妨关注我的微信公众号:千古壹号

扫一扫,你将发现另一个全新的世界,而这将是一场美丽的意外: