是否可以在javascript中检查null内联?

dar*_*fin 11 javascript null

我有一个函数可以解析Google Maps API的地址组件, JSON然后返回城市/地区/路线名称.

getAddressComponent()回报null,如果它不能找到问题的关键.

let route = getAddressComponent(addressComponents, 'route').value.long_name;

所以,让我们说它没有找到密钥,然后我Error: TypeError: Cannot read property 'long_name' of undefined明显得到了一个,因为它没有定义.

如何null在条件方法以外的javascript中检查(a === null)

我怎么能这样简单地检查一下 ?

编辑:安全导航操作员

let route = getAddressComponent(addressComponents, 'route')?.value.long_name;

如果它不存在,它可能设置routenull而不是抛出错误?

Gib*_*olt 76

2020 答案,它存在!!!

您现在可以直接使用?.内联来测试是否存在。它被称为Optional Chaining Operator,所有现代浏览器都支持。

如果属性存在,则进行下一次检查,或返回值。任何故障都会立即短路并返回undefined

const example = {a: ["first", {b:3}, false]}

example?.a  // ["first", {b:3}, false]
example?.b  // undefined

example?.a?.[0]     // "first"
example?.a?.[1]?.a  // undefined
example?.a?.[1]?.b  // 3

domElement?.parentElement?.children?.[3]?.nextElementSibling
Run Code Online (Sandbox Code Playgroud)

为确保默认定义值,您可以使用??. 如果您需要第一个真值,您可以使用||.

example?.c ?? "c"  // "c"
example?.c || "c"  // "c"

example?.a?.[2] ?? 2  // false
example?.a?.[2] || 2  // 2
Run Code Online (Sandbox Code Playgroud)

如果不检查 case,则 left-side 属性必须存在。如果没有,它会抛出异常。

example?.First         // undefined
example?.First.Second  // Uncaught TypeError: Cannot read property 'Second' of undefined
Run Code Online (Sandbox Code Playgroud)

?.浏览器支持- 91%,2021 年 8 月

??浏览器支持- 91%

节点支持- v14+

  • 遗憾的是你不能做`?? 抛出新的错误(“...”)`。 (2认同)

Pac*_*ac0 11

  • Javascript(EcmaScript 5或6)中没有"零安全导航操作符",比如?.C#,Angular模板等(有时也称为Elvis操作符?:),至少还不幸.

  • 您可以使用三元运算符null在一行中测试并返回一些依赖表达式,如其他答案中所述: ?:

    (用于=== null仅检查nulls值,并== null检查null undefined)

    console.log(myVar == null ? myVar.myProp : 'fallBackValue');
    
    Run Code Online (Sandbox Code Playgroud)
  • 在某些情况下,和你的一样,当你的变量应该持有时object,你可以简单地使用这样一个事实:任何对象都是 真实的,null而且undefined假的值:

    if (myVar) 
        console.log(myVar.myProp)
    else
        console.log('fallbackValue')
    
    Run Code Online (Sandbox Code Playgroud)

    您可以通过合并到布尔值来测试伪值,!!并使其内联:

    console.log(!!myVar ? myVar.myProp : 'fallbackValue');
    
    Run Code Online (Sandbox Code Playgroud)

    要非常小心,虽然这个"falsy测试",对于如果你的变量0,''或者NaN,那么它是falsy为好,即使它不是空/未定义.


ilk*_*ran 7

下面的代码return num ? num : 0为我简化:

return num || 0;


zab*_*usa 4

let component = getAddressComponent(addressComponents, 'route');
let route = component ? component : null
Run Code Online (Sandbox Code Playgroud)

您可以使用?运算符检查该值true,或者false 然后在 javascript 中设置该nullfalse