無(wú)廢話JavaScript教程(全集)第1/4頁(yè)
更新時(shí)間:2008年10月07日 23:28:35 作者:
許多讀者認(rèn)為我那本《JavaScript語(yǔ)言精髓與編程實(shí)踐》讀來(lái)辛苦,所以我一直想寫個(gè)簡(jiǎn)單的讀本。索性,這次就寫個(gè)最簡(jiǎn)單的吧。
《程序員》2008.09期有一篇名為《無(wú)廢話ErLang》的文章,這讓我想到了許多的諸如“無(wú)廢話C”、“無(wú)廢話書評(píng)”這類的文章,也想到了JavaScript可沒(méi)有一篇“無(wú)廢話”,所以決定開個(gè)篇來(lái)寫這個(gè)。與這個(gè)決定相關(guān)的,還因?yàn)榱硪粋€(gè)緣故:許多讀者認(rèn)為我那本《JavaScript語(yǔ)言精髓與編程實(shí)踐》讀來(lái)辛苦,所以我一直想寫個(gè)簡(jiǎn)單的讀本。索性,這次就寫個(gè)最簡(jiǎn)單的吧。
聲明一下:如果只想看復(fù)雜的東西,不要讀這篇文章了。
一、JavaScript最初其實(shí)是過(guò)程式的
追溯到1.0時(shí)代的JavaScript,其實(shí)是過(guò)程式的。它的基本特性有只有兩項(xiàng),一項(xiàng)是能夠直接放在網(wǎng)頁(yè)的HTML
標(biāo)簽中去接管事件,例如:
<input type="button" onclick="alert('hello')">
第二項(xiàng)則是支持一種簡(jiǎn)單的對(duì)象構(gòu)造器(函數(shù))。其實(shí)這個(gè)時(shí)代的構(gòu)造器不如說(shuō)是初始化函數(shù)更合適,它應(yīng)當(dāng)
這樣寫:
function MyObject() {
this.xxx = '...';
this.yyy = '...';
}
obj = new MyObject();
所以,早期的JavaScript無(wú)可置疑地背上了“基于對(duì)象的過(guò)程式腳本語(yǔ)言”的名頭,這一點(diǎn)也不冤枉。除了
上面兩項(xiàng)特性,JavaScript有著一些一般性的腳本語(yǔ)言的性質(zhì),例如:
-整個(gè).js文件一次性裝載到執(zhí)行環(huán)境(例如WEB瀏覽器)中,在經(jīng)歷一次語(yǔ)法分析之后,開始逐行執(zhí)行;
?。谏鲜稣Z(yǔ)法分析周期,(具名的)函數(shù)和用"var"聲明的變量被預(yù)先處理在一個(gè)標(biāo)識(shí)符表中,以便腳本代碼使用;
?。瓘娜值拇a行或函數(shù)調(diào)用開始執(zhí)行,整個(gè)過(guò)程中執(zhí)行不到的代碼不被查錯(cuò)(除第一步中的語(yǔ)法檢錯(cuò)外)。
也具有通常的過(guò)程式語(yǔ)言的性質(zhì),例如:
-有if/for/while/switch等語(yǔ)句;
-用function來(lái)聲明函數(shù),使用"(..)"來(lái)聲明它的形式參數(shù)表,以及表示函數(shù)調(diào)用和傳參;
?。愃朴贑語(yǔ)言的基本語(yǔ)法,包括使用"{..}"來(lái)表示代碼塊,以及使用"!="等運(yùn)算符號(hào);
-一個(gè)類似于Java語(yǔ)言的對(duì)象操作運(yùn)算符"."號(hào),和屬性、方法這樣的基本概念。
好了,現(xiàn)在你看到了一個(gè)基本的JavaScript語(yǔ)言,它的代碼只有象C一樣的函數(shù)與語(yǔ)句行,支持非常簡(jiǎn)單的面
向?qū)ο缶幊獭K,這其實(shí)也差不多是JavaScript的全部……嗯……全部的語(yǔ)法基礎(chǔ)觀念。如果你用過(guò)一門哪怕
稍稍入門一點(diǎn)的程序語(yǔ)言,你都會(huì)覺(jué)得JavaScript其實(shí)挺簡(jiǎn)單的。
是啊,“寫個(gè)函數(shù),然后調(diào)用它”,就這么簡(jiǎn)單。例如:
function hi() {
alert('hello, world.');
}
hi();
二、稍微復(fù)雜一點(diǎn)的是數(shù)據(jù)類型
JavaScript有六種基本數(shù)據(jù)類型,分為兩類。一類是值類型,即undefined,string, number和boolean;一類
是引用類型,即function和object。檢測(cè)數(shù)據(jù)X是何種類型,可以簡(jiǎn)單地使用"typeof X"來(lái)返回一個(gè)字符串。
值類型與引用類型在其它高級(jí)語(yǔ)言中,是用“訪問(wèn)過(guò)程中是傳值還是傳引用”來(lái)區(qū)別的。簡(jiǎn)單說(shuō),在下面函數(shù)
中:
function foo(X) {
}
X傳入的是值本身,還是一個(gè)指向該值的引用(你可以想象成指針),表明了X是何種類型。與其它語(yǔ)言不同的
是,JavaScript不在調(diào)用入口上加指示字來(lái)說(shuō)明傳值的方法,例如:
function foo(var X) {
// 一般高級(jí)語(yǔ)言中,var表明總是傳入變量X的引用
}
而是,簡(jiǎn)單的由腳本引擎根據(jù)實(shí)際傳入的X的數(shù)據(jù)類型來(lái)決定如何傳值。例如:
function foo(X) {
...
}
foo('123'); // <- 字符串'123'值
foo(aObj); // <- aObj是一個(gè)對(duì)象引用
能這樣處理的關(guān)鍵,在于JavaScript類型系統(tǒng)足夠簡(jiǎn)潔。六種基本類型包括了三個(gè)哲學(xué)化的觀念:能執(zhí)行的
與不能執(zhí)行的;對(duì)象或非對(duì)象;有(值)或無(wú)(值)。顯然,理解這種哲學(xué)性的思想并不容易,因?yàn)楦鼜?fù)雜一層
的、自包含的邏輯是:函數(shù)也是對(duì)象、值也是對(duì)象、無(wú)值也是值。
這就是JavaScript類型系統(tǒng)的全部了。如果你想簡(jiǎn)單的用用,那么你記住下面的就夠了:
-string、number、boolean三種簡(jiǎn)單值類型是用來(lái)傳給網(wǎng)頁(yè)顯示的;
?。璷bject用來(lái)存放其它的object、funtion或上述簡(jiǎn)單值類型,并用'.'運(yùn)算通過(guò)一個(gè)屬性名找到它們;
?。璾ndefined是用來(lái)檢測(cè)數(shù)據(jù)有效無(wú)效的;
?。璮unction是用來(lái)執(zhí)行的。
當(dāng)然,如果你要成為思想家或者語(yǔ)言學(xué)的瘋子,那么去思考上面的哲學(xué)化命題吧,我不攔著你。
三、能用鼻子想通的就是直接量了
或許很多人都搞不明白JavaScript中的直接量聲明,然而它確實(shí)是非常簡(jiǎn)單的。既然我們大多數(shù)高級(jí)語(yǔ)言都
支持常量聲明,甚至最原始的匯編語(yǔ)言也支持立即值——例如:
// in C
#define ABYTE 256
// in delphi
const
ABYTE = 256
; in asm
mov ah, 256
聲明一下:如果只想看復(fù)雜的東西,不要讀這篇文章了。
一、JavaScript最初其實(shí)是過(guò)程式的
追溯到1.0時(shí)代的JavaScript,其實(shí)是過(guò)程式的。它的基本特性有只有兩項(xiàng),一項(xiàng)是能夠直接放在網(wǎng)頁(yè)的HTML
標(biāo)簽中去接管事件,例如:
復(fù)制代碼 代碼如下:
<input type="button" onclick="alert('hello')">
第二項(xiàng)則是支持一種簡(jiǎn)單的對(duì)象構(gòu)造器(函數(shù))。其實(shí)這個(gè)時(shí)代的構(gòu)造器不如說(shuō)是初始化函數(shù)更合適,它應(yīng)當(dāng)
這樣寫:
復(fù)制代碼 代碼如下:
function MyObject() {
this.xxx = '...';
this.yyy = '...';
}
obj = new MyObject();
所以,早期的JavaScript無(wú)可置疑地背上了“基于對(duì)象的過(guò)程式腳本語(yǔ)言”的名頭,這一點(diǎn)也不冤枉。除了
上面兩項(xiàng)特性,JavaScript有著一些一般性的腳本語(yǔ)言的性質(zhì),例如:
-整個(gè).js文件一次性裝載到執(zhí)行環(huán)境(例如WEB瀏覽器)中,在經(jīng)歷一次語(yǔ)法分析之后,開始逐行執(zhí)行;
?。谏鲜稣Z(yǔ)法分析周期,(具名的)函數(shù)和用"var"聲明的變量被預(yù)先處理在一個(gè)標(biāo)識(shí)符表中,以便腳本代碼使用;
?。瓘娜值拇a行或函數(shù)調(diào)用開始執(zhí)行,整個(gè)過(guò)程中執(zhí)行不到的代碼不被查錯(cuò)(除第一步中的語(yǔ)法檢錯(cuò)外)。
也具有通常的過(guò)程式語(yǔ)言的性質(zhì),例如:
-有if/for/while/switch等語(yǔ)句;
-用function來(lái)聲明函數(shù),使用"(..)"來(lái)聲明它的形式參數(shù)表,以及表示函數(shù)調(diào)用和傳參;
?。愃朴贑語(yǔ)言的基本語(yǔ)法,包括使用"{..}"來(lái)表示代碼塊,以及使用"!="等運(yùn)算符號(hào);
-一個(gè)類似于Java語(yǔ)言的對(duì)象操作運(yùn)算符"."號(hào),和屬性、方法這樣的基本概念。
好了,現(xiàn)在你看到了一個(gè)基本的JavaScript語(yǔ)言,它的代碼只有象C一樣的函數(shù)與語(yǔ)句行,支持非常簡(jiǎn)單的面
向?qū)ο缶幊獭K,這其實(shí)也差不多是JavaScript的全部……嗯……全部的語(yǔ)法基礎(chǔ)觀念。如果你用過(guò)一門哪怕
稍稍入門一點(diǎn)的程序語(yǔ)言,你都會(huì)覺(jué)得JavaScript其實(shí)挺簡(jiǎn)單的。
是啊,“寫個(gè)函數(shù),然后調(diào)用它”,就這么簡(jiǎn)單。例如:
function hi() {
alert('hello, world.');
}
hi();
二、稍微復(fù)雜一點(diǎn)的是數(shù)據(jù)類型
JavaScript有六種基本數(shù)據(jù)類型,分為兩類。一類是值類型,即undefined,string, number和boolean;一類
是引用類型,即function和object。檢測(cè)數(shù)據(jù)X是何種類型,可以簡(jiǎn)單地使用"typeof X"來(lái)返回一個(gè)字符串。
值類型與引用類型在其它高級(jí)語(yǔ)言中,是用“訪問(wèn)過(guò)程中是傳值還是傳引用”來(lái)區(qū)別的。簡(jiǎn)單說(shuō),在下面函數(shù)
中:
function foo(X) {
}
X傳入的是值本身,還是一個(gè)指向該值的引用(你可以想象成指針),表明了X是何種類型。與其它語(yǔ)言不同的
是,JavaScript不在調(diào)用入口上加指示字來(lái)說(shuō)明傳值的方法,例如:
function foo(var X) {
// 一般高級(jí)語(yǔ)言中,var表明總是傳入變量X的引用
}
而是,簡(jiǎn)單的由腳本引擎根據(jù)實(shí)際傳入的X的數(shù)據(jù)類型來(lái)決定如何傳值。例如:
function foo(X) {
...
}
foo('123'); // <- 字符串'123'值
foo(aObj); // <- aObj是一個(gè)對(duì)象引用
能這樣處理的關(guān)鍵,在于JavaScript類型系統(tǒng)足夠簡(jiǎn)潔。六種基本類型包括了三個(gè)哲學(xué)化的觀念:能執(zhí)行的
與不能執(zhí)行的;對(duì)象或非對(duì)象;有(值)或無(wú)(值)。顯然,理解這種哲學(xué)性的思想并不容易,因?yàn)楦鼜?fù)雜一層
的、自包含的邏輯是:函數(shù)也是對(duì)象、值也是對(duì)象、無(wú)值也是值。
這就是JavaScript類型系統(tǒng)的全部了。如果你想簡(jiǎn)單的用用,那么你記住下面的就夠了:
-string、number、boolean三種簡(jiǎn)單值類型是用來(lái)傳給網(wǎng)頁(yè)顯示的;
?。璷bject用來(lái)存放其它的object、funtion或上述簡(jiǎn)單值類型,并用'.'運(yùn)算通過(guò)一個(gè)屬性名找到它們;
?。璾ndefined是用來(lái)檢測(cè)數(shù)據(jù)有效無(wú)效的;
?。璮unction是用來(lái)執(zhí)行的。
當(dāng)然,如果你要成為思想家或者語(yǔ)言學(xué)的瘋子,那么去思考上面的哲學(xué)化命題吧,我不攔著你。
三、能用鼻子想通的就是直接量了
或許很多人都搞不明白JavaScript中的直接量聲明,然而它確實(shí)是非常簡(jiǎn)單的。既然我們大多數(shù)高級(jí)語(yǔ)言都
支持常量聲明,甚至最原始的匯編語(yǔ)言也支持立即值——例如:
// in C
#define ABYTE 256
// in delphi
const
ABYTE = 256
; in asm
mov ah, 256
您可能感興趣的文章:
- JavaScript Break 和 Continue區(qū)別教程
- JavaScript入門教程(1) 什么是JS
- JavaScript 核心參考教程 內(nèi)置對(duì)象
- Aptana調(diào)試javascript圖解教程
- Javascript WebSocket使用實(shí)例介紹(簡(jiǎn)明入門教程)
- javascript教程:關(guān)于if簡(jiǎn)寫語(yǔ)句優(yōu)化的方法
- JavaScript基礎(chǔ)教程之a(chǎn)lert彈出提示框?qū)嵗?/a>
- JavaScript中的style.cssText使用教程
- JavaScript插件化開發(fā)教程 (一)
- JavaScript插件化開發(fā)教程 (二)
- Eclipse配置Javascript開發(fā)環(huán)境圖文教程
- javascript入門教程基礎(chǔ)篇
相關(guān)文章
javascript二維數(shù)組和對(duì)象的深拷貝與淺拷貝實(shí)例分析
這篇文章主要介紹了javascript二維數(shù)組和對(duì)象的深拷貝與淺拷貝,結(jié)合實(shí)例形式分析了JavaScript針對(duì)數(shù)組與對(duì)象的深拷貝及淺拷貝相關(guān)操作技巧,需要的朋友可以參考下2019-10-10
JavaScript使用DeviceOne開發(fā)實(shí)戰(zhàn)(四)仿優(yōu)酷視頻應(yīng)用
這篇文章主要介紹了JavaScript使用DeviceOne開發(fā)實(shí)戰(zhàn)(四)仿優(yōu)酷視頻應(yīng)用的相關(guān)資料,需要的朋友可以參考下2015-12-12
原生JS實(shí)現(xiàn)簡(jiǎn)單的輪播圖效果
這篇文章主要為大家詳細(xì)介紹了原生JS實(shí)現(xiàn)簡(jiǎn)單的輪播圖效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07
javascript封裝addLoadEvent實(shí)現(xiàn)頁(yè)面同時(shí)加載執(zhí)行多個(gè)函數(shù)的方法
這篇文章主要介紹了javascript封裝addLoadEvent實(shí)現(xiàn)頁(yè)面同時(shí)加載執(zhí)行多個(gè)函數(shù)的方法,實(shí)例分析了onload事件執(zhí)行的原理與同時(shí)執(zhí)行多個(gè)函數(shù)功能的實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-07-07

