null、undefined和可选链操作符

文摘   2024-08-19 20:00   内蒙古  

在微搭中,我们经常需要获取表单的值来进行运算,比如我们计算分成,就需要根据每个人的提成额结合表单的总金额进行按比例分配。这时候计算的时候我们就需要判断我们取的值是否取到了,如果未取到值直接去计算的话往往会导致报错。

那如何去验证数据的有效性呢?这里我们用到了null、undefined和可选链操作符

1 什么是null

表示“无值”或“空值”。它是一个表示“没有对象”的原始值

通常用于显式地表示一个变量应该有一个对象,但目前没有

2 什么是undefined

表示“未定义”或“缺失的值”。它是一个表示变量未被赋值的原始值

当一个变量被声明但未被赋值时,或者一个函数没有返回值时,返回的就是 undefined

3 null和undefined是什么类型

null的类型是 object

console.log(typeof null); // "object"

undefined的类型是undefined

console.log(typeof undefined); // "undefined"

4 使用场景

null通常用于初始化变量,表示该变量将来会被赋值

 let user = null; // 表示用户尚未登录

当变量被声明但未赋值时,或者函数没有返回值时,自动赋值为 undefined

let x; // x 是 undefinedfunction test() {}console.log(test()); // 输出 undefined,因为没有返回值

5 相等性比较

在使用相等运算符(==)时,null 和 undefined 被认为是相等的

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

但在使用严格相等运算符(===)时,它们是不相等的

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

6 判断空值

if (value === "" || value === null || value === undefined) {    // 处理空值的情况}

这是一种判断空值的方案,但是还有一种更简洁的方案

if (!value) {    // 处理空值的情况}

使用 !value 会将以下值视为“假”:

  • “”(空字符串)

  • null

  • undefined

  • 0(数字零)

  • NaN(非数字)

7 访问对象中不存在的属性会返回undefined

const obj = {    name: "Alice",    age: 30};

console.log(obj.name); // 输出: "Alice"console.log(obj.age); // 输出: 30console.log(obj.gender); // 输出: undefined

8 可选链操作符

可选链(Optional Chaining)是 JavaScript 中的一种语法,用于安全地访问嵌套对象的属性。它的主要目的是避免在访问深层嵌套属性时出现错误,尤其是在某些中间属性可能为 null 或 undefined 的情况下。

可选链使用 ?. 运算符来访问对象的属性。它的工作原理是:

如果对象是 null 或 undefined,则整个表达式返回 undefined,而不会抛出错误

如果对象存在,则继续访问下一个属性

const user = {    name: "Alice",    address: {        city: "Wonderland"    }};

console.log(user.address?.city); // 输出: "Wonderland"console.log(user.address?.zip); // 输出: undefinedconsole.log(user.contact?.email); // 输出: undefined

为什么使用可选链

避免错误: 在访问嵌套属性时,如果某个中间属性为 null 或 undefined,使用可选链可以避免抛出 TypeError。例如,user.address.zip 如果 address 为 undefined,则会抛出错误,而 user.address?.zip 则不会

简化代码: 可选链使得代码更简洁,避免了多层嵌套的条件检查。例如,传统的方式需要写成

if (user && user.address && user.address.city) {    console.log(user.address.city);}

使用可选链后,可以简化为

console.log(user.address?.city);

在阅读官方模板的时候会看到有大量的可选链的语法

总结

熟悉以上的知识点,在表达式绑定和编写自定义代码的时候会非常有用,有时候感觉逻辑写不出来,主要是一些必须掌握的知识点不熟悉导致的。


低代码布道师
分享微搭低代码使用教程,提问交流+知识星球50556232
 最新文章