重点:范式
此文件夹保存的是,JS 真正的、特有的(尽管多是抄过来的)特性和能力。只要这些根本的设计不变,那么它们之上的 API 就不会有太偏移的发展。
Splice
与其说我爱Javascript,不如说我恨它。它是C语言和Self语言一夜情的产物。——Brendan Eich
十八世纪英国文学家约翰逊博士说得好:它的优秀之处并非原创,它的原创之处并不优秀。当今作为最庞大的用户数的语言,尽管有“绑架业界”的嫌疑,还是请不要企图用 PHP、WebAssembly 去把它“连根拔起”。把它修补、扩充才是最有价值的。
OOP + FP
Javascript 有两个常用的范式:
- OOP。JS 本身就是仿照 Java 来建造的,而 Java 的强项就是 OO。其强大不需赘述了,它是模块化编程的基础,树形结构的代码可以在复杂度可控的前提下无限扩展。
函数式编程。它是面向数学的抽象,将计算描述为一种表达式求值(参数进入表达式后得到返回值),其实,函数式程序就是一个表达式。
- 函数是第一公民
- 函数应该是纯函数,没有副作用,其结果唯一
OOP 无需赘述,前端们开发的环境 window 和 JS 本身就是对象,用的 MVC 框架也是对象。至于函数式,常见的业务基本都不能满足纯函数的条件,因为我们无时无刻不在操作一些全局变量和外部对象。Hooks 则是
优缺点 & 历史
先看看历史,这是造成 JS 早期被开发者诟病的缺点的起源。由于历史不是重点,就简单概括下:
背景:网景公司拥抱JAVA
平台
- 浏览器:C ++
- 服务器:(浏览器 V8 core)Nodejs
骨架、肉体与机能
- HTML:标记语言(计算机科学家Tim Berners-Lee发明,描述文档结构,也算是计算机语言)
- CSS:层叠样式表(同是万维网发明者1990年创造,经过4年后走出实验室)
- JS:编程语言(图灵完备)
- 作者:Brendan Eich 对 JAVA 没有兴趣,花了10天设计出来JS
结果:混合产物,函数式编程(作者专长) + 简化的面向对象(公司要求模仿JAVA),总和4种语言的特长
- (1)借鉴 C 语言的基本语法;
- (2)借鉴 Java 语言的数据类型和内存管理;
- (3)借鉴 Scheme 语言,将函数提升到"第一等公民"(first class)的地位;
- (4)借鉴 Self 语言,使用基于原型(prototype)的继承机制。
未来
- 全领域
- 网页
- 后端
- 人工智能
- 物理引擎
- 网页游戏
- AR、VR
全功能
- 安全(劫持)
- 多端适配
- 算法问题(比如最短路径)
- 抽象问题(投影仪模型)
- 数据可视化(需要数学与物理知识)
优点
解释性语言
- 不需要先编译。直接输入到浏览器,就能逐行解释
- 弱类型。变量能直接改变类型
- 安全,不可以修改文件
- 作用域互借:灵活(调用对象方便)
浏览器
- 多线程:复杂(注意渲染、网络请求等线程的等待问题,但是 JS 是单线程的)
- 事件驱动
- 跨平台,前后端兼吃
缺点
缺陷 | 说明 | 解决 |
---|---|---|
【命名空间】没有 | 函数和变量都可以覆盖 | 严格模式的引入 |
【标准库】比较小 | ES 补充 | |
【null】几乎没有用 | 和对象奇妙的关系 | |
【NaN】的存在 | 超出解释器的极限,typeof NaN === 'number' | Number.isNaN() |
【全局变量】任意操作 | 所有文件均可写入 | IIFE、CommonJS |
【编码分号】自动插入 | IDE 可以处理掉 | |
【加号】奇妙类型功能 | 数字 + 字符 = 「拼接」功能 | |
【数组】类型难以判断 | 大量严格判断函数 | |
【包装对象】混淆 | 方法生成对象,后面不注意会忘掉 |
总结一下,缺点如下:
- 弱类型:类型难判断,且容易互换
- 错误类型:null、NaN 等判断奇妙
- 不够完整
随着时间推移,我们渐渐看不到它们缺陷造成的问题了。类型方面的缺陷有 TypeScript 进行解决,语法不完整则由补丁 ECMAScript 每年进行修复。
Ref
- Javascript诞生记 - 阮一峰的网络日志
-
本文由博客一文多发平台 OpenWrite 发布!