Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Immutable.js的实际情况是什么?_Javascript_Immutability_Immutable.js - Fatal编程技术网

Javascript Immutable.js的实际情况是什么?

Javascript Immutable.js的实际情况是什么?,javascript,immutability,immutable.js,Javascript,Immutability,Immutable.js,我理解JS中不变性的好处。但是,使用特定的库无法获得任何好处 在图书馆的主页上有一个很好的“不变性的案例”段落,但对“不可变的案例.js”并没有明确的答案 我的意思是,要在JS应用程序中实现不变性,您应该只保留简单的模式,如Object.prototype.assign,Array.prototype.concat,即不直接修改数据,而是返回一个不接触源的新副本 为什么我更喜欢Immutable.List而不是本机数组,Immutable.Map而不是ES6Map等等 这是一个自我约束的问题吗?

我理解JS中不变性的好处。但是,使用特定的库无法获得任何好处

在图书馆的主页上有一个很好的“不变性的案例”段落,但对“不可变的案例.js”并没有明确的答案


我的意思是,要在JS应用程序中实现不变性,您应该只保留简单的模式,如
Object.prototype.assign
Array.prototype.concat
,即不直接修改数据,而是返回一个不接触源的新副本

为什么我更喜欢
Immutable.List
而不是本机数组,
Immutable.Map
而不是ES6
Map
等等

这是一个自我约束的问题吗?如果是这样,我是否应该忘记应用程序中的本机数据结构,而只使用Immutable.js替代方案

这是实现更高生产率的一种开销(在速度和硬件资源方面)

它是避免错误和降低应用程序状态复杂性的高级工具吗


我的意思是,要在JS应用程序中实现不变性,您应该只保留简单的模式,如
Object.prototype.assign
Array.prototype.concat
,即不直接修改数据,而是返回一个不接触源的新副本

要是就这么简单就好了

包含要连接的数组的数组
var a=[[1]];
var b=[[2]];
var c=a.concat(b);
c[0].推送(42);
log(“数组c包含”,c);

log(“数组a包含”,a)object.prototype.assign
Array.prototype.concat
”,但这还不够,而且不简单。如果你把这些数组看作
a=[[1,2,3]];b=[[4,5,6]]
新结果仍将指向与以前相同的内部数组。如果您尝试
对象,也会发生同样的情况;b={company:{name:“ACME”}}
-结果将指向相同的内部对象,因此对它们的任何操作都将操作原始对象。这是一个非常详细的答案。我真的很感激。你已经回答了我所有我没有问过的问题。我最初的设想是通过使用一些协议来简化事情,比如使用非破坏性的方法,比如
Array.prototype.concat
,而不是
Array.prototype.push
,这是过于乐观和乌托邦式的。其他开发人员和他们的第三方LIB可以也会这样做,当然,我也可以忘记它。>但这还没有涉及到不变性,这是Immutable.js提供的主要功能,而不仅仅是一个花哨的克隆实用程序。它还提供了从FP-world派生的强大的util和数据结构,比如
Range
Seq
?这是一个完全不同的问题。好吧,我的选择是保持事物的一致性,因此选择这种约束(相对于原生约束,Immutable.js数据结构是不变的)应该消除对替代或混合选项的任何疑虑。它还应该使JS工作流更接近Clojure is。@vlaz AFAIK immutbale.JS的持久数据结构只是表面上不可变的。lib的巨大优势不是它的克隆机制,而是结构共享,这使得克隆在许多情况下是不必要的,并且允许引用相等性检查。定期在immutable.js和本机Javascript类型之间转换是一个缺点。