我刚刚开始了解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
答案 0 :(得分:1)
一切都是Dart中的对象。有些对象是可变的,即可以修改,而有些则是不可变的,即它们始终是相同的值。
当您使用var b = a;
进行分配时,b
和a
都将引用同一对象,但是名称b
和a
之间没有进一步的关联。如果通过调用对象上的方法或分配对象上的字段(例如,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]