React实战-Js中容易被错用的不变数据
来源:互联网 发布:电路设计仿真软件 编辑:程序博客网 时间:2024/06/04 18:27
React并没有那么突出不可变数据的应用,然而不变数据却是Function Program中核心,Redux则是完全基于Function Program的,在Redux中,我们可以自己去维护函数中的数据边界,小心翼翼的创建一个不受影响的函数式编程数据模型,也可以采用immutable这样简单的使用方式(微信:react-javascript)。
但是我们依然需要对Javascript语言中的不变数据有个清醒的认识,才不至于出现“意外”的错误weixin:react-javascript。
1.Javascript中const定义的局限
如果在Javascript中定义不可变数据,我们可以采用const关键字来定义变量。使得变量不可修改,然而并非是一定的。Javascript中的类型并不多,主要分为基本类型(number,string,boolean),对象(Object,Function)。虽然你都可以定义为const,但基本类型和对象的操作却是不一样的。
a.基本类型定义为const,数据不可改变:
const ci = 3;
const cs = 'chen';
const cb = true;
//以下代码会抛出异常
ci = 8;
cs = 'dd';
cb=false;
b.对象类型定义为const,数据可以改变:
数据对象:
const constP = {
name:'dd',
age:11
}
//运行正常,不会抛出异常。
constP.name = 'ff';
数据列表:
const cl = ['t1','t2','t3'];
//运行正常,不会抛出异常
cl.push('t4');
2.差异分析
定义const的变量确实是不可改变的,之所以会出现以上的情况是因为基本类型变量与数据对象变量存储的信息不一样。
a.基本类型变量存储的是变量值
b.数据对象变量存储的是变量地址,类似于C中的指针。
3.解决方法
要解决数据的可变性,我们有多种方法,主要可以参考以下几种:
a.在function中采用immutable库实现Function Program;
b.在function中采用object.assign函数来实现数据复制;
c.当然可以采用const,只是实用范围为基本类型;
d.采用Object.freeze定义数据对象:
var freezeP = Object.freeze({
name:'dd',
age:11
});
//以下代码不会出现异常,但也不会产生任何效果,freezeP.name依然为’dd’.
freezeP.name = 'ff';
Function Program中不可变数据的实现方式是函数式编程的核心也是目标,使得逻辑更简单、清晰,也更易于测试,将高内聚、低耦合的思想发挥到了极致,换句话来说,函数式编程就是:看好你自己的数据,别动别人的!
- React实战-Js中容易被错用的不变数据
- React实战-React中this的用法
- JS中容易被忽略的基础知识
- js 中容易犯错的变量声明
- js中容易出错的地方
- js中三个容易混淆的东东
- React学习之扩展不变的数据(immutability-helper)优化(三十二)
- C#中将大量不变的数据放入cache中
- 【React Native实战教程】GitHub Trending API数据的获取
- React 的实战
- 使用react.js中遇到的问题
- JS中容易忽略的、毫无技术性、最不容易发现的错误
- React实战-Flux中嵌套action的解决方法
- js基本语法中容易忽视的几个地方
- js中容易被忽视的事件问题总结
- js中容易被忽略的数字类型--Infinity
- js 开发进阶之 开发中容易遇到的问题
- React实战-未来是属于React的
- 由自动装箱和拆箱引发我看Integer源码
- SSH框架搭建和整合(struts2、spring4、hibernate5)
- 第5章 深入理解Android输入系统(节选)
- 【设计模式】—-(8)装饰模式(结构型)
- 蓝桥杯-基础练习 查找整数
- React实战-Js中容易被错用的不变数据
- 字符串数字转换成对应的数值
- 《html》
- NOWL #49
- 【POJ 1456 Supermarket】
- vim改装IDE开发环境
- Java File遍历文件夹
- 中文版_CMOS超大规模集成电路设计第4版
- html