Array.prototype.with and toSpliced

Changes in new versions / ES2023

// *** before: ***
var arr = [1, 2, 3];
var copy = arr.slice();
copy[1] = 99;

var arr2 = [1, 2, 3, 4];
var withoutMiddle = arr2.slice();
withoutMiddle.splice(1, 2); // splice changes withoutMiddle in place

// *** in version ES2023: ***
const arr = [1, 2, 3];
const copy = arr.with(1, 99); // arr is left unchanged

const arr2 = [1, 2, 3, 4];
const withoutMiddle = arr2.toSpliced(1, 2); // arr2 is left unchanged