共计 1173 个字符,预计需要花费 3 分钟才能阅读完成。
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
很多缺陷,但并不妨碍它成为最有价值的语言,它是网页编程的唯一语言。
参考文章:
Javascript 诞生记
Javascript 的 10 个设计缺陷