Dart变量存储对值的引用

时间:2019-02-06 02:51:09

标签: javascript dart

我刚刚开始了解Dart。

在Dart之前,我曾使用Javascript并有一些经验。

现在,正当我经历documentation from Tutorial Point时。他们提到了类似

  

dart中的所有变量都存储对该值的引用,而不是   包含值。名为name的变量包含对   一个值为“ Smith”的String对象。

在Javascript中,我猜数组和对象是引用类型。

意思是,如果我们做这样的事情

[更新:]此代码段不正确

let a = ["Apple", "orange"]

let b = a 

a = ["Bananna"] 

console.log(b) //["Bananna"]

但这可能仅适用于JS中的对象和数组(不适用于const和let)

let a = 5
let b = a 
a = 7
console.log(b) //5 

引号

  

dart中的所有变量都存储对该值的引用

[问题:] 这是否意味着即使int,string ..之类的东西以及我们在Dart中创建的每个变量也都是引用?并且上面代码的等效性将在Dart中打印7,或者我弄错了(一般而言)?

let a = 5
let b = a 
a = 7
console.log(b) //7

1 个答案:

答案 0 :(得分:1)

一切都是Dart中的对象。有些对象是可变的,即可以修改,而有些则是不可变的,即它们始终是相同的值。

当您使用var b = a;进行分配时,ba都将引用同一对象,但是名称ba之间没有进一步的关联。如果通过调用对象上的方法或分配对象上的字段(例如,List.add来对该对象进行变异),那么您将能够通过名称{{1 }}或b。如果分配a,则变量a不受影响。在javascript中也是如此。

某些类型(例如数字或字符串)看起来很特殊的原因是它们无法被突变,因此“更改” b的唯一方法是重新分配它,这不会影响a 。其他类型(例如集合)是可变的,因此b将是通过引用该列表的任一变量可见的突变。

例如,分配:

a.add("Banana")

具有突变:

var a = ['Apple', 'Orange'];
var b = a;
a = ['Banana']; // Assignment, no impact to b
print(a); // [Banana]
print(b); // [Apple, Orange]