javascript的優(yōu)缺點(diǎn)
成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比南澗網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式南澗網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋南澗地區(qū)。費(fèi)用合理售后完善,10多年實(shí)體公司更值得信賴。
(1).javascript的優(yōu)點(diǎn):
1.javascript減少網(wǎng)絡(luò)傳輸。
在javascript這樣的用戶端腳本語言出現(xiàn)之前,傳統(tǒng)的數(shù)據(jù)提交和驗(yàn)證工作均由用戶端瀏覽器通過網(wǎng)絡(luò)傳輸?shù)椒?wù)器開發(fā)上進(jìn)行。如果數(shù)據(jù)量很大,這對于網(wǎng)絡(luò)和服務(wù)器開發(fā)的資源來說實(shí)在是一種無形的浪費(fèi)。而使用javascript就可以在客戶端進(jìn)行數(shù)據(jù)驗(yàn)證。
2.javascript方便操縱html對象。
javascript可以方便地操縱各種頁面中的對象,用戶可以使用javascript來控制頁面中各個(gè)元素的外觀、狀態(tài)甚至運(yùn)行方式,javascript可以根據(jù)用戶的需要“定制”瀏覽器,從而使網(wǎng)頁更加友好。
3.javascript支持分布式應(yīng)用 運(yùn)算。
javascript可以使多種任務(wù)僅在用戶端就可以完成,而不需要網(wǎng)絡(luò)和服務(wù)器開發(fā)的參與,從而支持分布式應(yīng)用 的運(yùn)算和處理。
(2).javascript的局限性:
1.各瀏覽器廠商對javascript支持程度不同。
目前在互聯(lián)網(wǎng) 上有很多瀏覽器,如firefox、internet explorer、opera等,但每種瀏覽器支持javascript的程度是不一樣的,不同的瀏覽器在瀏覽一個(gè)帶有javascript腳本的主頁時(shí),由于對javascript的支持稍有不同,其效果會有一定的差距,有時(shí)甚至?xí)@示不出來。
2.“web安全性”對javascript一些功能犧牲。
當(dāng)把javascript的一個(gè)設(shè)計(jì)目標(biāo)設(shè)定為“web安全性”時(shí),就需要犧牲javascript的一些功能。因此,純粹的javascript將不能打開、讀寫和保存用戶計(jì)算機(jī)上的文件。其有權(quán)訪問的唯一信息就是該javascript所嵌入開發(fā) 的那個(gè)web主頁中的信息,簡言之,javascript將只存在于它自己的小小世界—web主頁里。
JavaScript的特點(diǎn)
(1).一種解釋性執(zhí)行的腳本語言。
同其他腳本語言一樣,JavaScript也是一種解釋性語言,其提供了一個(gè)非常方便的開發(fā)過程。JavaScript的語法基本結(jié)構(gòu)形式與C、C++、Java十分類似。但在使用前,不像這些語言需要先編譯,而是在程序運(yùn)行過程中被逐行地解釋。JavaScript與HTML標(biāo)識結(jié)合在一起,從而方便用戶的使用操作。
(2).一種基于對象的腳本語言。
其也可以被看作是一種面向?qū)ο蟮恼Z言,這意味著JavaScript能運(yùn)用其已經(jīng)創(chuàng)建的對象。因此,許多功能可以來自于腳本環(huán)境中對象的方法與腳本的相互作用。
(3).一種簡單弱類型腳本語言。
其簡單性主要體現(xiàn)在:首先,JavaScript是一種基于Java基本語句和控制流之上的簡單而緊湊的設(shè)計(jì),從而對于使用者學(xué)習(xí)Java或其他C語系的編程語言是一種非常好的過渡,而對于具有C語系編程功底的程序員來說,JavaScript上手也非常容易;其次,其變量類型是采用弱類型,并未使用嚴(yán)格的數(shù)據(jù)類型。
(4).一種相對安全腳本語言。
JavaScript作為一種安全性語言,不被允許訪問本地的硬盤,且不能將數(shù)據(jù)存入服務(wù)器,不允許對網(wǎng)絡(luò)文檔進(jìn)行修改和刪除,只能通過瀏覽器實(shí)現(xiàn)信息瀏覽或動態(tài)交互。從而有效地防止數(shù)據(jù)的丟失或?qū)ο到y(tǒng)的非法訪問。
(5).一種事件驅(qū)動腳本語言。
JavaScript對用戶的響應(yīng),是以事件驅(qū)動的方式進(jìn)行的。在網(wǎng)頁(Web Page)中執(zhí)行了某種操作所產(chǎn)生的動作,被稱為“事件”(Event)。例如按下鼠標(biāo)、移動窗口、選擇菜單等都可以被視為事件。當(dāng)事件發(fā)生后,可能會引起相應(yīng)的事件響應(yīng),執(zhí)行某些對應(yīng)的腳本,這種機(jī)制被稱為“事件驅(qū)動”。
(6).一種跨平臺性腳本語言。
JavaScript依賴于瀏覽器本身,與操作環(huán)境無關(guān),只要計(jì)算機(jī)能運(yùn)行瀏覽器,并支持JavaScript的瀏覽器,就可正確執(zhí)行,從而實(shí)現(xiàn)了“編寫一次,走遍天下”的夢想。
因此,JavaScript是一種新的描述語言,其可以被嵌入到HTML文件中。JavaScript語言可以做到響應(yīng)使用者的需求事件(例如表單的輸入),而不需要任何的網(wǎng)絡(luò)來回傳輸資料。所以當(dāng)一位使用者輸入一項(xiàng)資料時(shí),此資料數(shù)據(jù)不用經(jīng)過傳給服務(wù)器(server)處理再傳回來的過程,而直接可以被客戶端(client)的應(yīng)用程序所處理。
JavaScript的基本特點(diǎn)如下:
是一種解釋性腳本語言。
主要用來向HTML頁面添加交互行為。
可以直接嵌入HTML頁面,但寫成單獨(dú)的js文件有利于結(jié)構(gòu)和行為的分離。
D、面向?qū)ο蟆?/p>
JavaScript腳本語言具有以下特點(diǎn):
1、腳本語言。JavaScript是一種解釋型的腳本語言,C、C++等語言先編譯后執(zhí)行,而JavaScript是在程序的運(yùn)行過程中逐行進(jìn)行解釋。
2、基于對象。JavaScript是一種基于對象的腳本語言,它不僅可以創(chuàng)建對象,也能使用現(xiàn)有的對象。
3、簡單。JavaScript語言中采用的是弱類型的變量類型,對使用的數(shù)據(jù)類型未做出嚴(yán)格的要求,是基于Java基本語句和控制的腳本語言,其設(shè)計(jì)簡單緊湊。
4、動態(tài)性。JavaScript是一種采用事件驅(qū)動的腳本語言,它不需要經(jīng)過Web服務(wù)器就可以對用戶的輸入做出響應(yīng)。在訪問一個(gè)網(wǎng)頁時(shí),鼠標(biāo)在網(wǎng)頁中進(jìn)行鼠標(biāo)點(diǎn)擊或上下移、窗口移動等操作JavaScript都可直接對這些事件給出相應(yīng)的響應(yīng)。
5、跨平臺性。JavaScript腳本語言不依賴于操作系統(tǒng),僅需要瀏覽器的支持。因此一個(gè)JavaScript腳本在編寫后可以帶到任意機(jī)器上使用,前提上機(jī)器上的瀏覽器支 持JavaScript腳本語言,JavaScript已被大多數(shù)的瀏覽器所支持。
擴(kuò)展資料:
js的日常用途:
1、嵌入動態(tài)文本于HTML頁面。
2、對瀏覽器事件做出響應(yīng)。
3、讀寫HTML元素。
4、在數(shù)據(jù)被提交到服務(wù)器之前驗(yàn)證數(shù)據(jù)。
5、檢測訪客的瀏覽器信息。
6、控制cookies,包括創(chuàng)建和修改等。
7、基于Node.js技術(shù)進(jìn)行服務(wù)器端編程。
EMCAScript6(ES6)是最新的Javascript,它包含了一些很棒的新特性。這些特性擁有不同程度的復(fù)雜性,對于簡單的腳本和復(fù)雜的應(yīng)用程序都非常的有用。\x0d\x0a\x0d\x0a增加的新特性:\x0d\x0a\x0d\x0a1.箭頭操作符\x0d\x0a 如果你會C#或者Java,你肯定知道lambda表達(dá)式,ES6中新增的箭頭操作符=便有異曲同工之妙。它簡化了函數(shù)的書寫。操作符左邊為輸入的參數(shù),而右邊則是進(jìn)行的操作以及返回的值Inputs=outputs。\x0d\x0a 我們知道在JS中回調(diào)是經(jīng)常的事,而一般回調(diào)又以匿名函數(shù)的形式出現(xiàn),每次都需要寫一個(gè)function,甚是繁瑣。當(dāng)引入箭頭操作符后可以方便地寫回調(diào)了。\x0d\x0a\x0d\x0a2.類的支持\x0d\x0a ES6中添加了對類的支持,引入了class關(guān)鍵字(其實(shí)class在JavaScript中一直是保留字,目的就是考慮到可能在以后的新版本中會用到,現(xiàn)在終于派上用場了)。JS本身就是面向?qū)ο蟮?,ES6中提供的類實(shí)際上只是JS原型模式的包裝。現(xiàn)在提供原生的class支持后,對象的創(chuàng)建,繼承更加直觀了,并且父類方法的調(diào)用,實(shí)例化,靜態(tài)方法和構(gòu)造函數(shù)等概念都更加形象化。\x0d\x0a\x0d\x0a3.增強(qiáng)的對象字面量\x0d\x0a 對象字面量被增強(qiáng)了,寫法更加簡潔與靈活,同時(shí)在定義對象的時(shí)候能夠做的事情更多了。具體表現(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#等后端強(qiáng)類型語言的話,對此功能應(yīng)該不會陌生。\x0d\x0a\x0d\x0a5.解構(gòu)\x0d\x0a 自動解析數(shù)組或?qū)ο笾械闹?。比如若一個(gè)函數(shù)要返回多個(gè)值,常規(guī)的做法是返回一個(gè)對象,將每個(gè)值做為這個(gè)對象的屬性返回。但在ES6中,利用解構(gòu)這一特性,可以直接返回一個(gè)數(shù)組,然后數(shù)組中的值會自動被解析到對應(yīng)接收該值的變量中。\x0d\x0a\x0d\x0a6.參數(shù)默認(rèn)值,不定參數(shù),拓展參數(shù)\x0d\x0a(1).默認(rèn)參數(shù)值\x0d\x0a 現(xiàn)在可以在定義函數(shù)的時(shí)候指定參數(shù)的默認(rèn)值了,而不用像以前那樣通過邏輯或操作符來達(dá)到目的了。\x0d\x0a(2).不定參數(shù)\x0d\x0a 不定參數(shù)是在函數(shù)中使用命名參數(shù)同時(shí)接收不定數(shù)量的未命名參數(shù)。這只是一種語法糖,在以前的JavaScript代碼中我們可以通過arguments變量來達(dá)到這一目的。不定參數(shù)的格式是三個(gè)句點(diǎn)后跟代表所有不定參數(shù)的變量名。比如下面這個(gè)例子中,?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)才能使用,而離開這個(gè)范圍則無效。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標(biāo)準(zhǔn)中,JavaScript原生支持module了。這種將JS代碼分割成不同功能的小塊進(jìn)行模塊化的概念是在一些三方規(guī)范中流行起來的,比如CommonJS和AMD模式。\x0d\x0a\x0d\x0a9.Map,Set 和 WeakMap,WeakSet\x0d\x0a 這些是新加的集合類型,提供了更加方便的獲取屬性值的方法,不用像以前一樣用hasOwnProperty來檢查某個(gè)屬性是屬于原型鏈上的呢還是當(dāng)前對象的。同時(shí),在進(jìn)行屬性值添加與獲取時(shí)有專門的get,set方法。\x0d\x0a\x0d\x0a10.Proxies\x0d\x0a Proxy可以監(jiān)聽對象身上發(fā)生了什么事情,并在這些事情發(fā)生后執(zhí)行一些相應(yīng)的操作。一下子讓我們對一個(gè)對象有了很強(qiáng)的追蹤能力,同時(shí)在數(shù)據(jù)綁定方面也很有用處。\x0d\x0a\x0d\x0a11.Symbols\x0d\x0a 我們知道對象其實(shí)是鍵值對的集合,而鍵通常來說是字符串。而現(xiàn)在除了字符串外,我們還可以用symbol這種值來做為對象的鍵。Symbol是一種基本類型,像數(shù)字,字符串還有布爾一樣,它不是一個(gè)對象。Symbol 通過調(diào)用symbol函數(shù)產(chǎn)生,它接收一個(gè)可選的名字參數(shù),該函數(shù)返回的symbol是唯一的。之后就可以用這個(gè)返回值做為對象的鍵了。Symbol還可以用來創(chuàng)建私有屬性,外部無法直接訪問由symbol做為鍵的屬性值。\x0d\x0a\x0d\x0a12.Math,Number,String,Object 的新API\x0d\x0a 對Math,Number,String還有Object等添加了許多新的API。下面代碼同樣來自es6features,對這些新API進(jìn)行了簡單展示。\x0d\x0a\x0d\x0a13.Promises\x0d\x0a Promises是處理異步操作的一種模式,之前在很多三方庫中有實(shí)現(xiàn),比如jQuery的deferred 對象。當(dāng)你發(fā)起一個(gè)異步請求,并綁定了.when(), .done()等事件處理程序時(shí),其實(shí)就是在應(yīng)用promise模式。