乐趣区

JavaScript历史学习总结

javascript历史

1994 年网景公司,发布了 Netscape 浏览器,因此急需一门脚本语言,使得网页可以和人互动。

1995 年网景公司,录用的 Brendan Eich,让他担任这门语言的设计师。

公司要求这门语言必须看上去“与 java 足够相似”,但要比 java 简单,要让非专业的网页制作者也能很快的上手。

但 Brendan Eich 对 java 一点兴趣也没有,他喜欢函数式编程,喜欢 scheme 语言。

他的设计思路大概是这样的:

  1. 借鉴 c 语言的基本语法
  2. 借鉴 java 的数据类型和内存管理
  3. 借鉴 scheme 语言,将函数提升到“第一等公民”的地位
  4. 借鉴 self 语言,使用基于原型 prototype 的继承机制。

总之 javascript 是实际上是两门语言风格的混合产物——简化的函数式编程和简化的面向对象编程。

于是为了应付公司的安排任务,他只用了 10 天的时间就将它设计出来了。

由于时间仓促,语言的设计有很多缺陷,导致用 javascript 写出来的程序混乱不堪。

javascript缺陷

nullundefined

只有在 javascript 这门语言中同时存在两个空。

nullundefined 都表示不存在,用法都一样。

一般在定义基本类型时,没有赋值,会是undefined

let a 
console.log(a)      //undefined

定义 Object 类型时,会使用null

let b = null

全局变量

未定义的变量可以直接使用,在所有模块中都是可见的。

function fn(){a = 1}
fn()
console.log(a)      //1

return后面不能换行

换行和空格在 javascript 中没有实际的意义。

let a 

=

1

// 可以声明

但在 return 后面不能出现换行

function fn(){
    return
    1
}
fn()    // undefined

类型自动转换

javascript 中声明的变量,后面赋值时可以随意更改类型。

let a = 1
typeof a        //number
a = '2'
typeof a        //string

在使用操作符时,可以不知不觉的进行类型转换。

let a = '1'
+a
typeof      //number

这种运算也大大加剧了运算的复杂性。

=====

==在判断两个值是否相等的时,会自动发生类型转换,得到的结果往往和你期待的不一致。

造成缺陷的客观原因

javascript还有很多这样的设计缺陷,造成这些设计缺陷主要有三个客观原因

  1. 设计仓促,javascript设计只用了三天
  2. 没有先例,javascript是唯一同时使用函数式编程和面向对象变成的语言
  3. 过早标准化,从定稿到标准化只用了一年半的时间,对比 c 语言,用了将近 20 年才标准化。

这三个原因导致了 javascript 很多缺陷,但并不妨碍它成为最有价值的语言,它是网页编程的唯一语言。

参考文章:

Javascript 诞生记
Javascript 的 10 个设计缺陷

退出移动版