我经常做这样的事情:
delay = delay || 24; // default delay of 24 hours
Run Code Online (Sandbox Code Playgroud)
但我实际上想要允许0,而0 || 24 === 24不是0.
我想知道最好的模式是从命令行获取用户输入,或者从哪里输入,并执行相同的逻辑,只将零视为真实.我认为我发现的最佳模式就是这样做:
delay = (delay === 0 ? delay : (delay || 24));
Run Code Online (Sandbox Code Playgroud)
首先,它允许这样的事情'abc',这是非常错误的.但是如果我早点放进+去就可以null滑过,这也是错误的.其次,非常难看,因为它明显地解决了语言缺陷,而不是使用可用的语言工具做一些优雅的事情.而且不是非常可读.我正在做一些思路,我想在一个实际的代码行中做这件事(在技术性方面不是一行,就像这样).但是我得到的大多数其他想法都变得更加丑陋:
delay = typeof delay === 'number' ? delay : 24; // but typeof NaN === 'number', so
delay = (!isNaN(delay) && typeof delay === 'number') ? delay : 24;
Run Code Online (Sandbox Code Playgroud)
请注意,这实际上适用于字符串 - 如果我有兴趣接受"",那么
str = typeof str === 'string' …Run Code Online (Sandbox Code Playgroud)