JavaScript历史学习总结
javascript
历史
1994年网景公司,发布了 Netscape 浏览器,因此急需一门脚本语言,使得网页可以和人互动。
1995年网景公司,录用的 Brendan Eich,让他担任这门语言的设计师。
公司要求这门语言必须看上去“与java
足够相似”,但要比java
简单,要让非专业的网页制作者也能很快的上手。
但 Brendan Eich 对java
一点兴趣也没有,他喜欢函数式编程,喜欢scheme
语言。
他的设计思路大概是这样的:
- 借鉴
c
语言的基本语法 - 借鉴
java
的数据类型和内存管理 - 借鉴
scheme
语言,将函数提升到“第一等公民”的地位 - 借鉴
self
语言,使用基于原型prototype
的继承机制。
总之javascript
是实际上是两门语言风格的混合产物——简化的函数式编程和简化的面向对象编程。
于是为了应付公司的安排任务,他只用了10天的时间就将它设计出来了。
由于时间仓促,语言的设计有很多缺陷,导致用javascript
写出来的程序混乱不堪。
javascript
缺陷
null
和undefined
只有在javascript
这门语言中同时存在两个空。
null
和undefined
都表示不存在,用法都一样。
一般在定义基本类型时,没有赋值,会是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
还有很多这样的设计缺陷,造成这些设计缺陷主要有三个客观原因
- 设计仓促,
javascript
设计只用了三天 - 没有先例,
javascript
是唯一同时使用函数式编程和面向对象变成的语言 - 过早标准化,从定稿到标准化只用了一年半的时间,对比
c
语言,用了将近20
年才标准化。
这三个原因导致了javascript
很多缺陷,但并不妨碍它成为最有价值的语言,它是网页编程的唯一语言。
参考文章: