operators - "||="运算符与 CoffeeScript 中的 "?="有何不同?

标签 operators coffeescript assignment-operator

这两者有什么区别?来自Ruby,我习惯了apple ||= walrus仅当 apple 为空时,才将 apple 设置为等于 walrus。这在 JS/CS 中似乎是一样的,尽管 ?= 似乎做同样的事情。让我困惑的是:

apple = 0
walrus = 9
apple ?= walrus // outputs 0
apple ||= walrus // outputs 9

最佳答案

最好的办法是查看生成的 JS。

CoffeeScript :

apple = 0
walrus = 9
apple ?= walrus // outputs 0
apple ||= walrus // outputs 9

JavaScript:
var apple, walrus;
apple = 0;
walrus = 9;
if (apple == null) apple = walrus;
apple || (apple = walrus);

如您所见,?=明确检查某事是 nullundefined在 JS 中。这与 ||= 非常不同。这仅取决于 apple是一个假值。

进一步扩展apple ||= walrus等同于 apple = apple || walrus ,所以任何真实的apple值都会使逻辑短路,不会改变apple的值。

关于operators - "||="运算符与 CoffeeScript 中的 "?="有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10464891/

相关文章:

java - Java枚举是否有增量运算符++?

Java 简单框架与 Coffeescript

c++ - 从赋值运算符调用析构函数有什么意想不到的后果吗?

C++ copy-construct 构造和赋值问题

javascript - 为什么是 {} < function(){}?

python - 按字符串名称以编程方式查找运算符

javascript: !( booleanCondition() ) vs ( booleanCondition() == false )

Javascript concat 不适用于 JSON 对象

javascript - 主干 View 上没有方法 `apply`

c++ - 复制构造函数和动态分配