使用默认值的逻辑测试结果
Using result of logical tests for default values
这更多的是一个"战壕经验"问题。
给定这段javascript
/**
* @param [foo]
* {Object} an optional object (it can be null, undefined, empty, etc..)
* @param [foo.bars]
* {Array} an Array that *might* be in the object
*/
function (foo) {
// I want to get the array, or an empty array in any
// of the odd cases (foo is null, undefined, or foo.bars is not defined)
var bars = [];
if (foo && foo.bars) {
bars = foo.bars
}
// ....
}
我正试着把它缩短;根据MDN,应该可以写:
function (foo) {
var bars = (foo && foo.bars) || [];
// ...
}
我是否缺少一个不起作用的案例(值集或其他浏览器)?有没有更短/更干净的方法可以做到这一点?
在一个更主观的节点上,你会认为这是不可读的吗?
感谢
这是一种非常有效的方法,只要你知道foo.bars
从来没有被定义为不是数组的真值(比如foo = {bars: 1})
.
它不是不可读的,因为大多数Javascript开发都熟悉&&
和||
的工作方式,并一直使用它们来分配默认值。
我一点都不喜欢它。对于传统的程序员来说,如果(foo&&foo.bars)的计算结果为true,那么它的读取结果就好像是true一样,否则它将是一个空数组。
我更希望看到以下内容:
var bars = (foo && foo.bars) ? foo.bars : [];
相关文章:
- 我的shareService在angular 2中发送值工作正常,但当我渲染我的另一个组件时,会获得默认值
- jquerydatetimepicker日期和时间应在框默认值中,而无需单击框
- 如果值为空,如何设置输入的默认值?jQuery
- 骨干模型默认值-todos.js示例中不必要的代码
- jquery日期选择器年份范围默认值
- Html5输入属性的默认值,如最小值、最大值、大小等
- 根据两个下拉列表的默认值禁用按钮
- 如何创建具有默认值的JavaScript对象字段?(AngularJS模型相关)
- Angularjs-设置不带ng选项的select的默认值
- jQuery Datepicker从日期开始设置默认值
- 如何设置浏览器打开的文件对话框的文件名(一些默认值)
- JQuery BlockUI鼠标加载光标没有't在Google Chrome中返回默认值
- Selectize选择默认值
- 在KeystoneJS中为Types.Money设置默认值
- 是否可以同时为一个元素的所有事件指定阻止默认值
- 防止在IE7中按回车键时出现默认值
- 如何覆盖jqGrid's语言默认值
- 如何为显示jquery滑块值的文本框设置默认值
- 有什么方法可以在超级测试中设置默认值吗
- 使用默认值的逻辑测试结果