首页 >web前端 >js教程 >JavaScript中的不变性

JavaScript中的不变性

William Shakespeare
William Shakespeare原创
2025-02-20 11:59:11440浏览

Immutability in JavaScript

不变性:功能编程的基石,也为面向对象的编程提供了重要的优势。本文探讨了JavaScript中的不变性,详细介绍了其实施和收益。

密钥概念:

  • 不变性:>创建后,不变的对象的状态保持不变。这与可变的对象形成对比,其状态可以修改。 在JavaScript中,诸如字符串和数字之类的原语是不变的,而阵列和对象是可变的。
  • 不变的数据结构:
  • 使用数组和对象实现不变性,需要在修改时创建新实例,而不是更改原始实例。 JavaScript缺乏内置的支持,因此需要像Mori或Invractable.js。 性能:
  • 最初出现记忆密集型,但不变性通常会通过“结构共享”来增强性能。 它还简化了更改跟踪,在UI框架中至关重要。
  • >
  • 理解不可变性:> 简单地说,
可变性意味着某些事情可能会改变。 在编程中,可变的对象允许对其状态进行更改。 不变性恰恰相反:创建后不变的值保持恒定。 许多共同的价值是不可变的。例如:

是一个新字符串;

保持不变。 字符串方法创建新字符串;他们不修改原始内容。这是因为字符串是不变的。数字共享此特征。

JavaScript中的
<code class="language-javascript">const statement = "I am an immutable value";
const otherStr = statement.slice(8, 17); </code>

可突变性:otherStr> JavaScript的内置字符串和数字是不可变的。但是,阵列是可变的:statement

的行为会有所不同:

同样,当属性为“设置”时,

(替换对象)将返回一个新对象
<code class="language-javascript">let arr = [];
let v2 = arr.push(2); // arr is modified; v2 holds the new length</code>
实践中的不变性(使用不变。

>由于JavaScript缺乏天然不变的结构,因此我们使用像Inmuthable.js这样的库。 让我们考虑一个扫雷游戏示例。董事会是一张不变的地图,ImmutableArray是不可变的地图列表(每个瓷砖)。 初始化使用

's
<code class="language-javascript">const arr = new ImmutableArray([1, 2, 3, 4]);
const v2 = arr.push(5);

arr.toArray(); // [1, 2, 3, 4]
v2.toArray();  // [1, 2, 3, 4, 5]</code>
函数:

ImmutableMap

>游戏逻辑功能采用不变的结构,返回新实例。
<code class="language-javascript">const person = new ImmutableMap({name: "Chris", age: 32});
const olderPerson = person.set("age", 33);

person.toObject(); // {name: "Chris", age: 32}
olderPerson.toObject(); // {name: "Chris", age: 33}</code>
标志着揭示的瓷砖。 使用可变的数据:

有了不变的数据,我们使用

> tiles immutable.jsfromJS返回一个新的不变实例。 为了鲁棒性,我们可以使用

>检查瓷砖的存在
<code class="language-javascript">function createGame(options) {
  return Immutable.fromJS({
    cols: options.cols,
    rows: options.rows,
    tiles: initTiles(options.rows, options.cols, options.mines)
  });
}</code>

revealTile性能考虑:

<code class="language-javascript">function revealTile(game, tile) {
  game.tiles[tile].isRevealed = true; //Direct mutation
}</code>
在创建新对象的同时,“结构共享”在创建新对象时,将内存开销最小化。 不可分率的好处通常超过了性能的影响。

改进的变更跟踪:>

不变性简化了UI框架中的更改跟踪。 比较参考()有效地确定状态是否已更改。

结论:

不变性提高了代码质量和可维护性。 在需要学习曲线的同时,其收益通常大于最初的挑战。 探索一个完整的扫雷示例所提供的Codepen(原始文本中未提供的链接)。 a === b

(FAQS部分为简洁而删除,因为它是主要文本中已经存在的信息的重复。如果您愿意包含它,请告诉我。)

以上是JavaScript中的不变性的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn