es6还欠完善的地方
const的可变性
const用于声明常量。
什么是常量,声明后的值不可更改。
对于值类型,比如string,number等等。const声明确实有效。
const str = "string";
str = 1; // Uncaught TypeError: Assignment to constant variable.
对于引用类型,比如array,object。const声明只保证了引用不可更改,但保证不了其内容。
const arr = [];
arr.push(1); // 不报错
arr; // [1]
const obj = {};
obj.test = 1; // 不报错
obj; // Object {test: 1}
arr = 1; // Uncaught TypeError: Assignment to constant variable.
obj = 1; // Uncaught TypeError: Assignment to constant variable.
为了保证array和object的内容也不可更改。我可以使用Object.freeze方法。
const arr = [1];
Object.freeze(arr);
arr.push(1); // Uncaught TypeError: Can't add property 1, object is not extensible
arr[0] = 9; // arr[0]的值仍是1,但这条语句不会报错。
arr[0]; // 1
const obj = {};
Object.freeze(obj);
obj.a = 3; // obj的值仍是{},但这条语句不会报错。
obj; // {}
应该报错的地方,不去报错,有隐患。
隐患在于排查bug困难。
并且,Object.freeze只能锁定对象的一级值属性。
const obj = {a: {}};
Object.freeze(obj);
obj.a.b = 1;
obj; // {a: {b: 1}}
这样看来原生,并没有提供一个好的const解决方案。
直的不行,我们弯的来。
参考Facebook的immutable-js,
以及这篇文章也可一看。
没有return语句的函数
JS里面的函数允许没有return语句,它会默认返回undefined。
var a = 1;
var fn = function(){};
a = fn();
a; // undefined
如果你的return是写在分支中,没有被执行到,便会有隐患。
箭头函数可读性不高
ES6还允许使用箭头函数。情况更加糟糕。
const isEven = n => n % 2 == 0;
// 等同于
const isEven = function(n){
return (n % 2) == 0;
};
箭头函数写起来更加简洁,阅读起来则更加费脑。
es6还欠完善的地方的更多相关文章
- 造轮子,模仿WPF的UI框架,还没完善。。。
Wtf(暂时命名,随便起的 = _=),模仿WPF的框架,还没有完善,只有简单的基础元素,支持数据绑定.虽然支持mono但是mono有bug 写这个只是兴趣爱好,感觉也没多大意义了,如果这个UI框架完 ...
- 我的第一个jQuery插件开发(日期选择器,datePicker),功能还不完善,但用于学习参考已经足够了。
一.学习jQuery插件开发网上的帖子很多,插件开发的方式也有好几种,现在推荐一个帖子讲述的特别好,我也是这篇文张的基础上学习的. 参考:http://www.cnblogs.com/ajianbey ...
- Python之关于量化投资实现代码--根据策略提出的代码--还未完善
# 根据缺口的模式选股买股票 ''' -------------------------------------------- 1.总体回测前要做的事情 initialize(context) 1.1 ...
- mysql导入备份.sql文件时报错总结(还有待完善)
错误1:ERROR Unknown character set: 'utf8mb4' utf8mb4编码集支持了表情符号,相信处理过社交网络数据的人都有了解.这个mysql5.5以后支持了utf8mb ...
- hashmap简单实现
p.p1 { margin: 0; font: 11px Monaco } p.p2 { margin: 0; font: 11px Monaco; min-height: 15px } p.p3 { ...
- arcgis api for flex之专题图制作(饼状图,柱状图等)
最近公司给我一个任务,就是利用arcgis api for flex实现在地图上点(业务数据)直接显示饼状图以及柱状图的专题图制作,而不是通过点击点显示气泡窗口的形式来实现,这个公司已经实现了. 经过 ...
- 关于Java导出100万行数据到Excel的优化方案
1>场景 项目中需要从数据库中导出100万行数据,以excel形式下载并且只要一张sheet(打开这么大文件有多慢另说,呵呵). ps:xlsx最大容纳1048576行 ,csv最大容纳1048 ...
- android.graphics包中的一些类的使用
游戏编程相关参考 Matrix学习系列: http://www.moandroid.com/?p=1781 Android画图学习总结系列: http://www.moandroid.com/?p=7 ...
- C#判断画的图形是不是三角形
这个源代码写的不是十全十美,只是提供一个 还待完善的地方例如判断是否这个图形是封闭的.得空在解决吧 这只是一个算法上 谁有c#的参考手册网盘分享一份 谢谢 下面请看源码 凑够150个字了,不废话了. ...
随机推荐
- ACM-ICPC LA 4329 Ping pong(树状数组)
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- Java中Comparable和Comparator接口区别分析
Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comp ...
- WebApi 通过类名获取类并实例化
环境:Web Api 返回值类型为DTO实体,继承基类DTO---BaseResultDto public class BaseResultDto { /// <summary> /// ...
- CheckBox 半选中状态
<input type='checkbox' />可以半选中,这个特性,很多浏览器都支持,包括Firefox,Chrome和IE 用 input.indeterminate 这个属性来获取 ...
- 自定义指令-directive (转)
1.指令作用域中的@ 作用是把当前属性作为字符串传递. 前台代码: <div ng-controller="MyCtrl"> <drink water ...
- 上海有线通下载exe会302转发请求
起因: 做的软件用的clickonce,在公网的clickonce下载exe时一直报错,在vpn环境下没问题.错误提示如下: + HTTP redirect is not allowed for ap ...
- JNI ReferenceTable overflow
今天在小米设备上遇到如下问题 10-15 17:04:36.899: W/dalvikvm(2767): ReferenceTable overflow (max=512) 10-15 17:04:3 ...
- 2013ACM/ICPC亚洲区南京站现场赛-HDU4809(树形DP)
为了这个题解第一次写东西..(我只是来膜拜爱看touhou的出题人的).. 首先以为对称性质..我们求出露琪诺的魔法值的期望就可以了..之后乘以3就是答案..(话说她那么笨..能算出来么..⑨⑨⑨⑨⑨ ...
- centos 7 系统服务auditd kdump tuned irqbalance
tuned是红帽推出的一个动态调优方案,用户可以在不同的时间段内采用不同的调优方案.由于以服务进程形式存在,就可以很方便的和crontab结合!Tuned 是监控并收集各个系统组件用量数据的守护进程, ...
- 使用httpclient发送http请求
先来个httpclient的maven依赖 <dependency> <groupId>org.apache.httpcomponents</groupId> &l ...