我刚开始了解达特。
在Dart之前,我使用过Javascript,并有一些经验。
现在,当我在浏览documentation from Tutorial Point时,他们提到了类似的内容
dart中的所有变量都存储对值的引用而不是包含值。名为name的变量包含对值为“Smith”的String对象的引用。
在Javascript中,我猜数组和对象都是引用类型。
意思是,如果我们这么做
[更新:]此代码片段不正确
let a = ["apple", "orange"]
let b = a
a = ["banana"]
console.log(b) //["banana"]
但这可能只适用于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条答案
按热度按时间elcex8rz1#
在 dart 中,每件事物都是一个对象。有些对象是可变的--也就是说它们可以被修改,有些是不可变的,也就是说它们总是相同的值。
当您使用
var b = a;
赋值时,b
和a
将引用同一对象,但是在名称b
和a
之间没有进一步的关联。如果您通过调用Object上的方法或为Object上的字段赋值来 * 改变 * 该Object(例如List.add
),那么你就可以通过名称b
或a
来观察变异对象。如果你 * 赋值 * 变量a
,那么变量b
不受影响,这在javascript中也是一样的。有些类型,如数字或字符串,看起来特别的原因是它们不能被改变,所以“改变”
a
的唯一方法是重新分配它,这不会影响b
。其他类型,如集合,是可变的,所以a.add("Banana")
是一个变化,通过引用该列表的任何变量都可以看到。例如,对于赋值:
有突变: