从JS对象开始_谈一谈究竟什么是“不可变数据”和函数式编程
2017-06-27 00:00
337 查看
摘要: JS中的对象是那么美妙:我们可以随意复制他们,改变并删除他们的某项属性等。但是要记住一句话: “伴随着特权,随之而来的是更大的责任。” (With great power comes great responsibility)
作为前端开发者,你会感受到JS中对象(Object)这个概念的强大。我们说“JS中一切皆对象”。最核心的特性,例如从String,到数组,再到浏览器的APIs,对象这个概念无处不在。这里你可以了解到JS Objects中的一切。
同时,随着React的强势崛起,不管你有没有关注过这个框架,也一定听说过一个概念—不可变数据(immutable.js)。究竟什么是不可变数据?这篇文章会从JS源头—对象谈起,让你逐渐了解这个函数式编程里的重要概念。
JS中的对象是那么美妙:我们可以随意复制他们,改变并删除他们的某项属性等。但是要记住一句话:
“伴随着特权,随之而来的是更大的责任。”
(With great power comes great responsibility)
的确,JS Objects里概念太多了,我们切不可随意使用对象。下面,我就从基本对象说起,聊一聊不可变数据和JS的一切。
这篇文章缘起于Daniel Leite在本月16日的文章:Things you should know about Objects and Immutability in JavaScript,我进行了翻译,并改写了用到的例子,以及进行了大量更多的扩展。
这个问题可能很多程序员都会有。其实,如果你的代码逻辑可变,这并不是“政治错误”的。比如JS中的数组操作,很对都会对原数组进行直接改变,这当然并没有什么问题。比如:
let arr = [1, 2, 3, 4, 5];
arr.splice(1, 1); // 返回[2];
console.log(arr); // [1, 3, 4, 5];
这是我们常用的“删除数组某一项”的操作。好吧,他一点问题也没有。
问题其实出现在“滥用”可变性上,这样会给你的程序带来“副作用”。先不必关心什么是“副作用”,他又是一个函数式编程的概念。
作为前端开发者,你会感受到JS中对象(Object)这个概念的强大。我们说“JS中一切皆对象”。最核心的特性,例如从String,到数组,再到浏览器的APIs,对象这个概念无处不在。这里你可以了解到JS Objects中的一切。
同时,随着React的强势崛起,不管你有没有关注过这个框架,也一定听说过一个概念—不可变数据(immutable.js)。究竟什么是不可变数据?这篇文章会从JS源头—对象谈起,让你逐渐了解这个函数式编程里的重要概念。
JS中的对象是那么美妙:我们可以随意复制他们,改变并删除他们的某项属性等。但是要记住一句话:
“伴随着特权,随之而来的是更大的责任。”
(With great power comes great responsibility)
的确,JS Objects里概念太多了,我们切不可随意使用对象。下面,我就从基本对象说起,聊一聊不可变数据和JS的一切。
这篇文章缘起于Daniel Leite在本月16日的文章:Things you should know about Objects and Immutability in JavaScript,我进行了翻译,并改写了用到的例子,以及进行了大量更多的扩展。
可变和共享是万恶之源
不可变数据其实是函数式编程相关的重要概念。相对的,函数式编程中认为可变性是万恶之源。但是,为什么会有这样的结论呢?这个问题可能很多程序员都会有。其实,如果你的代码逻辑可变,这并不是“政治错误”的。比如JS中的数组操作,很对都会对原数组进行直接改变,这当然并没有什么问题。比如:
let arr = [1, 2, 3, 4, 5];
arr.splice(1, 1); // 返回[2];
console.log(arr); // [1, 3, 4, 5];
这是我们常用的“删除数组某一项”的操作。好吧,他一点问题也没有。
问题其实出现在“滥用”可变性上,这样会给你的程序带来“副作用”。先不必关心什么是“副作用”,他又是一个函数式编程的概念。
![](https://static.oschina.net/uploads/space/2017/0627/163419_KmQ2_3472227.png)
相关文章推荐
- 从JS对象开始_谈一谈究竟什么是“不可变数据”和函数式编程
- 很多情况下,js代码中的object对象,alert的话,弹出是不可读的[object][object],这里面究竟是什么呢?
- 由alert出来的对象是[object object],就感觉不知所措,而进一步思考,对象究竟是什么?即变成语言(如js、java、c等任意语言)中的变量,究竟是什么东西?
- js对象转化成json数据格式
- 向一个table 插入数据的时候,为什么会从该table所分配的第四个block开始,预留的3个block是干什么用的?
- Node.js 究竟是什么?
- Node.js 究竟是什么?
- 【转】Node.js 究竟是什么
- 元数据究竟能做什么
- js声明数组、对象在jsp页面中(获得ajax得到json数据)
- java 的构造器是干什么用的,初始化对象,还是初始化数据,默认的无参构造器,和有参构造器的区别,找高手解答
- Node.js究竟是什么?
- [转]js对象序列化成json数据
- oracle10g- oracle 一个特殊的应用 :复合数据 也叫记录 像一个js临时对象
- swfobject.js,这个JS究竟有什么作用呢
- Node.js 究竟是什么--Node 是一个服务器程序
- 向一个table 插入数据的时候,为什么会从该table所分配的第四个block开始,预留的3个block是干什么用的?
- Node.js 究竟是什么?
- 【转】Node.js 究竟是什么?
- Node.js 究竟是什么?