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

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

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

var test;
test = 'I will be printed'

该字符串将被打印/返回。

在 JavaScript 中,赋值操作返回赋值。这种行为是根据 ECMAScript 标准还是只是实现?这种行为与其他语言不同,例如c,这背后有什么意图吗?如果是,是什么?

4

2 回答 2

6

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

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

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

它在规范的§11.13.1 中定义:

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

    1. 令lref为评估LeftHandSideExpression的结果。

    2. 令rref为评估AssignmentExpression的结果。

    3. 设rvalGetValue(rref)

    [...]

    6. 返回rval


为什么这种行为与 c 等其他语言不同,这背后有什么意图吗?

我不知道它在 C 中是怎样的,但如果您询问有关某些设计决策的原因,您应该联系 JavaScript 的创建者 Brendan Eich。

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

于 2013-05-29T12:40:07.497 回答
1

支持菲利克斯回答的代码:

if (foo = false) {
    console.log('I am so true!');//won't print
}
if (foo = 0) {
    console.log('I am so true!');//won't print
}
if (foo = undefined) {
    console.log('I am so true!');//won't print
}
于 2013-05-29T12:41:55.240 回答