Coffeescript 这是咖啡脚本错误吗?分解与存在算子

Coffeescript 这是咖啡脚本错误吗?分解与存在算子,coffeescript,Coffeescript,以下是coffeescript代码: { baz } = @foo.bar? 产生: var baz; baz = (this.foo.bar != null).baz; 但我希望: var ref, baz; if ((ref = this.foo.bar) != null) { baz = ref.baz; } 这是一个错误还是一种预期行为?我想你把一元数搞错了吧?带二进制数的运算符?。接线员 此表达式的右侧: baz = @foo.bar?.baz { baz } = @foo

以下是coffeescript代码:

{ baz } = @foo.bar?
产生:

var baz;
baz = (this.foo.bar != null).baz;
但我希望:

var ref, baz;
if ((ref = this.foo.bar) != null) {
  baz = ref.baz;
}

这是一个错误还是一种预期行为?

我想你把一元数搞错了吧?带二进制数的运算符?。接线员

此表达式的右侧:

baz = @foo.bar?.baz
{ baz } = @foo.bar?
…使用二进制?。操作人员如您所知,它返回后续属性(如果存在)的值,否则返回null,并中断对其他属性的评估

另一方面,此表达式的RHS:

baz = @foo.bar?.baz
{ baz } = @foo.bar?
…使用一元数?操作人员如果前面表达式的操作数为null或未定义,则返回false,否则返回true


这是一个很容易犯的错误;你可以看到有人问同样的问题。使问题更加复杂的是,CoffeeScript文档甚至没有给这两个操作符起不同的名字。他们打电话?和?。存在运算符的存取器变体。

我想你把一元数弄混了吧?带二进制数的运算符?。接线员

此表达式的右侧:

baz = @foo.bar?.baz
{ baz } = @foo.bar?
…使用二进制?。操作人员如您所知,它返回后续属性(如果存在)的值,否则返回null,并中断对其他属性的评估

另一方面,此表达式的RHS:

baz = @foo.bar?.baz
{ baz } = @foo.bar?
…使用一元数?操作人员如果前面表达式的操作数为null或未定义,则返回false,否则返回true


这是一个很容易犯的错误;你可以看到有人问同样的问题。使问题更加复杂的是,CoffeeScript文档甚至没有给这两个操作符起不同的名字。他们打电话?和?。存在运算符的访问器变量。

只是澄清一下,您是否期望{baz}=@foo.bar?或多或少等同于baz=@foo.bar?.baz?嘿,我希望baz=@foo.bar?.baz等于{baz}=@foo.bar?在我看来是正确的{baz}=qux是baz=qux.baz的捷径。因为qux是@foo.bar?你得到你得到的。只是澄清一下,你是否期待{baz}=@foo.bar?或多或少等同于baz=@foo.bar?.baz?嘿,我希望baz=@foo.bar?.baz等于{baz}=@foo.bar?在我看来是正确的{baz}=qux是baz=qux.baz的捷径。因为qux是@foo.bar?你得到你得到的。