ES2015/2016 way of 'typeof varName === 'undefined`?

泪湿孤枕 提交于 2019-12-03 06:28:11

问题


I'm wallowing in ES2015+ luxury with a few projects right now and am wondering whether I can get rid of the much hated crutch to check for undefined in the new wonderland.

Is there a shorter but still exact way to typeof varName === 'undefined' in ES2015+ already?

Of course I could use default parameters but this also feels like an unnecessary assignment.

function coolFn(a = null){
   if (a===null) console.log("no a supplied");
}

回答1:


Just check for varName === undefined.

In older browsers it was possible to assign an alternate value to the global undefined variable causing that test to fail, but in ES2015+ that's now impossible.

Note that there's no way to distinguish explicitly passing undefined as a parameter from leaving the parameter out altogether other than by looking at arguments.length.




回答2:


The only case where typeof varName === 'undefined' is useful is when you don't know whether the variable varName has been declared.

And IMO if you don't know whether your variables are declared, your code has serious problems.

In other cases you have better options:

  • varName === void 0

    This will detect whether varName is undefined.

    void is an operator which receives an argument (you can use whatever instead of 0), and returns undefined.

  • varName === undefined

    This should detect whether varName is undefined.

    However, be aware the global undefined could have been overwritten (before ES5) or shadowed with another value. Therefore I prefer void, which is also shorter.

  • varName == null

    This will detect whether varName is undefined or is null.

  • !varName

    This will detect whether varName is falsy (undefined, null, 0, empty string, NaN, false).



来源:https://stackoverflow.com/questions/34596489/es2015-2016-way-of-typeof-varname-undefined

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!