0
Posted on Tuesday, December 01, 2020 by 醉·醉·鱼 and labeled under

 最近在看ES6,看得自己快吐了。我第一次遇到这么恶心的编程语言。真的,it sucks!

一直在改动

最大的改动还是在ES6。感觉上就是吸收了很多编程语言的优势,试图加入很多东西,比如Symbol,生成器,迭代器这些在之前版本里面都没有的功能,以及对之前一些有缺陷方法的替换方法。比如,Array(3)和Array.of(3)。原始的方法里面根据输入的不同,返回的类型还不一样,完全不符合常理啊!所以有了新方法,那实现一种功能,还有好几种方法,还得记住这些方法有哪些缺陷。一个前端工程师至少有3-5年的沉淀,记住这些演变过程。OMG。无论是Ruby还是数据库系统,都没有这么激进的改动,都是符合一些理论基础的,所以对之前的方法基本很少改动,一般都是在底层上面做性能优化。个人觉得,JavaScript在ES6之前就不是一个成熟完备的语言。

疯狂的继承

单构造函数,或者编写一个类,就有N多种写法(详见高程三),每个写法还有各自的缺陷,以至于最后出了一个关键字class来解决分歧。实际上,javascript的继承关系和其他编程语言就不是一类的。这原型继承稍不留神就要出错,比如实例属性写到prototype上去...

全局变量

你定义的变量都是全局变量,所有作用域都可见,都可以修改。变量越多,你都不知道谁改了你的变量。

没有块级作用域

虽然With和Try...Catch有块级作用域,但是在For循环里面却没有,导致内部定义的局部变量在外部可以访问了,这也是为啥let的出现。

+

如果是数字,那就是加法。否则,就是转换成字符串,再拼接起来。Amazing!


var arr = [1, 2, 3] //undefined
var arr2 = [4, 5, 6]; //undefined
arr + arr2 // '1,2,34,5,6'

伪数组

执行typeof,它告诉你,数组是一个对象。