javascript設計,javascript簡介

本文目錄一覽:

javascript有哪些不合理的設計缺陷

一、為什麼Javascript有設計缺陷?

這裡有三個客觀原因,導致Javascript的設計不夠完善。

1. 設計階段過於倉促

Javascript的設計,其實只用了十天。而且,設計師是為了向公司交差,本人並不願意這樣設計(參見《Javascript誕生記》)。

另一方面,這種語言的設計初衷,是為了解決一些簡單的網頁互動(比如,檢查”用戶名”是否填寫),並沒有考慮複雜應用的需要。設計者做夢也想不到,Javascript將來可以寫出像Gmail這種極其龐大複雜的網頁。

2. 沒有先例

Javascript同時結合了函數式編程和面向對象編程的特點,這很可能是歷史上的第一例。而且直到今天為止,Javascript仍然是世界上唯一使用Prototype繼承模型的主要語言。這使得它沒有設計先例可以參考。

3. 過早的標準化

Javascript的發展非常快,根本沒有時間調整設計。

1995年5月,設計方案定稿;10月,解釋器開發成功;12月,向市場推出,立刻被廣泛接受,全世界的用戶大量使用。Javascript缺乏一個從小到大、慢慢積累用戶的過程,而是連續的爆炸式擴散增長。大量的既成網頁和業餘網頁設計者的參與,使得調整語言規格困難重重。

更糟的是,Javascript的規格還沒來及調整,就固化了。

1996年8月,微軟公司強勢介入,宣布推出自己的腳本語言Jscript;11月,為了壓制微軟,網景公司決定申請Javascript的國際標準;1997年6月,第一個國際標準ECMA-262正式頒佈。

也就是說,Javascript推出一年半之後,國際標準就問世了。設計缺陷還沒有充分暴露就成了標準。相比之下,C語言問世將近20年之後,國際標準才頒佈。

二、Javascript的10個設計缺陷

1. 不適合開發大型程序

Javascript沒有名稱空間(namespace),很難模塊化;沒有如何將代碼分佈在多個文件的規範;允許同名函數的重複定義,後面的定義可以覆蓋前面的定義,很不利於模塊化加載。

2. 非常小的標準庫

Javascript提供的標準函數庫非常小,只能完成一些基本操作,很多功能都不具備。

3. null和undefined

null屬於對象(object)的一種,意思是該對象為空;undefined則是一種數據類型,表示未定義。

typeof null; // object

typeof undefined; // undefined

兩者非常容易混淆,但是含義完全不同。

var foo;

alert(foo == null); // true

alert(foo == undefined); // true

alert(foo === null); // false

alert(foo === undefined); // true

在編程實踐中,null幾乎沒用,根本不應該設計它。

4. 全局變量難以控制

Javascript的全局變量,在所有模塊中都是可見的;任何一個函數內部都可以生成全局變量,這大大加劇了程序的複雜性。

a = 1;

(function(){

b=2;

alert(a);

})(); // 1

alert(b); //2

5. 自動插入行尾分號

Javascript的所有語句,都必須以分號結尾。但是,如果你忘記加分號,解釋器並不報錯,而是為你自動加上分號。有時候,這會導致一些難以發現的錯誤。

比如,下面這個函數根本無法達到預期的結果,返回值不是一個對象,而是undefined。

function(){

return

{

i=1

};

}

原因是解釋器自動在return語句後面加上了分號。

function(){

return;

{

i=1

};

}

6. 加號運算符

+號作為運算符,有兩個含義,可以表示數字與數字的和,也可以表示字符與字符的連接。

alert(1+10); // 11

alert(“1″+”10”); // 110

如果一個操作項是字符,另一個操作項是數字,則數字自動轉化為字符。

alert(1+”10″); // 110

alert(“10″+1); // 101

這樣的設計,不必要地加劇了運算的複雜性,完全可以另行設置一個字符連接的運算符。

7. NaN

NaN是一種數字,表示超出了解釋器的極限。它有一些很奇怪的特性:

NaN === NaN; //false

NaN !== NaN; //true

alert( 1 + NaN ); // NaN

與其設計NaN,不如解釋器直接報錯,反而有利於簡化程序。

8. 數組和對象的區分

由於Javascript的數組也屬於對象(object),所以要區分一個對象到底是不是數組,相當麻煩。Douglas Crockford的代碼是這樣的:

if ( arr

typeof arr === ‘object’

typeof arr.length === ‘number’

!arr.propertyIsEnumerable(‘length’)){

alert(“arr is an array”);

}

9. == 和 ===

==用來判斷兩個值是否相等。當兩個值類型不同時,會發生自動轉換,得到的結果非常不符合直覺。

“” == “0” // false

0 == “” // true

0 == “0” // true

false == “false” // false

false == “0” // true

false == undefined // false

false == null // false

null == undefined // true

” \t\r\n” == 0 // true

因此,推薦任何時候都使用”===”(精確判斷)比較符。

10. 基本類型的包裝對象

Javascript有三種基本數據類型:字符串、數字和布爾值。它們都有相應的建構函數,可以生成字符串對象、數字對象和布爾值對象。

new Boolean(false);

new Number(1234);

new String(“Hello World”);

與基本數據類型對應的對象類型,作用很小,造成的混淆卻很大。

alert( typeof 1234); // number

alert( typeof new Number(1234)); // object

關於Javascript的更多怪異行為,請參見Javascript Garden和wtfjs.com。

三、如何看待Javascript的設計缺陷?

既然Javascript有缺陷,數量還不少,那麼它是不是一種很糟糕的語言?有沒有前途?

回答是Javascript並不算糟糕,相反它的編程能力很強大,前途很光明。

首先,如果遵守良好的編程規範,加上第三方函數庫的幫助,Javascript的這些缺陷大部分可以迴避。

其次,Javascript目前是網頁編程的唯一語言,只要互聯網繼續發展,它就必然一起發展。目前,許多新項目大大擴展了它的用途,node.js使得Javascript可以用於後端的服務器編程,coffeeScript使你可以用python和ruby的語法,撰寫Javascript。

最後,只要發佈新版本的語言標準(比如 ECMAscript 5),就可以彌補這些設計缺陷。當然,標準的發佈和標準的實現是兩回事,上述的很多缺陷也許會一直伴隨到Javascript存在的最後一天。

《JavaScript設計模式》pdf下載在線閱讀全文,求百度網盤雲資源

《JavaScript設計模式》百度網盤pdf最新全集下載:

鏈接:

?pwd=i1tg 提取碼:i1tg

簡介:《JavaScript設計模式》共分六篇四十章,首先討論了幾種函數的編寫方式,體會JavaScript在編程中的靈活性;然後講解了面向對象編程的知識,其中討論了類的創建、數據的封裝以及類之間的繼承;最後探討了各種模式的技術,如簡單工廠模式,包括工廠方法模式、抽象工廠模式、建造者模式、原型模式、單例模式,以及外觀模式,包括適配器模式。本書還講解了幾種適配器、代理模式、裝飾者模式和MVC模式,討論了如何實現對數據、視圖、控制器的分離。在講解MVP模式時,討論了如何解決數據與視圖之間的耦合,並實現了一個模板生成器;講解MVVM模式時,討論了雙向綁定對MVC的模式演化。  

javascript要學多久?

從0基礎到勉強能用,只求入門的話2-3個月綽綽有餘,但是要精通的話肯定是需要花更多時間日積月累了,選擇培訓的話是要參與一些項目聯練習的,因為JavaScript很多技巧不通過項目這樣比較大的歷練是用不上的。千鋒官網每日更新最新軟件開發基礎知識內容,鞏固日常學習中的基礎技能。更有免費的軟件開發視頻教程幫助學員快速學習。 千鋒教育就有線上免費的軟件開發公開課,。

Web前端培訓多長時間,只能說簡單入門在五到六個月,真正要達到精通級別的話,需要天賦跟經驗的積累。正所謂,一入前端深似海,從此回首無邊界。活到老,學到老。只要步入了前端開發你就會發現,前端真的是要一直不停的學,不停的學。千鋒教育集團目前已與國內4000多家企業建立人才輸送合作,與500多所大學建立實訓就業合作,每年為各大企業輸送上萬名移動開發工程師,每年有數十萬名學員受益於千鋒教育組織的技術研討會、技術培訓課、網絡公開課及免費教學視頻。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/192664.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-01 10:28
下一篇 2024-12-01 10:28

相關推薦

  • Java2D物理引擎簡介及應用

    本文將介紹Java2D物理引擎的基本概念、實現原理及應用案例,以及對應代碼示例。 一、物理引擎概述 物理引擎是一種計算機程序,用於模擬物理系統中的對象和其互動,如重力、碰撞、彈力等…

    編程 2025-04-29
  • Django框架:從簡介到項目實戰

    本文將從Django的介紹,以及如何搭建Django環境開始,逐步深入到Django模型、視圖、模板、表單,最後通過一個小型項目實戰,進行綜合性的應用,讓讀者獲得更深入的學習。 一…

    編程 2025-04-28
  • 使用JavaScript日期函數掌握時間

    在本文中,我們將深入探討JavaScript日期函數,並且從多個視角介紹其應用方法和重要性。 一、日期的基本表示與獲取 在JavaScript中,使用Date對象來表示日期和時間,…

    編程 2025-04-28
  • JavaScript中使用new Date轉換為YYYYMMDD格式

    在JavaScript中,我們通常會使用Date對象來表示日期和時間。當我們需要在網站上顯示日期時,很多情況下需要將Date對象轉換成YYYYMMDD格式的字符串。下面我們來詳細了…

    編程 2025-04-27
  • Python三體運動簡介

    本文將從多個方面詳細闡述Python三體運動,包括什麼是三體運動,三體運動的公式與原理,實現三體運動的Python代碼等內容。 一、什麼是三體運動? 三體運動是指三個天體相互作用所…

    編程 2025-04-27
  • Java中的殭屍進程簡介與解決方法

    本文將對Java中的殭屍進程進行詳細闡述,並給出幾種解決方法。 一、殭屍進程的概念 在操作系統中,進程是指正在執行的程序。當一個進程創建了一個子進程,而該子進程完成了任務卻沒有被父…

    編程 2025-04-27
  • PyTorch模塊簡介

    PyTorch是一個開源的機器學習框架,它基於Torch,是一個Python優先的深度學習框架,同時也支持C++,非常容易上手。PyTorch中的核心模塊是torch,提供一些很好…

    編程 2025-04-27
  • Python操作DB文件簡介

    本文將從以下幾個方面詳細闡述如何使用Python操作DB文件: 創建和打開DB文件 執行SQL語句 讀取和寫入數據 關閉DB文件 一、創建和打開DB文件 Python內置了SQLi…

    編程 2025-04-27
  • Python寫Word模板簡介

    Python可以用來生成Word文檔,讓你可以自動化生成報表、合同、申請表等文檔。本文將從多個方面詳細介紹Python寫Word模板的方法和技巧。 一、Word模板的結構 要生成W…

    編程 2025-04-27
  • 雪峰老師簡介

    解答:深度剖析雪峰老師的IT技術經驗 一、教育背景 雪峰老師本科畢業於西安電子科技大學,獲得計算機科學與技術學位。隨後,他在美國獲得了計算機科學碩士學位。 雪峰老師所在大學是國內頂…

    編程 2025-04-27

發表回復

登錄後才能評論