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) //1return后面不能换行
换行和空格在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很多缺陷,但并不妨碍它成为最有价值的语言,它是网页编程的唯一语言。
参考文章: