我刚开始学习 Dart。
在使用 Dart 之前,我曾使用过 Javascript 并有一些经验。
现在,当我浏览Tutorial Point的文档时。他们提到过这样的事情
dart 中的所有变量都存储对该值的引用,而不是包含该值。名为 name 的变量包含对值为“Smith”的 String 对象的引用。
在 Javascript 中,我猜数组和对象是引用类型。
意思是,如果我们做这样的事情
[更新:] 此代码片段不正确
let a = ["Apple", "orange"]
let b = a
a = ["Bananna"]
console.log(b) //["Bananna"]
Run Code Online (Sandbox Code Playgroud)
但这可能仅适用于 JS 中的对象和数组(而不适用于 const 和 let)
let a = 5
let b = a
a = 7
console.log(b) //5
Run Code Online (Sandbox Code Playgroud)
从报价来看,
dart 中的所有变量都存储了对该值的引用
[问题:]这是否意味着即使像 int、string.. 和我们在 Dart 中创建的每个变量都是引用?并且上述代码的等价物将在 Dart 中打印 7 或者我有什么问题(通常)?
let a = 5
let b = a
a = 7
console.log(b) //7
Run Code Online (Sandbox Code Playgroud)
在 Dart 中,一切都是对象。有些对象是可变的 - 即它们可以被修改,而有些是不可变的,即它们将始终具有相同的值。
当你将与var b = a;双方b并a会引用同一个对象,但名称之间无关联进一步b和a。如果您通过在对象上调用方法或为其分配字段(例如,诸如此类)来改变该对象,List.add那么您将能够通过名称b或a. 如果您分配给,a则该变量b不受影响。这在 javascript 中也是如此。
某些类型(如数字或字符串)显得特殊的原因是它们不能被变异,因此“更改”的唯一方法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]
Run Code Online (Sandbox Code Playgroud)
有突变:
var a = ['Apple', 'Orange'];
var b = a;
a.clear(); // Mutation, the _list instance_ is changed
a.add('Banana') // Another mutation
print(a); // [Banana]
print(b); // [Banana]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2918 次 |
| 最近记录: |