我今天正在玩一些变量以更好地感受它们,我遇到了一些看起来很特殊的东西。这是JavaScript中的一个例子
var foo = "Sethen";
var bar = foo;
var bar = "Sethen is " + bar;
console.log(bar);
我们得到Sethen is Sethen
的输出,这不是我所期望的。我看到的是对bar
的分配,然后是bar
的另一个分配,它覆盖了bar
值。我希望看到Sethen is Sethen is
。这也发生在PHP中。我在这里缺少一些基本的东西吗?
为什么当Sethen is Sethen
被分配两次时,这可以作为bar
?
答案 0 :(得分:3)
bar
被分配。
许多语言中的大多数赋值运算符在操作顺序方面都具有非常低的优先级。
上有一整个文档答案 1 :(得分:1)
表达“Sethen is”+ bar; 在作业之前执行
答案 2 :(得分:0)
除了运算符优先级之外,您还需要了解运算符关联性 - http://en.wikipedia.org/wiki/Operator_associativity
答案 3 :(得分:0)
当你想用任何语言评估表达式时,编译器(解释器在 js 中)首先评估表达式的计算部分(右侧),然后它将评估值存储(分配)给变量。
在这种情况下,您首先通过"Sethen"
将var bar = foo;
分配给变量栏
在下一行中,您有一个表达式,编译器首先在其中评估"Sethen is " + bar;
,现在(在分配之前)哪个栏保持"Sethen"
。评估将导致"Sethen is Sethen"
。然后编译器分配计算值为bar
变量。在所有步骤之后,当您打印结果时,您会看到"Sethen is Sethen"
。
答案 4 :(得分:0)
step 1:
var foo="sathen";
It store string "sathen" in foo
step 2:
var bar=foo;
bar value contains foos value now bar="sathen" and foo="sathen"
step 3:
var bar= "sathen is " + bar
it will replce the value of bar in right side is "sathen is" +bar value4
"sathen"
So,your ans will come "sathen is sathen"