以下代码片段安全吗?
function theFunc(arg1, optionalList) {
optionalList = optionalList ? optionalList : [];
//do stuff with arg1 and optionalList
}
我添加了三元来处理未提供 optionalList
的情况(之前提示未定义),并且一位同事指出这不是测试未定义的可接受的方法。
这对我来说很有意义,因为 undefined 应该是 false,但我可以在网上看到人们说总是使用 typeof
的例子。我在 Chrome、FF 和 Edge 上都试过了,似乎没问题。是否有某种原因不使用此方法将可选值默认为空列表?
注意:我支持 IE,不能在参数列表中使用默认值。
最佳答案
问题是,如果 arg2
为 false 但不是未定义(例如,0、空字符串、NaN 或 null),您的逻辑会将其更改为 []
。如果您的 arg2
有机会持有有意义的 falsey 值,您应该将代码更改为
arg2 = typeof arg2 === 'undefined' ? [] : arg2
否则,非未定义的 false 值将被丢弃并替换为 []
。
如果您不担心 undefined
是当前作用域内的变量名称,则可以简化为:
arg2 = arg2 === undefined ? [] : arg2
如果arg2
将总是为真,如果已定义,那么您当前的代码在大多数情况下都很好(但请确保始终使用变量名称arg2
或 optionalList
,但不要混合使用)。
我仍然更喜欢使用默认参数:
function theFunc(arg1, arg2 = []) {
ES6+ 语法允许许多种漂亮而简洁的代码,而这在 ES5 中是不可能的。对于任何大小合理或专业的脚本,设置 Babel 自动将代码转译为 ES5 可能是更好的主意,允许您使用该语言的最新和最好的版本进行编写,而不是强制自己削弱代码的可读性仅使用过时的语法。
关于javascript - 这个三元组可以安全地处理 JavaScript 中的 undefined 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59494983/