在JavaScript中使用赋值操作返回指定值的意图/想法是什么?

0xc*_*0de 0 javascript return-value assignment-operator

var foo, bar;
if (foo = true) {
    console.log('I am so true!');
}

if (bar = false) {
    console.log('Why am I not being logged?');
}
Run Code Online (Sandbox Code Playgroud)

同样在JavaScript控制台上,当我这样做时

var test;
test = 'I will be printed'
Run Code Online (Sandbox Code Playgroud)

字符串将被打印/返回.

在JavaScript中,赋值操作返回指定的值.这种行为是根据ECMAScript标准还是只是实施?这种行为与其他语言不同c,这有什么意图吗?如果有,那是什么?

Fel*_*ing 6

在JavaScript中,赋值操作返回什么?

分配的值,即表达式的右侧.

上述行为是根据ECMAScript标准还是只是实现?

在规范的§11.13.1中定义:

生产AssignmentExpression : LeftHandSideExpression = AssignmentExpression评估如下:

    1.让lref成为评估LeftHandSideExpression的结果.

    2.让rref成为评估AssignmentExpression的结果.

    让rval成为GetValue(rref).

    [...]

    6.返回rval.


为什么这种行为与c之类的其他语言不同,这背后是否有任何意图?

我不知道它在C中是怎么回事,但是如果你问某些设计决策的原因,你应该联系JavaScript的创建者Brendan Eich.

FWIW,你可以在其他语言中找到相同的行为,比如PHP和Python(这些是我确定的,我认为 Java的工作方式也是一样).