val?.toLocaleString() 和使用 if 语句检查 undefined 之间有什么区别

Jon*_*ert 2 javascript if-statement undefined ecmascript-6

我有这个:

\n
return '\xc2\xa3' + val?.toLocaleString();\n
Run Code Online (Sandbox Code Playgroud)\n

检查 val 是否有值,但是我不确定这与以下内容相比有多安全:

\n
if(val) {\n    return '\xc2\xa3' + val.toLocaleString();\n}\nreturn val\n
Run Code Online (Sandbox Code Playgroud)\n

有人可以帮我分析一下这里的差异以及为什么其中一个更好(如果是这种情况的话)吗?

\n

Min*_*ina 7

第一个如果val是,undefined或者它将与null的值连接起来valundefined

\n

\r\n
\r\n
function format(val) {\n  return \'\xc2\xa3\' + val?.toLocaleString();\n}\n\nconsole.log(format())\nconsole.log(format(null))\nconsole.log(format(3))
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n

第二个只有在val是真值时才会进行串联,否则将按val原样返回

\n

请记住,零是一个虚假值。

\n

\r\n
\r\n
function format(val) {\n  if(val) {\n    return \'\xc2\xa3\' + val.toLocaleString();\n  }\n  return val\n}\n\nconsole.log(format())\nconsole.log(format(0))\nconsole.log(format(3))
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n