JS的歷史
1991年李爵士發(fā)明了WWW萬維網(wǎng)请垛;
1992年李爵士的同事發(fā)明了CSS;
1995年網(wǎng)景(Netscape)發(fā)布了一款瀏覽器-navigator鹰溜,此瀏覽器是第一款能支持腳本的瀏覽器失晴,發(fā)明人叫做:Branden Eich (JS之父)
ps:當(dāng)時(shí)網(wǎng)景公司想借助java的知名度褪那,所以將語言名稱改成JavaScript,在此之前它叫做live script疚俱,并且與sun公司協(xié)商兩款語言一起發(fā)布劝术。
1996年微軟發(fā)布額IE瀏覽器,并仿JavaScript發(fā)明了一個(gè)語言,叫做JScript养晋,功能與前者基本一致衬吆。
ps:與此同時(shí)網(wǎng)景公司被微軟打敗了,于是就開源匙握,成為了Firefox,并在開源的同時(shí)向ESMA(歐洲計(jì)算機(jī)制造業(yè)協(xié)會(huì))申報(bào)標(biāo)準(zhǔn)陈轿。
在IE5.5的時(shí)候推出了一個(gè)重磅的功能圈纺,微軟推出了JS發(fā)請(qǐng)求的功能。(但并沒有很多人注意麦射,而且只是微軟在用)
2004年Gmail利用微軟發(fā)明的JS發(fā)請(qǐng)求的功能蛾娶,做了一個(gè)網(wǎng)頁上的程序。
ps:在這之后潜秋,前端職業(yè)開始興起蛔琅,中國(guó)是在2010年左右才開始興起前端,并大多是由后端轉(zhuǎn)職峻呛。
pss:在前端火起來以后罗售,人們逐漸發(fā)現(xiàn)了JS不行,因?yàn)樗鼛缀跞慷际侨肿兞浚ɑハ喔采w钩述,互相干擾寨躁,沒有模塊化)導(dǎo)致項(xiàng)目一大,就容易出現(xiàn)bug牙勘,再有就是因?yàn)樗臉?biāo)準(zhǔn)不行(內(nèi)置代碼不夠多)
职恳,然后ECMA升級(jí)了它,命名為ECMAScript 5.
ECMAScript 4 因?yàn)椴阶犹筇ニ栏怪小?br>
ECMAScript 5 又被吐槽步子邁的太小方面。
ps:Ralis社區(qū)的人們發(fā)明了coffee script放钦,作為JS改良版,在里面注入了類恭金,箭頭函數(shù)操禀,opiond chain語法。
ECMAScript 6 的步子邁的就合適了横腿,至此終于成了一個(gè)現(xiàn)代編程語言床蜘。
JS是一個(gè)集大家之所長(zhǎng)的語言
“JS原創(chuàng)之初并不優(yōu)秀,優(yōu)秀之處并非原創(chuàng)”
“JS現(xiàn)在是每年一更”
JS把還沒有寫進(jìn)規(guī)范的特性已經(jīng)用在了代碼中
例:當(dāng)Y1被谷歌蔑水,火狐邢锯,IE都在使用的話,ECMA就會(huì)把Y1收入到規(guī)范中搀别,如果Y2只有在谷歌使用丹擎,其它瀏覽器不支持,也沒有寫在規(guī)范里就可以通過Babel來轉(zhuǎn)義。
JS的數(shù)據(jù)類型
JS有7種數(shù)據(jù)類型
1.數(shù)字蒂培,或稱數(shù)值(number)2.字符串(string)3.布爾值(boolean)4.Symbol 5.null 6.undefined 7.對(duì)象(objet)
由此可知再愈,JS里一切皆對(duì)象是錯(cuò)的,因?yàn)槌藢?duì)象护戳,還有另外六種數(shù)據(jù)類型翎冲。
number:
十進(jìn)制:1,1.1媳荒,.1抗悍,1.23e2
二進(jìn)制:0b1,0b11 以0b(0B)開頭
八進(jìn)制:以0開頭
十六進(jìn)制:以0x(0X)開頭
string:
'你好' "你好"
'.' "." .=空的钳枕,什么都沒有
空字符串
' ' " "
空格字符串
空字符串和空格字符串的區(qū)別是它們的長(zhǎng)度不一樣缴渊。空字符串的長(zhǎng)度為0鱼炒,空格字符串的長(zhǎng)度為1.
字符串的轉(zhuǎn)義:
用一個(gè)\告訴瀏覽器衔沼,這個(gè)符號(hào)不代表結(jié)束
\=轉(zhuǎn)義符
var a = '\'' = 單引號(hào)
var n = '\n' = 回車
var t = '\t' = Tab(制表符)
當(dāng)想表示\的時(shí)候,可以用轉(zhuǎn)義符來表示轉(zhuǎn)義符
例:
var b = '\\'
多行字符串:(不是字符串里有回車)←JS抄襲額命令行里的\回車
例:
var s = '12345
67890'
如果不用\直接這樣寫就會(huì)報(bào)錯(cuò)昔瞧。
另外一種打回車的方式:
例:
var s2 = '12345'+
'67890' (一般來說第二種方法更好)
ES6使用反引號(hào)就可以直接寫多行字符串了(反引號(hào)就是大鍵盤1左邊的符號(hào))
例:
var s3 =12345 67890
→包含回車指蚁,所以它有11個(gè)字符,長(zhǎng)度為11
布爾(boolean):
ture / false
真 / 假
&& :與運(yùn)算 例:a&&b自晰,a為真b為真則成立欣舵,否則不成立
|| : 或運(yùn)算 例: a||b,a和b有一方為真則成立缀磕,否則不成立
null和undefined,它兩都是類型缘圈,它們的值就是它們本身,兩個(gè)值的意思都是一樣的袜蚕,就是什么也沒有
它們的區(qū)別:
①如果一個(gè)變量沒有賦值糟把,它就是undefined。這屬于是語法牲剃。
②如果你想有一個(gè)object遣疯,但是現(xiàn)在不想賦值,那就可以給它一個(gè)null(也可以給undefined凿傅,但是null是推薦值)缠犀,有一個(gè)非對(duì)象,不想賦值聪舒,就推薦給它一個(gè)undefined辨液,這屬于慣例。
總結(jié):null表示空對(duì)象箱残;undefined表示非空對(duì)象滔迈。
對(duì)象(object):
對(duì)象就是hash表止吁。
JS中前六種類型都屬于基本類型,因?yàn)樗鼈儧]有對(duì)象的概念燎悍,就只是一個(gè)值敬惦。object是復(fù)雜類型,復(fù)雜類型是由簡(jiǎn)單類型組成的谈山。
語法是以花括號(hào)開頭俄删,以花括號(hào)結(jié)尾
例:{
name : 'onfire'
'age' : 18
} //左邊不管加不加單引號(hào)永遠(yuǎn)都是字符串,空字符串也可以當(dāng)作key奏路,如果不加引號(hào)的話key就必須按照標(biāo)識(shí)符原則畴椰,key加了單引號(hào)就功能多,不加單引號(hào)就方便一點(diǎn)思劳。
要讀它的話就是
person['name'] //單引號(hào)不能省
刪除key用
delete person['name']
如果使用
person['name'] = undefined
只會(huì)把value變成undefined迅矛,而key還存在妨猩。
使用
for(var key in person){
console.log(key)
}
來遍歷對(duì)象里的所有key潜叛,但順序是完全看運(yùn)氣的。
使用
for(var key in person){
console.log(person[key])
}
來遍歷對(duì)象里的所有value壶硅,順序也是完全看運(yùn)氣的威兜。
typeof的bug
type of null 返回的是'object'
type of function返回的應(yīng)該是'object'但是它返回的卻是'function'
以上兩個(gè)都是JS里的bug。