济南建设网站需要,品牌设计包括哪些方面,中山专业门户网站制作咨询,电子商务网站建设的课程论文#x1f974;博主#xff1a;小猫娃来啦 #x1f974;文章核心#xff1a;优雅而高效的JavaScript——?? 运算符、?. 运算符和 ?. 运算符 文章目录 引言空值处理的挑战解决方案1#xff1a;?? 运算符基本用法与 || 运算符的区别实际应用场景举例 解决方案2#xff… 博主小猫娃来啦 文章核心优雅而高效的JavaScript——?? 运算符、?. 运算符和 ?. 运算符 文章目录 引言空值处理的挑战解决方案1?? 运算符基本用法与 || 运算符的区别实际应用场景举例 解决方案2?. 运算符基本用法与 . 运算符的区别实际应用场景举例 解决方案3?. 运算符的进一步简化?..基本用法实际应用场景举例 总结 引言
JavaScript作为一种广泛使用的脚本语言不断演进发展。ECMAScript 2020ES2020标准引入了三个新的语法特性?? 运算符、?. 运算符和 ?. 运算符用于简化代码编和处理可能的空值情况。我们会通过本篇博客深入分析这些新的语法特性并通过举例和代码演示来解释它们的用法和实际应用场景。 空值处理的挑战
在编程中经常会遇到处理可能为空的值的情况例如在访问对象属性或调用函数时。在传统的JavaScript中我们通常使用长短路运算符如或条件语句如if-else来处理空值情况。然而这些方法在编写代码时会显得冗长可读性较差并且容易出错。为了解决这个问题ES2020引入了新的语法特性。 解决方案1?? 运算符
基本用法
?? 运算符空值合并运算符可以用来判断一个值是否为null或undefined并提供一个默认值。其语法为value1 ?? value2如果value1是null或undefined则返回value2否则返回value1的值。
下面是一个示例代码
const x null;
const y 10;
const result x ?? y;console.log(result); // 输出 10在这个例子中由于x是null以返回了y的值。
与 || 运算符的区别
?? 运算符与 || 运算符类似但它们有一些重要的区别。|| 运算符只能判断一个值是否为 “false”例如null、undefined、false、0、‘’而 ?? 运算符能够精确地判断一个值是否为null或undefined。
下面是一个对比例子
const x 0;
const y 10;
const result1 x || y; // 使用 || 运算符
const result2 x ?? y; // 使用 ?? 运算符console.log(result1); // 输出 10
console.log(result2); // 输出 0在这个例子中由于x的值为0它被判定为 “falsy” 值所以使用 || 运算符时返回了y的值而使用 ?? 运算符时返回了的值。
实际应用场景举例
表单输入默认值
const username getInputValue(username) ?? 加菲猫;在这个例子中如果getInputValue(‘username’)返回的值为null或undefined则username会被设置为加菲猫作为默认值。
函数参数默认值
function greet(name) {name ?? 加菲猫;console.log(Hello, ${name});
}在这个例子中如果没有传入name参数或传入的值为null或undefined则name会被设置为加菲猫作为默认值。 解决方案2?. 运算符
基本用法
?. 运算符可选链运算符可以简化对可能为null或undefined的值进行属性访问或方法调用的代码。其语法为object?.property 或 object?.method()。
下面是一个示例代码
const obj {foo: {bar: 咕咕}
};const result obj?.foo?.;console.log(result); // 输出 咕咕在这个例子中由于obj.foo.bar存在所以返回了其值咕咕。
与 . 运算符的区别
?运算符与.运算符类似但它们之间有一些关键的区别。如果对象的某个属性或方法不存在. 运算符会抛出一个TypeError而?. 运算符会返回undefined不会导致程序崩溃。
下面是一个对比例子
const obj {foo: null
};const result1 obj.foo.bar; // 使用 . 运算符
const result2 obj?.foo?.bar; // 使用 ?. 运算符console.log(result1); // TypeError: Cannot read property bar of null
console.log(result2); // 输出 undefined在这个例子中虽然obj.foo存在但它的值为null所以使用. 运算符对bar进行访问抛出TypeError而使用?. 运算符时返回了undefined。
实际应用场景举例
链式对象访问
const user {name: 加菲猫,address: {street: 东大街,city: 陕西}
};const city user.address?.city;在这个例子中如果user.address存在则city被为其值否则city将为undefined。
安全地调用函数
const handler obj?.method?.();在这个例子中如果obj.method存在则会调用它并将返回值赋给handler变量否则handler将为undefined。 解决方案3?. 运算符的进一步简化?..
基本用法
?. 运算符的进一步简形式是?.. 通过将两个运算符组合在一起可以更加简洁地处理链式对象访问或函数调用的情况。其语法object?.property 或 object?..method()。
下面是一个示例代码
const user {name: John,address: {street: 东大街,city: 陕西}
};const city user?..address?.city;console(city); // 输出 陕西在这个例子中由于user.address.city存在所以返回了其值New York。
实际应用场景举例
链式对象访问
const user {name: 加菲猫,address: {street: 东大街,city: 陕西}
};const city user?..address.city;在这个例子中如果user存在且address存在则city被设置为其值否则city将为undefined。
安全地调用函数
const handler obj?..method();在这个例子中如果obj存在且method存在则会调用它并将返回值赋给handler变量否则handler将为undefined。 总结
本文通过对新的JavaScript语法特性??运算符、?.运算符和?..运算符进行深度横向纵向分析分别介绍了它们的基本用法、与其他运算符的区别以及实际应用场景。这些新的语法特性在处理可能的空值情况时能够大大简化代码并提高代码的可读性和健壮性。在日常的JavaScript开发中合理使用这些语法特性将有助于提高开发效率和代码质量。