每天一句:沒有方向感辫红,我們不知道自己走向哪里贴妻。沒有方向感名惩,我們所有的努力就缺乏一個(gè)標(biāo)準(zhǔn)娩鹉,我們每時(shí)每刻所有的努力都處在一種混沌與盲目的狀態(tài)之中:沒有對(duì)錯(cuò)、沒有進(jìn)退巢株、沒有成敗得失。
一困檩、JavaScript起源
JavaScript誕生于1995年悼沿,它當(dāng)時(shí)的目的是為了表單輸入的驗(yàn)證糟趾。因?yàn)樵贘avaScript問世之前义郑,表單的驗(yàn)證都是通過服務(wù)器端驗(yàn)證非驮。而當(dāng)時(shí)都是電話撥號(hào)上網(wǎng)年代,服務(wù)器驗(yàn)證數(shù)據(jù)是一件非常痛苦的事情芙扎。
二星岗、什么是JavaScript
JavaScript是一種具有面向?qū)ο竽芰Α⒔忉屝偷某绦蛟O(shè)計(jì)語言戒洼。更具體一點(diǎn)俏橘,它是基于對(duì)象和事件驅(qū)動(dòng)并具有相對(duì)安全性的客戶端腳本語言。因?yàn)樗恍枰谡Z言環(huán)境下運(yùn)行圈浇,而只需要支持它的瀏覽器即可寥掐。主要目的是,驗(yàn)證發(fā)往服務(wù)器端的數(shù)據(jù)汉额、增加web互動(dòng)曹仗、加強(qiáng)用戶體驗(yàn)度等蠕搜。
【JavaScript與Java怎茫,就像是雷鋒塔與雷鋒,兩者之間并沒有任何關(guān)系】
三妓灌、JavaScript歷史
誕生
1995年轨蛤,當(dāng)時(shí)工作在Netscape(網(wǎng)景)公司的布蘭登為解決類似于“向服務(wù)器提交數(shù)據(jù)之前驗(yàn)證”的問題。在Netscape Navigator2.0與Sun公司聯(lián)手開發(fā)一個(gè)稱之為LiveScript的腳本語言虫埂。為了營銷便利祥山,之后更名為JavaScript。邪惡的后來者
因?yàn)镴avaScript1.0如此成功掉伏,所以微軟也決定進(jìn)軍瀏覽器缝呕,發(fā)布了IE3.0并搭載了一個(gè)JavaScript的克隆版,叫做JScript斧散。標(biāo)準(zhǔn)的重要
在微軟進(jìn)入后供常,有3種不同的JavaScript版本同時(shí)存在: Netscape Navigator3.0中的JavaScript、IE中的JScript鸡捐、CEnvi中的ScriptEase栈暇。與其他編程語言不同的是,JavaScript并沒有一個(gè)標(biāo)準(zhǔn)來統(tǒng)一其語法或特性箍镜,而這3種不同的版本恰恰突出了這個(gè)問題源祈,隨著業(yè)界擔(dān)心的增加,這個(gè)語言標(biāo)準(zhǔn)化顯然已經(jīng)勢(shì)在必行色迂。ECMA
1997年香缺,JavaScript1.1作為一個(gè)草案提交給歐洲計(jì)算機(jī)制造協(xié)會(huì)(ECMA)。第39技術(shù)委員會(huì)(TC39)被委派來“標(biāo)準(zhǔn)化一個(gè)通用歇僧、跨平臺(tái)赫悄、中立于廠商的腳本語言的語法和語義”。由于自Netscape、Sun埂淮、微軟姑隅、Borland和其他一些對(duì)腳本編程感興趣的公司的程序員組成的TC39錘煉出了ECMA-262,該標(biāo)準(zhǔn)定義了叫做ECMAScript的全新腳本語言倔撞。靈敏的微軟讲仰、遲鈍的網(wǎng)景
雖然網(wǎng)景開發(fā)了JavaScript并首先提交給ECMA標(biāo)準(zhǔn)化,但因計(jì)劃改寫整個(gè)瀏覽器引擎的緣故痪蝇,網(wǎng)景玩了整整一年才推出“完全遵守ECMA規(guī)范”的JavaScript1.3鄙陡。而微軟早在一年前就推出了“完全遵守ECMA規(guī)范”的IE4.0。這導(dǎo)致一個(gè)直接惡果:JScript稱為JavaScript語言的事實(shí)標(biāo)準(zhǔn)躏啰。山寨打敗原創(chuàng)
JScript成為JavaScript語言的事實(shí)標(biāo)準(zhǔn)趁矾,加上window綁定著IE瀏覽器,幾乎占據(jù)全部市場(chǎng)份額给僵,因此毫捣,1999年之后,所有的網(wǎng)頁都是基于JScript來開發(fā)的帝际。而JavaScript1.x編程可憐的兼容者蔓同。網(wǎng)景的沒落與火狐的崛起
網(wǎng)景在微軟強(qiáng)大的攻勢(shì)下,1998年全面潰敗蹲诀。但斑粱,星星之火可以燎原,同年成立Mozilla項(xiàng)目中Firefox(火狐瀏覽器)在支持JavaScript方面無可比擬脯爪,在后來的時(shí)間里一步步蠶食IE的市場(chǎng)则北,稱為全球第二大瀏覽器。谷歌的野心
谷歌瀏覽器痕慢,是一個(gè)由谷歌公司開發(fā)的開放原始碼網(wǎng)頁瀏覽器咒锻。以簡(jiǎn)潔的頁面,極速的瀏覽守屉,一舉成為全球第三大瀏覽器。隨著移動(dòng)互聯(lián)網(wǎng)的普及蒿辙,嵌有Android系統(tǒng)的平板電腦和智能手機(jī)拇泛,在瀏覽器這塊將大有作為。蘋果的戰(zhàn)略
Safari瀏覽器是蘋果公司各種產(chǎn)品的默認(rèn)瀏覽器思灌,在蘋果的一體機(jī)(iMac)俺叭、筆記本(Mac)、MP4(ipod)泰偿、智能手機(jī)(iPhone)熄守、平板(iPad),并且在windows和Linux平臺(tái)都有相應(yīng)版本。目前市場(chǎng)份額全球第四裕照,但隨著蘋果的產(chǎn)品不斷的深入人心攒发,具有稱霸之勢(shì)。幸存者
Opera的全球市場(chǎng)份額第五晋南,2%左右惠猿。它的背后沒有財(cái)力雄厚的大公司,但它從“瀏覽器大戰(zhàn)”存活下來的负间,有著非常大的潛力偶妖。
四、JavaScript核心
雖然JavaScript和ECMAScript通常被人們用來表達(dá)相同的含義政溃,但JavaScript的含義卻比ECMA-262中規(guī)定的要多得多趾访。一個(gè)完整的JavaScript應(yīng)該由三個(gè)不同的部分組成: 核心(ECMAScript)、文檔對(duì)象模型(DOM)董虱、瀏覽器對(duì)象模型(BOM)扼鞋。
ECMAScript介紹
由ECMAScript-262定義的ECMAScript與WEB瀏覽器的沒有依賴關(guān)系。ECMAScript定義的只是這門語言的基礎(chǔ)空扎,而在此基礎(chǔ)之上可以構(gòu)建更完善的腳本語言藏鹊。我們常見的WEB瀏覽器只是ECMAScript實(shí)現(xiàn)可能的宿主環(huán)境之一。文檔對(duì)象模型(DOM)
文檔對(duì)象模型(DOM转锈,Document Object Model)是針對(duì)XML但經(jīng)過擴(kuò)展用于HTML的應(yīng)用程序編程接口(API盘寡,Application Programming Interface)。瀏覽器對(duì)象模型(BOM)
訪問和操作瀏覽器窗口的瀏覽器對(duì)象模型(BOM撮慨,Browser Object Model)竿痰。開發(fā)人員使用BOM可以控制瀏覽器顯示頁面以外的部分。而BOM真正與眾不同的地方(也是經(jīng)常會(huì)導(dǎo)致問題的地方)砌溺,還是它作為JavaScript實(shí)現(xiàn)的一部分影涉,至今仍沒有相關(guān)的標(biāo)準(zhǔn)。JavaScript版本
身為Netscape(網(wǎng)景)“繼承人”的Mozilla公司规伐,是目前唯一沿用最初的JavaScript版本編號(hào)的瀏覽器開發(fā)商蟹倾。在網(wǎng)景JavaScript轉(zhuǎn)手給Mozilla項(xiàng)目的時(shí)候,JavaScript在瀏覽器中最后的版本號(hào)是1.3猖闪,后來鲜棠,隨著Mozilla繼續(xù)開發(fā),JavaScript版本號(hào)逐步遞增培慌。
五豁陆、JavaScript的引入
- JS代碼,可以放在script標(biāo)簽內(nèi)吵护,script標(biāo)簽可以放置在HTML文檔任何位置盒音;
<script>
// JS代碼
</script>
- JS代碼表鳍,可以放置在外部的js文件中,通過script標(biāo)簽的src屬性鏈接到頁面中祥诽;
<script type="text/javascript" src="test.js" ></script>
注意: 導(dǎo)入外部JS文件的script不要添加JS代碼譬圣;
六、輸出方式
- 向網(wǎng)頁文檔中輸出
document.write()
document.writeln()
- 向web控制臺(tái)輸出
console.log()
- 警告框
alert()
七原押、變量
JavaScript是弱類型腳本語言胁镐,使用變量之前可以無需定義;所以JavaScript支持兩種方式引入變量诸衔。(其他語言例如C語言中盯漂,在定義時(shí)都會(huì)有類型的區(qū)分int a; float b;)
- 什么是變量?
變量即是可以存儲(chǔ)數(shù)據(jù)的,可以改變的笨农;
/* 初中數(shù)據(jù)題目
* 已知x為20, x + y = 100; 求y的值是多少?
*
* x: 20
* y: ?
* x + y = 100
*
* ===> y = 80
*
*/
// var是關(guān)鍵字就缆,表示定義變量
// 定義了一個(gè)變量x,變量x的值為20
var x = 20;
// 定義了一個(gè)變量為y谒亦,變量y沒有值
var y;
// x + y = 100; --> y = 100 - x
y = 100 - x;
alert(y); // 80
- 隱式定義: 直接給變量賦值
// 定義一個(gè)變量a竭宰,其值為'hello world'
a = "hello world";
b = 10;
- 顯式定義: 使用var關(guān)鍵字定義變量(使用該方式聲明變量時(shí)可以沒有初始值,聲明的變量類型是不確定的)
// 聲明變量a份招,數(shù)據(jù)類型是不確定的
var a;
// 定義一個(gè)變量b切揭,其值為'hello world'
var b = "hello world";
var c = 3;
- 一次性定義多個(gè)變量
var a,b,c;
var i=0, j=0, k=0;
- 命名規(guī)則
a、變量名必須以字母或下劃線“_”或者“$”開頭锁摔;
b廓旬、變量名長度不能超過255字符;
c谐腰、變量名中不允許使用空格孕豹,首字符不能為數(shù)字;
d十气、變量名區(qū)分大小寫(備注: JavaScript是區(qū)分大小寫的語言)励背;
八、基本運(yùn)算符操作
- 加法 +
- 減法 -
- 乘法 *
- 除法 /
- 取余(求模) %
10 / 3 = 3 ··· 1
九砸西、字符串拼接
加號(hào)有兩種含義叶眉,如果都是為number類型時(shí),即是加法操作芹枷;如果有一個(gè)是為字符串類型衅疙,即是字符串拼接;
var str1 = '中國';
var str2 = '臺(tái)灣';
// 將字符串str1和str2拼接起來
var str3 = str1 + str2;
十杖狼、HTML屬性操作
- 通過id獲取頁面對(duì)應(yīng)元素(document.getElementById)
var num1 = document.getElementById('num1');
- 屬性名、屬性值
<input id=“bt1” type=“button” value=“按鈕”/>
屬性名: id
屬性值: bt1
(注: 屬性名="屬性值")
- 屬性讀操作: 獲取妖爷、找到
元素.屬性名
- 屬性寫操作: 添加蝶涩、替換
元素.屬性名 = 新值
- 元素內(nèi)的HTML內(nèi)容
元素.innerHTML
注意事項(xiàng):
a理朋、JS中不允許出現(xiàn)‘-’,即將‘-’去除掉绿聘,之后將后面小寫字母改為大寫字母即可嗽上;
例如:
font-size —> fontSize
padding-top —> paddingTop
p1.style.fontSize = '10px';
b、JS中class屬性要改為className(class是保留字)
例如: 想要改變某個(gè)元素的class名熄攘,即是p1.className = 'purpleStyle';
十一兽愤、案例 — 猜數(shù)字游戲
- 隨機(jī)數(shù)
Math.random(): 得到0~1但不等于1的隨機(jī)數(shù);
parseInt(): 取整;
parseInt( Math.random() );
- 條件判斷
if( 條件1 == 條件2 ){ // 符合條件即執(zhí)行下面代碼區(qū)域
// 代碼區(qū)域
} else if(條件1 == 條件2){ // 符合條件即執(zhí)行下面代碼區(qū)域
// 代碼區(qū)域
} else { // 都不符合上述要求挪圾,即執(zhí)行下面代碼區(qū)域
// 代碼區(qū)域
}