javascript - 我应该同时使用 CoffeeScript soaks 和存在运算符吗?

标签 javascript operators coffeescript javascript-objects

我正在编写接受 settings 的脚本对象,但在未提供设置的情况下使用默认值。

我刚刚写了以下 CoffeeScript 行:

iframe_width = settings?.iframe?.width? ? $iframe_body.width()

用简单的英语来说,我的意图是:

If the settings object is defined, and it defines a property iframe, and the iframe property defines a property width, then assign the value of the latter property to the variable iframe_width. Otherwise, assign the value returned by calling $iframe_body.width().

我的 CoffeeScript 代码是否反射(reflect)了我的意图,它是表达意图的最有效方式吗?所有存在运算符 ( ? ) 似乎都很尴尬,所以我想把它放在那里征求一些反馈(编译后的 JavaScript 非常简洁和神秘,所以很难说它是否应该按预期工作)。

此外,我不确定同时使用标准存在运算符 ( ? ) 及其访问器变体 ( ?. ) 是否有任何冗余。

谢谢!


更新:

上面的代码似乎没有按预期工作;然而,这样做:

iframe_width = settings?.iframe?.width ? $iframe_body.width()

这是有道理的,因为我不认为前面的代码实际上访问了 width属性(property),而只是检查它的存在(两次,甚至?)。在此代码中,我删除了 ?width 之后属性,因为我认为这与 ? 是多余的两个表达式之间的运算符。这看起来正确吗?

最佳答案

(注意:这个答案是在问题更新之前写的。正如提问者所意识到的,foo? ?bar 不仅仅是多余的——它实际上不会有效,因为 foo? 的计算结果为 truefalse,因此始终为非 null。)

你有两个很好的选择来简化这个:第一,你可以用 or 替换存在的二元运算符:

iframe_width = settings?.iframe?.width? or $iframe_body.width()

第二,您可以在 width 之后放弃 ?——它是多余的:

iframe_width = settings?.iframe?.width ? $iframe_body.width()

现在,当且仅当 iframe.width 永远不会是 0(因为 0 或 xx)。如果你能确定这一点,那就去做吧

iframe_width = settings?.iframe?.width or $iframe_body.width()

关于javascript - 我应该同时使用 CoffeeScript soaks 和存在运算符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7690512/

相关文章:

javascript - jQuery on click 处理程序未在 asp.net 组件上激活

javascript - 在 AngularJS 中将 PUT 添加到默认的 NG-Resource Actions

javascript - 如何在浏览器中使用 CoffeeScript 正确限定函数范围?

javascript - 带有回调和简化错误处理的 Coffeescript

javascript - 在 polymer dom-repeat 中显示 Firebase 数组结果

javascript - (点击事件后)如何在新选项卡中打开链接列表,并在每次打开后延迟

r - 未找到前向箭头运算符

python ==语法错误

javascript - 按位运算符 x >> 1 和 x >> 0

canvas - Fabric.js 橡皮擦问题 Canvas