Javascript 的优缺点,以及重点

重点:范式 此文件夹保存的是,JS 真正的、特有的(尽管多是抄过来的)特性和能力。只要这些根本的设计不变,那么它们之上的 API 就不会有太偏移的发展。


Splice 与其说我爱Javascript,不如说我恨它。它是C语言和Self语言一夜情的产物。——Brendan Eich
十八世纪英国文学家约翰逊博士说得好:它的优秀之处并非原创,它的原创之处并不优秀。当今作为最庞大的用户数的语言,尽管有“绑架业界”的嫌疑,还是请不要企图用 PHP、WebAssembly 去把它“连根拔起”。把它修补、扩充才是最有价值的。


OOP + FP Javascript 有两个常用的范式:

  1. OOP。JS 本身就是仿照 Java 来建造的,而 Java 的强项就是 OO。其强大不需赘述了,它是模块化编程的基础,树形结构的代码可以在复杂度可控的前提下无限扩展。
  2. 函数式编程。它是面向数学的抽象,将计算描述为一种表达式求值(参数进入表达式后得到返回值),其实,函数式程序就是一个表达式。
    • 函数是第一公民
    • 函数应该是纯函数,没有副作用,其结果唯一
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诞生记 - 阮一峰的网络日志
  • 【Javascript 的优缺点,以及重点】JavaScript算是严格意义上的编程语言吗? - 知乎
    本文由博客一文多发平台 OpenWrite 发布!

    推荐阅读