为什么`console.log(x = y)`打印`x`而不是`y`的值?

时间:2015-08-27 11:33:52

标签: javascript

我需要收到反馈并解释我遇到的以下测验:

x = 10, y = 20,最后是x = y

如果我们将xy视为变量而=运算符代表'分配'。 xy的价值是什么?

在对变量和值的了解做了一些基本推理之后,我编写了以下代码:

var y = 10;
var x = 20;
console.log(x = y);

打印出来的结果是20.这个过程和推理是否给出了正确的结果?如果是我了解这个过程,但我不确定结果是20的原因。 我需要一些关于此事的反馈和解释。

5 个答案:

答案 0 :(得分:4)

JavasScript中的赋值操作是一个表达式,它返回的值是操作的右侧。这段代码的输出为10,因为它是y

的值

答案 1 :(得分:1)

你正在做出与众不同的事情。

看到这个小提琴:

http://jsfiddle.net/nowoq16f/

结果是预期的10

var y = 10;
var x = 20;
alert(x = y);

答案 2 :(得分:0)

输出10。

首先将y分配给x

然后输出结果。

答案 3 :(得分:0)

要么你在撒谎,要么你的JavaScript实现被破坏了:)

根据the standard

  

制作AssignmentExpression:LeftHandSideExpression =   AssignmentExpression的评估如下:

     
      
  1. 让lref成为评估LeftHandSideExpression的结果。
  2.   
  3. 让rref成为评估AssignmentExpression的结果。
  4.   
  5. 让rval为GetValue(rref)。
  6.   
  7. 如果满足以下条件,则抛出SyntaxError异常:

         
        
    • Type(lref)是Reference is true
    •   
    • IsStrictReference(lref)为真
    •   
    • 类型(GetBase(lref))是环境记录
    •   
    • GetReferencedName(lref)是“eval”或“arguments”
    •   
  8.   
  9. 调用PutValue(lref,rval)。

  10.   
  11. 返回rval。
  12.   

因此,x = y 应评估为x分配后的值{/ 1>},也就是y的值:{{1 }}

作为旁注,该语言的这一特性对于执行以下操作特别有用:

10

从而将min = max = 0的评估结果分配给min,也就是说max = 0

答案 4 :(得分:-1)

JavasScript中的=运算符将表达式(左侧)分配给运算符的右侧。所以,输出应该是10。