如何在"双重赋值"中引用值?

时间:2015-07-21 10:04:56

标签: javascript variables syntax

我很好奇,所以我尝试了这个:

var test = example = 5;

现在,这是一种定义事物的常见方式......

(例如在节点中,module.exports = exports = ...

以上相当于:

example = 5;
var test = example;

现在,如果变量实际上不包含值,而是对内存中值的引用,那么当我更改example时,如果test引用了example正在引用一个值,不应该testexample具有相同的值吗?让我们试试吧:

var test = example = 5;
example = 7;

console.log(test, example);

......现在,由于我上面的内容,输出并不是我所期望的。你得到了这个:

5 7

但如果test引用5,而test现在是exampleexample如何7仍然是7?他们都不应该EDIT

var test = example = {"hello":"world", "foo":"bar"}; example = {"test":"example"}; console.log(test, example); 尝试使用对象...但我得到了同样的行为:

Object {hello: "world", foo: "bar"} 
Object {test: "example"}

输出:

import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.rdd.RDD
import org.apache.spark.mllib.util.MLUtils
import org.apache.spark.mllib.regression.LinearRegressionModel
import org.apache.spark.mllib.regression.GeneralizedLinearAlgorithm
import org.apache.spark.mllib.regression.LinearRegressionWithSGD

所以,他们仍然不像我预期的那样。

2 个答案:

答案 0 :(得分:0)

var a = {}; // There is one object in memory
var b = a;  // now both `b` and `a` refer to that object

a = {};     // now we create another object and put a reference to it to an `a`
            // we haven't changed `b` so it refers to the former object

总结一下:在JS中你无法改变另一个变量的值。上面示例中的变量ab的值是引用,而不是对象本身。而改变变量值的唯一方法是重新为其赋值。因此,您无法在JS中间接更改变量的值(?)。

答案 1 :(得分:0)

在谈到java脚本时,变量可以接受多个值。 JavaScript是一种非常“宽容”的语言,让我们这样称呼它。

所以,如果你这样说:

 var test = example = 5;

测试仍然是5,因为测试现在给出了值5.测试只是在这种情况下的参考例子。

示例的实际值是7.

example = 7;

所以是的,它有点奇怪,但javascript的行为与其他编程语言略有不同。