不變性:功能編程的基石,也為面向對象的編程提供了重要的優勢。本文探討了JavaScript中的不變性,詳細介紹了其實施和收益。
密鑰概念:
是一個新字符串;
保持不變。 字符串方法創建新字符串;他們不修改原始內容。這是因為字符串是不變的。數字共享此特徵。
JavaScript中的const statement = "I am an immutable value"; const otherStr = statement.slice(8, 17);
可突變性:otherStr
>
JavaScript的內置字符串和數字是不可變的。但是,陣列是可變的:statement
的行為會有所不同:
同樣,當屬性為“設置”時,
(替換對象)將返回一個新對象let arr = []; let v2 = arr.push(2); // arr is modified; v2 holds the new length
>由於JavaScript缺乏天然不變的結構,因此我們使用像Inmuthable.js這樣的庫。 讓我們考慮一個掃雷遊戲示例。董事會是一張不變的地圖,ImmutableArray
是不可變的地圖列表(每個瓷磚)。 初始化使用
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]
ImmutableMap
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}
有了不變的數據,我們使用
:>
tiles
immutable.js
fromJS
返回一個新的不變實例。 為了魯棒性,我們可以使用
function createGame(options) { return Immutable.fromJS({ cols: options.cols, rows: options.rows, tiles: initTiles(options.rows, options.cols, options.mines) }); }
revealTile
性能考慮:
function revealTile(game, tile) { game.tiles[tile].isRevealed = true; //Direct mutation }
不變性簡化了UI框架中的更改跟踪。 比較參考()有效地確定狀態是否已更改。
結論:
不變性提高了代碼質量和可維護性。 在需要學習曲線的同時,其收益通常大於最初的挑戰。 探索一個完整的掃雷示例所提供的Codepen(原始文本中未提供的鏈接)。
a === b
以上是JavaScript中的不變性的詳細內容。更多資訊請關注PHP中文網其他相關文章!