11_JavaScript基礎(chǔ)入門(mén)(1)

JavaScript簡(jiǎn)介

1.JavaScript用途

前端三層

  • 結(jié)構(gòu)層 HTML(從語(yǔ)義的角度描述頁(yè)面的結(jié)構(gòu))
  • 樣式層 CSS(從審美的角度裝飾頁(yè)面)
  • 行為層 JavaScript (從交互的角度提升用戶(hù)體驗(yàn))

JavaScript用來(lái)制作web頁(yè)面交互效果练般,提升用戶(hù)體驗(yàn)谎碍。


交互效果

JavaScript在今天甜害,如果你要離開(kāi)他,寸步難行澜建,網(wǎng)頁(yè)將無(wú)法正常使用。

2.JavaScript誕生

在1995 年 Netscape,一位名為 Brendan Eich 的工程師創(chuàng)造了 JavaScript块饺,隨后在 1996 年初拌滋,JavaScript 首先被應(yīng)用于 Netscape 2 瀏覽器上朴沿。最初的 JavaScript 名為 LiveScript(活力腳本),后來(lái)因?yàn)?Sun Microsystem 的 Java 語(yǔ)言的興起和廣泛使用鸠真,Netscape 出于宣傳和推廣的考慮悯仙,將它的名字從最初的 LiveScript 更改為 JavaScript——盡管兩者之間并沒(méi)有什么共同點(diǎn)。這便是之后混淆產(chǎn)生的根源吠卷。

幾個(gè)月后锡垄,Microsoft 隨著 IE 3 推出了一個(gè)與之基本兼容的語(yǔ)言 JScript(注意微軟的人生哲學(xué),當(dāng)它發(fā)現(xiàn)別人的東西很好的時(shí)候祭隔,就必須擰巴的推出自己的货岭,然后自己的又被市場(chǎng)排斥路操,又開(kāi)始兼容別人的)。又幾個(gè)月后千贯,Netscape 將 JavaScript 提交至 Ecma
International(一個(gè)歐洲標(biāo)準(zhǔn)化組織)屯仗, ECMAScript 標(biāo)準(zhǔn)第一版便在 1997 年誕生了,隨后在 1999 年以 ECMAScript 第三版的形式進(jìn)行了更新搔谴,從那之后這個(gè)標(biāo)準(zhǔn)沒(méi)有發(fā)生過(guò)大的改動(dòng)魁袜。由于委員會(huì)在語(yǔ)言特性的討論上發(fā)生分歧,ECMAScript 第四版尚未推出便被廢除敦第,但隨后于 2009 年 12 月發(fā)布的 ECMAScript 第五版引入了第四版草案加入的許多特性峰弹。第六版標(biāo)準(zhǔn)已經(jīng)于2015年六月發(fā)布。

ECMAScript是JavaScript的標(biāo)準(zhǔn)芜果,現(xiàn)在我們學(xué)習(xí)的版本的ECMAScript4鞠呈、5。

3.JavaScript從丑小鴨到金鳳凰

2003年:牛皮鮮右钾,頁(yè)面上漂浮的廣告蚁吝、彈窗廣告;所以當(dāng)時(shí)的瀏覽器就推出一個(gè)功能舀射,禁用廣告窘茁,實(shí)際上本質(zhì)就是禁用JavaScript。頁(yè)面上的特效后控,都特別俗庙曙,比如鼠標(biāo)后面跟隨的星星,然后工程師對(duì)JS的感覺(jué)就是不用學(xué)習(xí)浩淘,生搬硬套捌朴,大量的“效果寶盒”軟件,一套就有各種特效了张抄。沒(méi)有人琢磨語(yǔ)言特性砂蔽。

2004年:谷歌打開(kāi)了Ajax這個(gè)潘多拉的盒子,從此JavaScript被人重視署惯,很多人開(kāi)始學(xué)習(xí)JS語(yǔ)言左驾。當(dāng)時(shí)問(wèn)世了兩本JS巨作《犀牛書(shū)》、《高級(jí)程序設(shè)計(jì)》极谊。

2007年:三層分離诡右,iPhone發(fā)布,人們開(kāi)始重視用戶(hù)體驗(yàn)轻猖。大家發(fā)現(xiàn)了帆吻,JavaScript是web頁(yè)面中制作交互效果唯一的語(yǔ)言,所以把JS的重視程度咙边,提到了相當(dāng)高的一個(gè)地位猜煮。招聘信息里面開(kāi)始出現(xiàn)獨(dú)立的“JS工程師”職位了次员,之前都是后臺(tái)工程師捎帶腳寫(xiě)寫(xiě)JS。

2008年:Chrome瀏覽器發(fā)布王带,V8引擎加快了JS的解析淑蔚,之前的瀏覽器解析JS的時(shí)候卡頓卡頓的,動(dòng)畫(huà)效果是蹦蹦的愕撰。在Chrome里刹衫,它的引擎叫做V8,運(yùn)行JS很流暢盟戏。

2009年:jQuery變得流行绪妹,解決了瀏覽器兼容問(wèn)題,制作頁(yè)面效果變得簡(jiǎn)單柿究,越來(lái)越多的初學(xué)者愿意學(xué)習(xí)JavaScript。

2010年:Canvas畫(huà)布技術(shù)得到眾多瀏覽器支持黄选,可以用Canvas替代Flash了蝇摸,并且能制作小游戲,比如偷菜办陷、停車(chē)小游戲貌夕。我們有這個(gè)課程,做Flappy Bird民镜、俄羅斯方塊啡专、消消樂(lè)、接觸物理拋物線引擎制圈。

2011年:Node.js得到廣泛應(yīng)用们童,實(shí)際上就是把JavaScript運(yùn)行在了服務(wù)器上,單線程非阻塞鲸鹦,能夠讓企業(yè)用最小的成本實(shí)現(xiàn)后臺(tái)網(wǎng)站慧库,比如之前4萬(wàn)的服務(wù)器都卡,現(xiàn)在用了node之后馋嗜,4000的機(jī)器都很流暢齐板。

2012年:HTML5+CSS3的流行,也帶火了JavaScript葛菇。

2013年: hybrid app模式開(kāi)始流行甘磨。就是做手機(jī)app的時(shí)候,老板們發(fā)現(xiàn)要雇傭三隊(duì)人馬眯停,iOS济舆、Android、window phone庵朝÷鹪花三份工資又厉,并且產(chǎn)品還不好迭代。所以人們發(fā)明了用網(wǎng)頁(yè)技術(shù)開(kāi)發(fā)手機(jī)App的技術(shù)椎瘟,叫做web app覆致。hybrid app就是混合app,同時(shí)結(jié)合web技術(shù)和原生開(kāi)發(fā)技術(shù)肺蔚。省錢(qián)煌妈,好迭代。

2015年:ECMA6發(fā)布宣羊,叫做ECMA2015璧诵。重量級(jí)的改變,把語(yǔ)言的特性顛覆性的一個(gè)增強(qiáng)仇冯。

4.JavaScript非常好學(xué)

好學(xué)的點(diǎn)是什么:

  • JavaScript是有界面效果:不像C語(yǔ)言之宿,黑底白字,很枯燥的苛坚。
  • JavaScript的語(yǔ)法來(lái)源于C和Java:有C和Java的經(jīng)驗(yàn)同學(xué)好學(xué)很多比被。
  • JavaScript是弱變量類(lèi)型的語(yǔ)言,動(dòng)態(tài)數(shù)據(jù)類(lèi)型語(yǔ)言泼舱。
  • JavaScript運(yùn)行在宿主環(huán)境中等缀,不關(guān)心內(nèi)存,垃圾回收娇昙。

不好學(xué)的點(diǎn)是什么:

  • 兼容性問(wèn)題: IE8是個(gè)怪胎尺迂,很多東西都不一樣,所以就要寫(xiě)兼容寫(xiě)法冒掌,不怕造輪子噪裕,多寫(xiě)幾遍
  • 花式寫(xiě)法很多,抽象:從簡(jiǎn)單入手宋渔,細(xì)細(xì)品味代碼
  • 太多細(xì)節(jié):為知筆記認(rèn)真寫(xiě)自己的筆記州疾,自己做實(shí)驗(yàn);

5.學(xué)習(xí)方法

  • 要多去“品”程序,多去思考內(nèi)在邏輯皇拣,讀懂每一行代碼严蓖!
  • JS機(jī)械重復(fù)性的勞動(dòng)幾乎為0,基本都是創(chuàng)造性的勞動(dòng)氧急。HTML颗胡、CSS都是重復(fù)的勞動(dòng),margin吩坝、padding擠來(lái)擠去毒姨。
  • 永遠(yuǎn)不要背程序,每一個(gè)程序都必須自己會(huì)寫(xiě)钉寝,有一個(gè)每天的作業(yè)弧呐,重復(fù)老師的上課案例闸迷。

Hello World!

這事兒吧俘枫,挺有意思腥沽,就是學(xué)習(xí)任何的語(yǔ)言,我們都喜歡在屏幕上直接輸出一點(diǎn)什么鸠蚪,當(dāng)做最簡(jiǎn)單今阳、最基本的案例。輸出什么大家隨意茅信,但是很多人都習(xí)慣輸出ldquo;hello worldrdquo;盾舌,世界你好。感覺(jué)自己很有情懷的樣子蘸鲸。

1.JavaScript書(shū)寫(xiě)的位置

<script type="text/javascript">
    alert("Hello World!");
</script>
hello world

JavaSript程序妖谴,要寫(xiě)在HTML頁(yè)面中,運(yùn)行頁(yè)面的時(shí)候酌摇,這個(gè)頁(yè)面上的JS也就一起運(yùn)行了窖维。也就是說(shuō),js的運(yùn)行必須有宿主環(huán)境妙痹,最最常見(jiàn)的宿主環(huán)境,就是瀏覽器鼻疮。
JS寫(xiě)在<script>標(biāo)簽對(duì)兒里面怯伊,type屬性就是類(lèi)型,text/javascript就是純文本的javascript判沟;注意耿芹,這個(gè)type必須寫(xiě)準(zhǔn)確,可以不寫(xiě)挪哄,但是要寫(xiě)吧秕,一定要寫(xiě)準(zhǔn)確,否則失效迹炼。

2.alert()語(yǔ)句

alert就是英語(yǔ)中“警報(bào)”的意思砸彬,能夠讓頁(yè)面彈出警告框。
實(shí)際上這條語(yǔ)句斯入,在運(yùn)行一個(gè)內(nèi)置函數(shù)砂碉,運(yùn)行函數(shù)就要加圓括號(hào)。不要糾結(jié)這個(gè)東西刻两,學(xué)習(xí)所有的程序增蹭,都是從模仿開(kāi)始的。前期磅摹,不要去糾結(jié)語(yǔ)法的機(jī)理是什么滋迈,只需要進(jìn)行模仿霎奢。你只需要知道,你模仿了饼灿,你就能實(shí)現(xiàn)效果幕侠。隨著課程的深入,你將知道每條語(yǔ)句的確切機(jī)理赔退。
alert("你好俺纫馈!");
這是一條語(yǔ)句硕旗,每條語(yǔ)句之后用;結(jié)尾窗骑。注意,所有的符號(hào)都是英文的符號(hào)漆枚,不要使用中文创译!

程序是順序執(zhí)行的,任何程序都是這樣墙基。

alert語(yǔ)句

語(yǔ)句都要遵循語(yǔ)法软族,alert的語(yǔ)法比較簡(jiǎn)單,就是后面的圓括號(hào)残制。

3.控制臺(tái)

控制臺(tái)是Chrome瀏覽器“檢查”里面的功能立砸,快捷鍵是F12。英文叫做console初茶。
程序的所有未捕獲的錯(cuò)誤颗祝,都會(huì)在控制臺(tái)中輸出∧詹迹控制臺(tái)是調(diào)試程序的一個(gè)利器螺戳。
比如下面的語(yǔ)句用了中文的符號(hào),有語(yǔ)法錯(cuò)誤:
alert(“你好”)折汞;

控制臺(tái)

有些時(shí)候我們想在控制臺(tái)中自己輸出點(diǎn)什么倔幼,那么就要使用語(yǔ)句:
console.log();
console就是控制臺(tái),log就是日志的意思爽待,這里是動(dòng)詞损同,表示打印。
還是那句話堕伪,只需要模仿就行了揖庄,后面的課程你將知道console是一個(gè)內(nèi)置對(duì)象,log是它的一個(gè)方法欠雌。

比如:
console.log("你好啊");

養(yǎng)成打開(kāi)控制臺(tái)調(diào)試程序的習(xí)慣蹄梢。

4.行文特性

JavaScript語(yǔ)句和語(yǔ)句之間的換行、空格、縮進(jìn)都不敏感禁炒。

<script type="text/javascript">
    alert("你好");alert("帥");


            alert("哈哈哈哈");
</script>

等價(jià)于:

<script type="text/javascript">
    alert("你好");
    alert("帥");
    alert("哈哈哈哈");
</script>

語(yǔ)句后面的分號(hào)而咆,不是必須寫(xiě)的,如果語(yǔ)句是一行一行寫(xiě)的幕袱,那么分號(hào)是沒(méi)有必要的暴备。但是壓縮頁(yè)面的時(shí)候,語(yǔ)句結(jié)尾的分號(hào)们豌,非常重要涯捻。
我們把頁(yè)面做好之后,通常都會(huì)進(jìn)行壓縮望迎,用軟件把所有的空格障癌、換行都去掉。此時(shí)辩尊,語(yǔ)句末尾的分號(hào)顯得非常重要涛浙,如果去掉分號(hào),將不能執(zhí)行摄欲。
不能執(zhí)行:

<script type="text/javascript">
    alert("你好")alert("帥")alert("哈哈哈哈")
</script>

正確寫(xiě)法:

<script type="text/javascript">
    alert("你好");alert("帥");alert("哈哈哈哈");
</script>

5.注釋

給人看的東西轿亮,對(duì)讀程序是一個(gè)提示作用。復(fù)習(xí)一下HTML的注釋?zhuān)?br> ``
CSS注釋?zhuān)?br> /*我是注釋*/

JavaScript里面的注釋?zhuān)?br> 單行注釋?zhuān)?/p>

<script type="text/javascript">
    //我是一行注釋
    //再來(lái)一行
    alert("你好");
</script>

或者多行注釋?zhuān)?/p>

/*
    我是一行注釋
    再來(lái)一行
    哈哈胸墙,我又寫(xiě)了一行
*/

注釋的符號(hào)我注,不能嵌套,錯(cuò)誤的示范:

/*
    我是一行注釋
    /*

    */
    再來(lái)一行
    哈哈迟隅,我又寫(xiě)了一行
*/

sublime中注釋的快捷鍵仓手,就是ctrl+/

字面量

字面量:英語(yǔ)叫做literals,有些書(shū)上叫做直接量玻淑。看見(jiàn)什么呀伙,它就是什么补履。
我們先來(lái)學(xué)習(xí)數(shù)字的字面量,和字符串的字面量剿另。剩余的字面量類(lèi)型箫锤,我們?nèi)蘸笥鲆?jiàn)再介紹。

1.數(shù)字的字面量

數(shù)字的字面量雨女,就是這個(gè)數(shù)字自己谚攒,并不需要任何的符號(hào)來(lái)界定這個(gè)數(shù)字。
JavaScript中氛堕,數(shù)字的字面量可以有三種進(jìn)制:

  • 10進(jìn)制:普通的數(shù)字就是十進(jìn)制
  • 8進(jìn)制:如果以0開(kāi)頭馏臭、或者以0o開(kāi)頭、或者以0O開(kāi)頭的都是八進(jìn)制讼稚,八進(jìn)制只能用0~7來(lái)表示
  • 16進(jìn)制:如果以0x開(kāi)頭的都是十六進(jìn)制括儒。

八進(jìn)制舉例:

<script type="text/javascript">
    //以0開(kāi)頭绕沈,所以就是八進(jìn)制;顯示的時(shí)候會(huì)以十進(jìn)制顯示
    //3*8+6=30
    console.log(036);    //30
    console.log(044);  //36
    console.log(010);  //8
    console.log(0o36); //30
    console.log(0O36); //30
</script>

運(yùn)行結(jié)果:

運(yùn)行結(jié)果

注意帮寻,八進(jìn)制只能出現(xiàn)0~7這8中字符乍狐,如果表示不合法,那么JS將自動(dòng)的認(rèn)為你輸入錯(cuò)了固逗,從而用十進(jìn)制進(jìn)行顯示:

console.log(088);  //以0開(kāi)頭浅蚪,按理說(shuō)是八進(jìn)制,但是后面的數(shù)字錯(cuò)了烫罩,所以以十進(jìn)制顯示

運(yùn)行結(jié)果

但是以0o開(kāi)頭惜傲、0O開(kāi)頭的數(shù)字,如果后面寫(xiě)錯(cuò)了嗡髓,控制臺(tái)報(bào)錯(cuò)操漠!

console.log(0o88)
console.log

再看一下16進(jìn)制:

console.log(0xff);
console.log(0x2b);
console.log(0x11);

運(yùn)行結(jié)果:


16進(jìn)制

如果后面有錯(cuò)誤的寫(xiě)法,那么控制臺(tái)報(bào)錯(cuò):
console.log(0x2m);
[圖片上傳失敗...(image-d75f-1566032897161)]

總結(jié)一下饿这,下面的輸出結(jié)果都是15:

console.log(15);
console.log(017);
console.log(0o17);
console.log(0O17);
console.log(0xf);

下面的輸出結(jié)果都是負(fù)15:

console.log(-15);
console.log(-017);
console.log(-0o17);
console.log(-0O17);
console.log(-0xf);

小數(shù)的字面量也很簡(jiǎn)單浊伙,就是數(shù)學(xué)上的點(diǎn)。計(jì)算機(jī)世界中长捧,小數(shù)稱(chēng)為“浮點(diǎn)數(shù)”嚣鄙。
允許使用e來(lái)表示乘以10的幾次冪

console.log(-3.1415926);    //-3.1415926
console.log(.315);          //.315 如果整數(shù)位數(shù)是0,可以不寫(xiě)
console.log(5e5);           //500000
console.log(5.6e5);     //560000
console.log(1e-4);          //0.0001
console.log(.1e-3);     //0.0001
浮點(diǎn)數(shù)

只有十進(jìn)制有小數(shù)的字面量串结,八進(jìn)制哑子、十六進(jìn)制沒(méi)有小數(shù)的字面量。

最后學(xué)習(xí)兩個(gè)特殊的字面量:
Infinity 無(wú)窮大
試圖輸出一個(gè)非常大的數(shù)字:
console.log(3e45645645645645);
控制臺(tái)顯示Infinity表示無(wú)窮大
至于多大的數(shù)字能生成無(wú)窮大肌割,不同瀏覽器不一樣卧蜓,不要管。

可以是負(fù)的無(wú)窮大:
console.log(-3e45645645645645);
控制臺(tái)顯示-Infinity表示負(fù)的無(wú)窮大

我們可以直接在控制臺(tái)輸出無(wú)窮大把敞,注意大小寫(xiě):
console.log(Infinity);

NaN英語(yǔ)全名叫做not a number弥奸,不是一個(gè)數(shù)。比較哲學(xué)的是奋早,這個(gè)“不是一個(gè)數(shù)”是一個(gè)數(shù)字字面量盛霎。
console.log(0/0);

總結(jié)一下,數(shù)字字面量有整數(shù)字面量(十進(jìn)制耽装、16進(jìn)制愤炸、八進(jìn)制),浮點(diǎn)數(shù)字面量(要記住e)掉奄,Infinity规个,NaN

2.字符串

字符串是一個(gè)術(shù)語(yǔ),就是人類(lèi)說(shuō)的語(yǔ)句、詞绰姻。

字符串的字面量枉侧,必須用雙引號(hào)、單引號(hào)包裹起來(lái)狂芋。字符串被限定在同種引號(hào)之間榨馁;也即,必須是成對(duì)單引號(hào)或成對(duì)雙引號(hào)帜矾。

console.log("今天天氣很好");

//  必須是同種引號(hào)翼虫,這是錯(cuò)誤的:
console.log('哈哈");

如果一個(gè)數(shù)字,用引號(hào)引起來(lái)屡萤,那么就是字符串了:
console.log(“3”);

轉(zhuǎn)義字符珍剑,
\n 回車(chē)換行
\t tab縮進(jìn)

alert("你好\n啊\n我很愛(ài)你\n啊");

字符串

引號(hào)的轉(zhuǎn)譯:
正常情況下,引號(hào)內(nèi)部可以有不同種的引號(hào)死陆,比如雙引號(hào)里面可以有單引號(hào):
console.log("老師說(shuō)你像'考拉'一樣漂亮");

輸出

console.log('老師說(shuō)你像"考拉"一樣漂亮');


輸出

可以用\” 來(lái)表達(dá)引號(hào):
console.log("老師說(shuō)你像\"考拉\"一樣漂亮");
反斜杠自己也用反斜杠來(lái)轉(zhuǎn)義:
console.log("c:\\a\\b.jpg");

輸出

變量

變量(Variables)招拙,和高中代數(shù)學(xué)習(xí)的x、y措译、z很像别凤,它們不是字母,而是蘊(yùn)含值的符號(hào)领虹。
它和直接量不同规哪,直接量5,就是數(shù)字5塌衰;直接量”你好”就是字符串“你好”∷呱裕現(xiàn)在這個(gè)變量不一樣了,你看見(jiàn)一個(gè)a最疆,實(shí)際上它不是字母a杯巨,而是里面蘊(yùn)含的不同的值。

1.整體感知

<script type="text/javascript">
    //定義一個(gè)變量
    var a;
    //賦值
    a = 100;
    //輸出變量a
    console.log(a);
</script>

我們使用var關(guān)鍵字來(lái)定義變量努酸,所謂的關(guān)鍵字就是一些有特殊功能的小詞語(yǔ)舔箭,關(guān)鍵字后面要有空格。
var就是英語(yǔ)variables變量的縮寫(xiě)蚊逢,表示定義一個(gè)變量。一旦你var a;
你的電腦內(nèi)存中箫章,就會(huì)開(kāi)辟一個(gè)空間烙荷,來(lái)存儲(chǔ)這個(gè)變量a。
現(xiàn)在就可以給這個(gè)變量賦值檬寂,JS中給變量賦值用等號(hào)终抽,等號(hào)右邊的值賦給左邊。
a = 100;
現(xiàn)在a變量的值就是100。所以我們輸出
console.log(a);
控制臺(tái)就會(huì)輸出a變量的值昼伴,就是100匾旭。

2.量必須先聲明,才能使用

使用一個(gè)變量圃郊,必須先進(jìn)行一個(gè)var价涝,才能使用。var這個(gè)過(guò)程可以叫做聲明declaration持舆,也可以叫做定義definition色瘩。
現(xiàn)在我們直接運(yùn)行語(yǔ)句:
console.log(b); //這個(gè)b沒(méi)有被var過(guò),所以要報(bào)錯(cuò)

變量需要聲明后使用

因?yàn)閎沒(méi)有被定義逸寓,所以b現(xiàn)在不是一個(gè)變量居兆,系統(tǒng)不認(rèn)識(shí)這個(gè)b的。拋出引用錯(cuò)誤竹伸。

變量的名稱(chēng)是標(biāo)識(shí)符(identifiers)泥栖,任何標(biāo)識(shí)符的命名都需要遵守一定的規(guī)則:
在JavaScript語(yǔ)言中,一個(gè)標(biāo)識(shí)符(identifier)可以由字母勋篓、下劃線(_)吧享、美元($)符號(hào)、數(shù)字(0-9)組成生巡,但不能以數(shù)字開(kāi)頭耙蔑。也就是說(shuō),一個(gè)標(biāo)識(shí)符必須由字母孤荣、下劃線甸陌、美元符號(hào)開(kāi)頭,后續(xù)可以有字母盐股、下劃線钱豁、美元符號(hào)、數(shù)字疯汁。因?yàn)镴avaScript語(yǔ)言是區(qū)分大小寫(xiě)的牲尺,所以A和a不是同一個(gè)變量。并且不能是JavaScript保留字幌蚊、關(guān)鍵字谤碳。

保留字,是系統(tǒng)里面的有用途的字溢豆,為了不造成誤會(huì)蜒简,不能成為標(biāo)識(shí)符的名字。

保留字漩仙,不用背:
abstract搓茬、boolean犹赖、byte、char卷仑、class峻村、const、debugger锡凝、double粘昨、enum、export私爷、extends雾棺、fimal、float
goto衬浑、implements捌浩、import、int工秩、interface尸饺、long、mative助币、package浪听、private、protected眉菱、public迹栓、short、static俭缓、super克伊、synchronized、throws华坦、transient愿吹、volatile

合法變量名的舉例:

// 以下都是合法的變量名
var a;
var A;
var b333;
var _abc;
var $;
var $o0_0o$;
var ________;
var _;

非法的:


var 123a;   //不能數(shù)字開(kāi)頭
var 12_a;    //不能數(shù)字開(kāi)頭
var abc@163;    //不能有特殊符號(hào),符號(hào)只能有_和$
var abc¥;    //不能有特殊符號(hào)惜姐,符號(hào)只能有_和$
var var;     //不能是關(guān)鍵字
var class;   //不能是保留字

變量的名字的長(zhǎng)度實(shí)際上每個(gè)瀏覽器的規(guī)范不同犁跪,不用在意。

3.變量的賦值

變量的賦值用等號(hào)歹袁,等號(hào)就是賦值符號(hào)坷衍,在JS中等號(hào)沒(méi)有其他的含義,等號(hào)就表示賦值条舔。

var a;      //定義
a = 100;    //賦初值
console.log(a);

可以定義和賦初值一起寫(xiě):

var a = 100;  
console.log(a);

等號(hào)右邊的值給左邊枫耳,等號(hào)右邊的值不變。

var a = 100;
var b = 200;
a = b;      //在改變a變量的值逞刷,a的值變?yōu)?00嘉涌。b的值不變。
console.log(a);
console.log(b);

你會(huì)發(fā)現(xiàn)夸浅,變量只需要var一次仑最,后面改變變量的值的時(shí)候,就不需要var了帆喇,可以直接改變它的值警医。

var a = 100;
a = 50;   //不需要寫(xiě)var
console.log(a);

如果一個(gè)變量,僅僅被var了坯钦,但是沒(méi)有被賦初值呢预皇,此時(shí)這個(gè)變量的值就是undefined;

var m;
console.log(m);  //輸出undefined

實(shí)際上我們已經(jīng)var了這個(gè)m,已經(jīng)定義了這個(gè)m婉刀,只不過(guò)這就是瀏覽器的一個(gè)規(guī)矩吟温,如果這個(gè)變量沒(méi)有被賦初值,那么這個(gè)變量就視為沒(méi)有“定義完成”突颊。值就是undefined鲁豪。

4.變量聲明的提升

這是js特有的一個(gè)特點(diǎn),其他語(yǔ)言都沒(méi)有這個(gè)特點(diǎn)律秃。有些程序員挺反感這個(gè)特點(diǎn)的爬橡。
我們現(xiàn)在先去改變變量的值,然后定義變量棒动,由于JS有一個(gè)機(jī)制糙申,叫做變量聲明的提升,所以現(xiàn)在程序在執(zhí)行前會(huì)已經(jīng)看見(jiàn)這個(gè)程序中有一行定義變量船惨,所以就會(huì)提升到程序開(kāi)頭去運(yùn)行柜裸。

<script type="text/javascript">
    a = 100;
    var a;  //這行定義變量會(huì)自動(dòng)提升到所有語(yǔ)句之前
    console.log(a);
</script>

輸出:100

記住,js只能提升變量的聲明掷漱,而不能提升變量的賦初值

console.log(a);
var a = 100;

等價(jià)于:

var a;   //自動(dòng)升級(jí)
console.log(a);
a = 100;   //賦初值還留在原地

5.不寫(xiě)var的情況

abc = 123;
console.log(abc);

定義abc的時(shí)候沒(méi)有寫(xiě)var粘室,程序沒(méi)有報(bào)錯(cuò),說(shuō)明這個(gè)abc變量真的已經(jīng)被定義成功了〔贩叮現(xiàn)在你看不出來(lái)var和不var的區(qū)別衔统,感覺(jué)都是成功的,但是日后你就會(huì)知道不寫(xiě)var定義了一個(gè)全局變量海雪,作用域是不能控制的锦爵。

6.用逗號(hào)來(lái)隔開(kāi)多個(gè)變量的定義

var a = 7 , b = 9 , c = 10;
逗號(hào)這個(gè)表示法,只能用于變量的連續(xù)定義奥裸,不要瞎用险掀。

7.區(qū)分變量還是直接量

變量的時(shí)候,不能加引號(hào)湾宙。如果變量加上引號(hào)樟氢,就變成字符串了冈绊。

var a = 100;
console.log("a");

輸出的是a,而不是輸出100,

引號(hào)是“字符串”的定界符埠啃,所以在雙引號(hào)里面的a已經(jīng)失去了變量的意思死宣,就是一個(gè)字符串a(chǎn)。

變量的類(lèi)型

1.概述

基本類(lèi)型5種

  • number數(shù)字類(lèi)型
  • string字符串類(lèi)型
  • undefinedundefined類(lèi)型碴开,變量未定義時(shí)的值毅该,這個(gè)值自己是一種類(lèi)型
  • boolean布爾類(lèi)型,僅有兩個(gè)值true 和 false潦牛,講if語(yǔ)句時(shí)我們細(xì)說(shuō)
  • nullnull類(lèi)型眶掌,這個(gè)值自己是一種類(lèi)型,遇見(jiàn)時(shí)我們細(xì)說(shuō)

引用類(lèi)型

2.typeof關(guān)鍵字

這個(gè)關(guān)鍵字巴碗,用來(lái)檢測(cè)一個(gè)變量的類(lèi)型朴爬。

var a = 100;
var a = 100;
console.log(typeof a);

3.number類(lèi)型

所有的數(shù)字都是number類(lèi)型

<script type="text/javascript">
    //下面定義的變量都是number類(lèi)型
    var a = 100;
    var b = 234243245345;
    var c = -345345435435;
    var d = 345.3245234;
    var e = .5e6;
    var f = 0xff;
    var g = 017;
    var h = Infinity;
    var i = NaN;
    
    console.log(typeof a);
    console.log(typeof b);
    console.log(typeof c);
    console.log(typeof d);
    console.log(typeof e);
    console.log(typeof f);
    console.log(typeof g);
    console.log(typeof h);
    console.log(typeof i);
</script>

JS中所有的數(shù)字都是number類(lèi)型的,不在細(xì)分為整形int良价、浮點(diǎn)型float這些亂七八糟的東西寝殴。
number類(lèi)型的東西:所有數(shù)字(不分正負(fù)吗铐、不分整浮晌涕、不分大小、不分進(jìn)制)垂涯、Infinity痊银、NaN抵蚊。

4.string類(lèi)型

var m1 = "哈哈";
var m2 = "123"; 
var m3 = "";        //空字符串,也是字符串
console.log(typeof m1);
console.log(typeof m2);
console.log(typeof m3);

這個(gè)變量是什么類(lèi)型溯革,和賦的值有關(guān)系贞绳,而和定義的時(shí)候是沒(méi)有關(guān)系的。定義的時(shí)候致稀,都是用var關(guān)鍵字定義的冈闭。

var mm = 123;  //number
console.log(typeof mm);
mm = "哈哈";  //改為string是合法的
console.log(typeof mm);

我們說(shuō)js這個(gè)語(yǔ)言叫做動(dòng)態(tài)數(shù)據(jù)類(lèi)型,原因就在這里抖单,就是賦值的時(shí)候就決定這個(gè)變量的類(lèi)型了萎攒。甚至可以改變這個(gè)變量的值,為其他類(lèi)型的值矛绘。變量的類(lèi)型是自動(dòng)檢測(cè)的耍休,而不是人規(guī)定的。

5.undefined類(lèi)型

之前說(shuō)過(guò)货矮,一個(gè)變量只var過(guò)羊精,沒(méi)有賦初值,它的默認(rèn)值是undefined;
這個(gè)undefined是自成一家囚玫,自己是自己的類(lèi)型喧锦,它的類(lèi)型也叫作undefined读规。undefined類(lèi)型的值就只有undefined一個(gè)。

var nn;   //我只定義了燃少,沒(méi)有賦初值掖桦,所以就是undefined,類(lèi)型也是undefined
console.log(nn);
console.log(typeof nn);

6.加號(hào)

加號(hào)兩邊都是數(shù)字的時(shí)候供汛,那么就是數(shù)學(xué)加法;兩邊不都是數(shù)字的時(shí)候涌穆,那么就是連字符怔昨,結(jié)果是字符串。

console.log("你" + "好");

console.log(1 + "2");
12宿稀,因?yàn)?被引號(hào)引起來(lái)了趁舀,所以就是字符串,所以+就是連字符

var a = "1";
var b = "2";
console.log(a + b);
var a = 1;
var b = 2;
console.log("a" + b);   //a2

多個(gè)加號(hào)祝沸,從左算到右:

var a = 1;
var b = 2;
var c = 3;
console.log("a" + a + b + "c");
var a = 1;
var b = 2;
var c = 3;
console.log(a + b + "c");

變量類(lèi)型的轉(zhuǎn)換

1.string → number

先來(lái)學(xué)習(xí)一個(gè)語(yǔ)句矮烹,這個(gè)語(yǔ)句和alert差不多,也是彈窗罩锐,彈的是輸入框:
prompt("請(qǐng)輸入你的電話","139");

變量類(lèi)型的轉(zhuǎn)換

這些小功能奉狈,就叫做程序給我們提供的API,每個(gè)API都有自己不同的語(yǔ)法涩惑。
prompt(“提示文本”,”默認(rèn)值”);
默認(rèn)值可以省略仁期。
可以把用戶(hù)輸入的值,存入變量:

var a = prompt("請(qǐng)輸入你的電話","139");
alert("哈哈竭恬,你輸入的電話是" + a);
用prompt接收的任何東西都是字符串跛蛋,哪怕用戶(hù)輸入了一個(gè)數(shù)字,也是字符串的數(shù)字痊硕。

有一些方法可以將內(nèi)存中表示一個(gè)數(shù)字的字符串轉(zhuǎn)換為對(duì)應(yīng)的數(shù)字
parseInt()parseFloat()赊级。

parseInt就是將一個(gè)string轉(zhuǎn)為一個(gè)整數(shù),不四舍五入岔绸,直接截取整數(shù)部分理逊。如果這個(gè)string有亂七八糟的東西,那么就截取前面數(shù)字部分亭螟。

var a = "123";
var b = parseInt(a);    //parseInt就把字符串123轉(zhuǎn)為數(shù)字123了
console.log(b);
console.log(typeof b);

下面的實(shí)例結(jié)果都是123挡鞍,最后一個(gè)是-123:

parseInt("123") //123
parseInt("123.6")    //123
parseInt("123年都會(huì)很愛(ài)你")    //123
parseInt("123年11月")     //123
parseInt("123px")       //123
parseInt("-123.99999999") //-123

parseInt()不僅僅能夠進(jìn)行一個(gè)轉(zhuǎn)為整數(shù),更能進(jìn)行一個(gè)進(jìn)制的轉(zhuǎn)換预烙,把任何進(jìn)制的數(shù)字墨微,都換為10進(jìn)制。
進(jìn)制和要轉(zhuǎn)換的字符串扁掸,用逗號(hào)隔開(kāi)翘县。
下面的運(yùn)算結(jié)果都是15:

parseInt(15,10)
parseInt(17,8)
parseInt(1111,2)
parseInt("0xf",16)
parseInt("f",16)
parseInt(16,9)
parseInt("15e6",10)
parseInt("15*6",10)

parseInt如果不能轉(zhuǎn)最域,那么就返回NaN

parseInt("Hello", 8);  
parseInt("546", 2);    
parseInt("三百六十五");

得到NaN的方法又多了一種,上午講的是6/0得到Infinity锈麸。0/0得到NaN镀脂。

parseFloat就是將字符串轉(zhuǎn)為浮點(diǎn)數(shù)
盡可能的將一個(gè)字符串轉(zhuǎn)為浮點(diǎn)數(shù),浮點(diǎn)數(shù)之后如果有亂七八糟的內(nèi)容忘伞,直接舍棄薄翅。

<script type="text/javascript">
    var a = "123.67.88";
    var b = parseFloat(a);
    console.log(b);
</script>

也就是說(shuō),數(shù)字類(lèi)型都是number氓奈,不分整數(shù)和浮點(diǎn)數(shù)翘魄,但是轉(zhuǎn)換的時(shí)候分。

2.number → string

將一個(gè)數(shù)字舀奶,與一個(gè)空字符串進(jìn)行連字符運(yùn)算暑竟,那么就是自動(dòng)轉(zhuǎn)為字符串了。

var a = 123;
var b = a + "";
console.log(b);
console.log(typeof b);

數(shù)學(xué)運(yùn)算符

運(yùn)算符叫做operator育勺,也可以叫做操作符但荤。運(yùn)算符有很多種,一元運(yùn)算符涧至、二元運(yùn)算符腹躁;數(shù)學(xué)運(yùn)算符、邏輯運(yùn)算符……我們今天先學(xué)習(xí)數(shù)學(xué)運(yùn)算符南蓬,比較簡(jiǎn)單

  • 加法
  • 減法
  • 乘法
    / 除法
    % 取余數(shù)
    ( ) 括號(hào)

下面的結(jié)果都是3:

console.log(1 + 2);
console.log(8 - 5);
console.log(1.5 * 2);
console.log(12 / 4);
console.log(13 % 5);    //得幾不重要潜慎,要的是余數(shù)

取余數(shù)這個(gè)運(yùn)算,實(shí)際上也是除蓖康,要的是余數(shù):

//取余數(shù)
console.log(12 % 3);    //0
console.log(121 % 11);  //0
console.log(5 % 8);     //5
console.log(8 % 5);     //3
console.log(5 % 5);     //0

默認(rèn)的計(jì)算順序铐炫,先乘除,后加減蒜焊。乘除取余是平級(jí)倒信,先遇見(jiàn)誰(shuí),就算誰(shuí)泳梆。

console.log(1 + 2 * 3);     //7
console.log(1 + 2 * 3 % 3); //1
console.log(1 + 2 % 3 * 3); //7

我們可以用小括號(hào)來(lái)改變計(jì)算先后順序鳖悠,注意沒(méi)有中括號(hào)和大括號(hào),一律用小括號(hào)优妙。

var a = 4 * (3 + (1 + 2) * 3);
alert(a);

JS中的數(shù)學(xué)運(yùn)算符乘综,就這么幾個(gè),如果你學(xué)過(guò)C套硼,那么我提醒你卡辰,沒(méi)有乘方^。如果你學(xué)過(guò)java那么我提醒你,沒(méi)有取整除法\九妈。

乘法怎么算反砌?

Math.pow(3,4);
這是一個(gè)新的API,記住就行了萌朱,后面的課程將會(huì)告訴你宴树,Math是一個(gè)內(nèi)置對(duì)象,pow是它的一個(gè)方法晶疼。
Math就是數(shù)學(xué)酒贬,pow就是power乘方。

var a = Math.pow(3,2 + Math.pow(3,6));

根號(hào)就是
Math.sqrt(81);

今天遇見(jiàn)的所有API:

alert("哈哈");
prompt("請(qǐng)輸入數(shù)字","默認(rèn)值");
console.log("哈哈");
parseInt("123",8);
parseFloat("123");
Math.pow(3,4);
Math.sqrt(81);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末翠霍,一起剝皮案震驚了整個(gè)濱河市同衣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌壶运,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浪秘,死亡現(xiàn)場(chǎng)離奇詭異蒋情,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)耸携,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)棵癣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人夺衍,你說(shuō)我怎么就攤上這事狈谊。” “怎么了沟沙?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵河劝,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我矛紫,道長(zhǎng)赎瞎,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任颊咬,我火速辦了婚禮务甥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘喳篇。我一直安慰自己敞临,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布麸澜。 她就那樣靜靜地躺著挺尿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上票髓,一...
    開(kāi)封第一講書(shū)人閱讀 51,554評(píng)論 1 305
  • 那天攀涵,我揣著相機(jī)與錄音,去河邊找鬼洽沟。 笑死以故,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的裆操。 我是一名探鬼主播怒详,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼踪区!你這毒婦竟也來(lái)了昆烁?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤缎岗,失蹤者是張志新(化名)和其女友劉穎静尼,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體传泊,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鼠渺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了眷细。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拦盹。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖溪椎,靈堂內(nèi)的尸體忽然破棺而出普舆,到底是詐尸還是另有隱情,我是刑警寧澤校读,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布沼侣,位于F島的核電站,受9級(jí)特大地震影響歉秫,放射性物質(zhì)發(fā)生泄漏华临。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一端考、第九天 我趴在偏房一處隱蔽的房頂上張望雅潭。 院中可真熱鬧,春花似錦却特、人聲如沸扶供。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)椿浓。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扳碍,已是汗流浹背提岔。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留笋敞,地道東北人碱蒙。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像夯巷,于是被迫代替她去往敵國(guó)和親赛惩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容