Javascript中是否有空合并运算符?

例如,在C#中,我可以这样做:

String someString = null;
var whatIWant = someString ?? "Cookies!";

我可以为Javascript找到的最佳近似是使用条件运算符:

var someString = null;
var whatIWant = someString ? someString : 'Cookies!';

这有点讨厌IMHO。我能做得更好吗?


当前回答

在阅读了您的澄清之后,@Ates Goral的回答提供了如何在JavaScript中执行您在C#中执行的相同操作。

@Gumbo的答案提供了检查空值的最佳方法;然而,注意JavaScript中==与==的区别很重要,特别是在检查未定义和/或null时。

这里有一篇关于两个术语的区别的非常好的文章。基本上,请理解如果使用==而不是==,JavaScript将尝试合并正在比较的值,并在合并后返回比较结果。

其他回答

注意,React的create-React-app工具链支持自3.3.0版(发布于5.12.2019)以来的空合并

可选的链接和空合并运算符我们现在支持可选的链接和无效合并运算符!//可选链接一(); // 如果“a”为空/未定义,则为undefinedbc、 //如果“b”为空/未定义,则未定义//空聚结未定义??'其他默认值';//result:'其他默认值'空??'其他默认值';//result:'其他默认值''' ?? '其他默认值';//结果:“”0 ?? 300; // 结果:0假的??真;//结果:false

也就是说,如果你使用create-react-app3.3.0+,你可以开始在你的react应用中使用空联合运算符。

是的,它很快就要来了。请参阅此处的提案和此处的实施状态。

它看起来像这样:

x ?? y

实例

const response = {
  settings: {
    nullValue: null,
    height: 400,
    animationDuration: 0,
    headerText: '',
    showSplashScreen: false
  }
};

const undefinedValue = response.settings?.undefinedValue ?? 'some other default'; // result: 'some other default'
const nullValue = response.settings?.nullValue ?? 'some other default'; // result: 'some other default'
const headerText = response.settings?.headerText ?? 'Hello, world!'; // result: ''
const animationDuration = response.settings?.animationDuration ?? 300; // result: 0
const showSplashScreen = response.settings?.showSplashScreen ?? true; // result: false

使用Babel的用户需要升级到最新版本才能使用零合并(??):

Babel 7.8.0默认支持新的ECMAScript 2020功能:不需要启用单独的插件来进行无效合并(??),可选的链接(?.)和动态导入()不再带有预设env

从…起https://babeljs.io/blog/2020/01/11/7.8.0

需要支持旧浏览器并具有对象层次结构

body.head.eyes[0]  //body, head, eyes  may be null 

可以使用此,

(((body||{}) .head||{}) .eyes||[])[0] ||'left eye'

请注意null的JavaScript特定定义。javascript中“无值”有两个定义。1.空:当变量为空时,表示该变量中不包含数据,但该变量已在代码中定义。这样地:

var myEmptyValue = 1;
myEmptyValue = null;
if ( myEmptyValue === null ) { window.alert('it is null'); }
// alerts

在这种情况下,变量的类型实际上是Object。测试它。

window.alert(typeof myEmptyValue); // prints Object

未定义:当一个变量之前没有在代码中定义,并且正如预期的那样,它不包含任何值。这样地:如果(myUndefinedValue==undefined){window.alert('it is undefined');}//警报

如果是这种情况,则变量的类型为“undefined”。

注意,如果您使用类型转换比较运算符(==),JavaScript将对这两个空值起同等作用。要区分它们,请始终使用类型严格比较运算符(==)。