JavaScript 是目前所有主流瀏覽器上唯一支持的腳本語言。JavaScript入門難度較低,可在任何瀏覽器上開發(fā)及調(diào)試,不需要安裝額外的軟件。作為一門靈活的腳本語言,JS有很多用途:前端,后端,游戲腳本等。
成都創(chuàng)新互聯(lián)是專業(yè)的科爾沁右翼中網(wǎng)站建設(shè)公司,科爾沁右翼中接單;提供成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè),網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行科爾沁右翼中網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
目前javascript的應用場景非常多,并且也是熱門語言之一。
如web開發(fā)、小程序開發(fā)等都用到了js,如果不考慮兼容性問題,已經(jīng)可以使用ES6/7/8中的語法糖。在web開發(fā)中目前有很多框架,如vue、angular、react等
如果想做后臺開發(fā)可以使用nodejs(Node.js 是一個基于 Chrome V8 引擎的 JavaScript 運行環(huán)境),也有比較適用的框架如express、koa、koa2、fastify等
還可以使用js做桌面端開發(fā),Electron(Electron(原名為Atom Shell)是GitHub開發(fā)的一個開源框架。 它允許使用Node.js(作為后端)和Chromium(作為前端)完成桌面GUI應用程序的開發(fā))。 像 常用的編輯器Visual Studio Code就是使用Electron開發(fā)。
js目前屬于非常熱門的語言,并且這種現(xiàn)象將會持續(xù)下去,因為在發(fā)展過程中你會發(fā)現(xiàn)js非常強大。
相對于Java,JS在變量聲明時對數(shù)據(jù)類型并沒有嚴格的區(qū)分,說白了,用擬人的說法就是,JS面前人人平等
也因此,js會比java簡單明了很多,比方說函數(shù)的聲明等。
動態(tài)語言
不得不承認,在這方面JS有很大的優(yōu)勢,因為java一旦定義了數(shù)組,長度就不可能再變了,但是JS沒有這種限制,隨時可以改,非常簡便靈活。同理,java的一個數(shù)組只可以放同一種類型,但是JS卻能夠添加不同類型的數(shù)據(jù)。再用擬人的說法形容,Java就是個呆板的一根筋,但是js是個靈活的胖子,可以任由你蹂躪,任意往肚子里塞東西。
腳本語言
除以上種種之外,另一個重要的區(qū)別就是,Java等后臺語言都是先提前編譯好,然后再開始執(zhí)行,但是JS是一邊一邊同時進行的。
style
#cv{width:300px; height:45px; position:relative}
#cv span{width:10px; height:10px; margin-left:15px; float:left; background:#000;}
#cv span.n{ background:#FC3}
.b{width:10px; height:10px; margin-left:15px; float:left; background:#0CF;}
/style
script type="text/javascript"
window.onload=function(){
var nu=document.getElementsByTagName("span");
for(var i=0; inu.length; i++){
nu[i].onclick=function(){
for (var j = 0; j nu.length; j++) {
nu[j].className='b';
}
this.className="n";
};
}
}
/script
/head
body
div id="cv"
span class="n"/span
span/span
span/span
span/span
span/span
span/span
/div
javascript是一種腳本語言,可以用于開發(fā)運行在客戶端的、由瀏覽器中的javascript引擎解釋執(zhí)行的代碼。比如:可以用于編寫提交表單前對表單數(shù)據(jù)進行驗證的代碼;結(jié)合DOM(文檔對象模型)和ajax(異步javascript和xml)還可以開發(fā)出使客戶端(主要是瀏覽器)具有一定交互性的代碼;也可以用于c/s模式(客戶/服務器模式)中的客戶端或服務器端的代碼的開發(fā)或潛入式開發(fā)中??偠灾捎趈avascript具有語言靈活、代碼跨平臺等特性,使得它很受歡迎,在許多場合都有用武之地。
EMCAScript6(ES6)是最新的Javascript,它包含了一些很棒的新特性。這些特性擁有不同程度的復雜性,對于簡單的腳本和復雜的應用程序都非常的有用。\x0d\x0a\x0d\x0a增加的新特性:\x0d\x0a\x0d\x0a1.箭頭操作符\x0d\x0a 如果你會C#或者Java,你肯定知道lambda表達式,ES6中新增的箭頭操作符=便有異曲同工之妙。它簡化了函數(shù)的書寫。操作符左邊為輸入的參數(shù),而右邊則是進行的操作以及返回的值Inputs=outputs。\x0d\x0a 我們知道在JS中回調(diào)是經(jīng)常的事,而一般回調(diào)又以匿名函數(shù)的形式出現(xiàn),每次都需要寫一個function,甚是繁瑣。當引入箭頭操作符后可以方便地寫回調(diào)了。\x0d\x0a\x0d\x0a2.類的支持\x0d\x0a ES6中添加了對類的支持,引入了class關(guān)鍵字(其實class在JavaScript中一直是保留字,目的就是考慮到可能在以后的新版本中會用到,現(xiàn)在終于派上用場了)。JS本身就是面向?qū)ο蟮?,ES6中提供的類實際上只是JS原型模式的包裝?,F(xiàn)在提供原生的class支持后,對象的創(chuàng)建,繼承更加直觀了,并且父類方法的調(diào)用,實例化,靜態(tài)方法和構(gòu)造函數(shù)等概念都更加形象化。\x0d\x0a\x0d\x0a3.增強的對象字面量\x0d\x0a 對象字面量被增強了,寫法更加簡潔與靈活,同時在定義對象的時候能夠做的事情更多了。具體表現(xiàn)在:\x0d\x0a(1).可以在對象字面量里面定義原型\x0d\x0a(2).定義方法可以不用function關(guān)鍵字\x0d\x0a(3).直接調(diào)用父類方法\x0d\x0a\x0d\x0a4.字符串模板\x0d\x0a 字符串模板相對簡單易懂些。ES6中允許使用反引號 ` 來創(chuàng)建字符串,此種方法創(chuàng)建的字符串里面可以包含由美元符號加花括號包裹的變量${vraible}。如果你使用過像C#等后端強類型語言的話,對此功能應該不會陌生。\x0d\x0a\x0d\x0a5.解構(gòu)\x0d\x0a 自動解析數(shù)組或?qū)ο笾械闹?。比如若一個函數(shù)要返回多個值,常規(guī)的做法是返回一個對象,將每個值做為這個對象的屬性返回。但在ES6中,利用解構(gòu)這一特性,可以直接返回一個數(shù)組,然后數(shù)組中的值會自動被解析到對應接收該值的變量中。\x0d\x0a\x0d\x0a6.參數(shù)默認值,不定參數(shù),拓展參數(shù)\x0d\x0a(1).默認參數(shù)值\x0d\x0a 現(xiàn)在可以在定義函數(shù)的時候指定參數(shù)的默認值了,而不用像以前那樣通過邏輯或操作符來達到目的了。\x0d\x0a(2).不定參數(shù)\x0d\x0a 不定參數(shù)是在函數(shù)中使用命名參數(shù)同時接收不定數(shù)量的未命名參數(shù)。這只是一種語法糖,在以前的JavaScript代碼中我們可以通過arguments變量來達到這一目的。不定參數(shù)的格式是三個句點后跟代表所有不定參數(shù)的變量名。比如下面這個例子中,?x代表了所有傳入add函數(shù)的參數(shù).\x0d\x0a(3).拓展參數(shù)\x0d\x0a 拓展參數(shù)則是另一種形式的語法糖,它允許傳遞數(shù)組或者類數(shù)組直接做為函數(shù)的參數(shù)而不用通過apply。\x0d\x0a\x0d\x0a6.let與const 關(guān)鍵字\x0d\x0a 可以把let看成var,只是它定義的變量被限定在了特定范圍內(nèi)才能使用,而離開這個范圍則無效。const則很直觀,用來定義常量,即無法被更改值的變量。\x0d\x0a\x0d\x0a7.for of 值遍歷\x0d\x0a 我們都知道for in 循環(huán)用于遍歷數(shù)組,類數(shù)組或?qū)ο?,ES6中新引入的for of循環(huán)功能相似,不同的是每次循環(huán)它提供的不是序號而是值。\x0d\x0a8.模塊\x0d\x0a 在ES6標準中,JavaScript原生支持module了。這種將JS代碼分割成不同功能的小塊進行模塊化的概念是在一些三方規(guī)范中流行起來的,比如CommonJS和AMD模式。\x0d\x0a\x0d\x0a9.Map,Set 和 WeakMap,WeakSet\x0d\x0a 這些是新加的集合類型,提供了更加方便的獲取屬性值的方法,不用像以前一樣用hasOwnProperty來檢查某個屬性是屬于原型鏈上的呢還是當前對象的。同時,在進行屬性值添加與獲取時有專門的get,set方法。\x0d\x0a\x0d\x0a10.Proxies\x0d\x0a Proxy可以監(jiān)聽對象身上發(fā)生了什么事情,并在這些事情發(fā)生后執(zhí)行一些相應的操作。一下子讓我們對一個對象有了很強的追蹤能力,同時在數(shù)據(jù)綁定方面也很有用處。\x0d\x0a\x0d\x0a11.Symbols\x0d\x0a 我們知道對象其實是鍵值對的集合,而鍵通常來說是字符串。而現(xiàn)在除了字符串外,我們還可以用symbol這種值來做為對象的鍵。Symbol是一種基本類型,像數(shù)字,字符串還有布爾一樣,它不是一個對象。Symbol 通過調(diào)用symbol函數(shù)產(chǎn)生,它接收一個可選的名字參數(shù),該函數(shù)返回的symbol是唯一的。之后就可以用這個返回值做為對象的鍵了。Symbol還可以用來創(chuàng)建私有屬性,外部無法直接訪問由symbol做為鍵的屬性值。\x0d\x0a\x0d\x0a12.Math,Number,String,Object 的新API\x0d\x0a 對Math,Number,String還有Object等添加了許多新的API。下面代碼同樣來自es6features,對這些新API進行了簡單展示。\x0d\x0a\x0d\x0a13.Promises\x0d\x0a Promises是處理異步操作的一種模式,之前在很多三方庫中有實現(xiàn),比如jQuery的deferred 對象。當你發(fā)起一個異步請求,并綁定了.when(), .done()等事件處理程序時,其實就是在應用promise模式。
一提及JavaScript,大家都會想到其基于對象、簡單、跨平臺,然而其靈活性也值得大家津津樂道的!
一、數(shù)值調(diào)用方法
Number.prototype.add?=?function(x){
return?this?+?x;
};
由于?Number?的實例就是數(shù)值,在數(shù)值上調(diào)用某個方法,數(shù)值會自動轉(zhuǎn)為實例對象
2['add'](3);?//5?調(diào)用方法之所以寫成8['add'],而不是8.add,是因為數(shù)值后面的點,會被解釋為小數(shù)點,而不是點運算符。
(2).add(3);?//5
等價于:
2..add(3);?//5第一個點解釋為小數(shù)點,第二個點解釋為點運算符。
Number.prototype.sub?=?function(x){
return?this?-?x;
}
2['add'](3)['sub'](1);//4?級聯(lián)調(diào)用
總之,現(xiàn)在我們可以在數(shù)值上直接調(diào)用方法了。
二、數(shù)值調(diào)用屬性
Number.prototype.double?=?function(){?return?this?+?this;?};
Number.prototype.square?=?function(){?return?this?*?this;?};
(2).double().square(); //16
2['double']()['square'](); //16
2..double().square(); //16
但是,可以將上述兩個方法的調(diào)用改為讀取屬性的方式,ES5規(guī)定,每個對象的屬性都有一個取值方法get,用來自定義該屬性的讀取操作。
Number.prototype?=?Object.defineProperty(Number.prototype,double,{?get:function(){?return