javascript
歷史1994年網景公司,發佈了 Netscape 瀏覽器,所以急需一門腳本語言,使得網頁能夠和人互動。javascript
1995年網景公司,錄用的 Brendan Eich,讓他擔任這門語言的設計師。html
公司要求這門語言必須看上去「與java
足夠類似」,但要比java
簡單,要讓非專業的網頁製做者也能很快的上手。java
但 Brendan Eich 對java
一點興趣也沒有,他喜歡函數式編程,喜歡scheme
語言。編程
他的設計思路大概是這樣的:瀏覽器
c
語言的基本語法java
的數據類型和內存管理scheme
語言,將函數提高到「第一等公民」的地位self
語言,使用基於原型prototype
的繼承機制。總之javascript
是其實是兩門語言風格的混合產物——簡化的函數式編程和簡化的面向對象編程。函數式編程
因而爲了應付公司的安排任務,他只用了10天的時間就將它設計出來了。函數
因爲時間倉促,語言的設計有不少缺陷,致使用javascript
寫出來的程序混亂不堪。prototype
javascript
缺陷null
和undefined
只有在javascript
這門語言中同時存在兩個空。設計
null
和undefined
都表示不存在,用法都同樣。code
通常在定義基本類型時,沒有賦值,會是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
不少缺陷,但並不妨礙它成爲最有價值的語言,它是網頁編程的惟一語言。
參考文章: