JavaScript
一、 簡(jiǎn)介
JavaScript
是一種具有面向?qū)ο竽芰Φ?、解釋型的程序設(shè)計(jì)語(yǔ)言。更具體一點(diǎn),它是基于
對(duì)象和事件驅(qū)動(dòng)并具有相對(duì)安全性的客戶端腳本語(yǔ)言。它的主要目的是,驗(yàn)證發(fā)往服務(wù)器端的
數(shù)據(jù)、增加 Web 互動(dòng)、加強(qiáng)用戶體驗(yàn)度等。

ECMAScript 定義的只是這門語(yǔ)言的基礎(chǔ),與 Web瀏覽器沒(méi)有依賴關(guān)系,而在基礎(chǔ)語(yǔ)法上
可以構(gòu)建更完善的腳本語(yǔ)言。 JavaScript 的運(yùn)行需要一定的環(huán)境,脫離了環(huán)境
JavaScript 代碼\是不能運(yùn)行的,JavaScript 只能夠寄生在某個(gè)具體的環(huán)境中才能夠工作。
JavaScript運(yùn)行環(huán)境一般都由宿主環(huán)境和執(zhí)行期環(huán)境共同構(gòu)成,其中宿主環(huán)境是由外殼程序生成的,如
Web 瀏覽器就是一個(gè)外殼程序,它提供了一個(gè)可控制瀏覽器窗口的宿主環(huán)境。執(zhí)行期環(huán)境則由嵌入到外殼程序中的JavaScript 引擎(或稱為 JavaScript 解釋器)生成,在這個(gè)環(huán)境中 JavaScript能夠生成內(nèi)置靜態(tài)對(duì)象,初始化執(zhí)行環(huán)境等。
Web 瀏覽器自定義的 DOM 組件,以面向?qū)ο蠓绞矫枋龅奈臋n模型。 DOM
定義了表示和修\改文檔所需的對(duì)象、這些對(duì)象的行為和屬性以及這些對(duì)象之間的關(guān)系。 DOM對(duì)象,是我們用傳統(tǒng)的方法(javascript)獲得的對(duì)象。
DOM 屬于瀏覽器,而不是JavaScript 語(yǔ)言規(guī)范里的規(guī)定的核心內(nèi)容。\前面的 DOM
是為了操作瀏覽器中的文檔,而為了控制瀏覽器的行為和操作,瀏覽器還提\供了 BOM(瀏覽器對(duì)象模型)。
ECMAScript(基礎(chǔ)語(yǔ)法**)
JavaScript 的核心語(yǔ)法 ECMAScript 描述了該語(yǔ)言的語(yǔ)法和基本對(duì)象
DOM(文檔對(duì)象模型)
文檔對(duì)象模型(DOM)
------ 描述了處理網(wǎng)頁(yè)內(nèi)容的方法和接口
BOM(瀏覽器對(duì)象模型)
**瀏覽器對(duì)象模型(BOM)描述了與瀏覽器進(jìn)行交互的方法和接口
開(kāi)發(fā)工具
1、瀏覽器: chrome
2、開(kāi)發(fā)工具:hbuilder等
3、進(jìn)入"控制臺(tái)" console:F12
控制臺(tái)的作用:
console 對(duì)象代表瀏覽器的 JavaScript 控制臺(tái),用來(lái)運(yùn)行 JavaScript
命令,常常用來(lái)顯示網(wǎng)\頁(yè)運(yùn)行時(shí)候的錯(cuò)誤信息。 Elements 用來(lái)調(diào)試網(wǎng)頁(yè)的 html 和 css 代碼。
二、 JavaScript 基本用法**\
**JS 需要和 HTML 一起使用才有效果,我們可以通過(guò)直接或間接的方式將 JS
代碼嵌入在\HTML 頁(yè)面中。\
- 行內(nèi) JS : 寫(xiě)在標(biāo)簽內(nèi)部的 js 代碼\
- 內(nèi)部 JS : 定義在 script 標(biāo)簽內(nèi)部的 js 代碼\
- 外部 JS : 單獨(dú)的 js 文件,在 HTML 中通過(guò) script 標(biāo)簽引入
我們可以將 JavaScript 代碼放在 html文件中任何位置,但是我們一般放在網(wǎng)頁(yè)的 head 或
者 body 部分。
由于頁(yè)面的加載方式是從上往下依次加載的,而這個(gè)對(duì)我們放置的 js 代碼運(yùn)行
是有影響的。
放在<head>部分,最常用的方式是在頁(yè)面中 head部分放置<script>元素,瀏覽器解析
head 部分就會(huì)執(zhí)行這個(gè)代碼,然后才解析頁(yè)面的其余部分。
放在<body>部分,JavaScript 代碼在網(wǎng)頁(yè)讀取到該語(yǔ)句的時(shí)候就會(huì)執(zhí)行。
行內(nèi):
<button onclick="alert('you clicked hered!!!')">click here</button>
內(nèi)部:
<script type="text/javascript" charset="utf-8">
alert('this is inner js code')
</script>
外部:
**hello.js
alert('this is a outter js document')
hello.html
<script src="js/hello.js" type="text/javascript" charset="utf-8"></script>
三、 JavaScript 基礎(chǔ)語(yǔ)法
1、 語(yǔ)句和注釋
JavaScript
程序的執(zhí)行單位為行(line),也就是一行一行地執(zhí)行。一般情況下,每一行就\是一個(gè)語(yǔ)句。
語(yǔ)句(statement)是為了完成某種任務(wù)而進(jìn)行的操作,語(yǔ)句以分號(hào)結(jié)尾,一個(gè)分號(hào)即表示\一個(gè)語(yǔ)句結(jié)束。
多個(gè)語(yǔ)句可以寫(xiě)在一行內(nèi)(不建議這么寫(xiě)代碼),但是一行寫(xiě)多條語(yǔ)句時(shí),語(yǔ)\句必須以分號(hào)結(jié)尾。
表達(dá)式不需要分號(hào)結(jié)尾。一旦在表達(dá)式后面添加分號(hào),則 JavaScript
引擎就將表達(dá)式視為\語(yǔ)句,這樣會(huì)產(chǎn)生一些沒(méi)有任何意義的語(yǔ)句。
單行注釋:用//起頭;
多行注釋:放在/* 和 */之間。
兼容 html 注釋方式:
說(shuō)明: 由于歷史上 JavaScript 兼容 HTML 代碼的注釋,所以也使用 HTML
總的注釋作為
JavaScript 中的單行注釋。
標(biāo)識(shí)符
就是一個(gè)名字,用來(lái)給變量和函數(shù)進(jìn)行命名, 有特定規(guī)則和規(guī)范
規(guī)則:
由 Unicode 字母、 _、 $、數(shù)字組成、中文組成
(1)不能以數(shù)字開(kāi)頭
(2) 不能是關(guān)鍵字和保留字
(3)嚴(yán)格區(qū)分大小寫(xiě)
三、 變量\
變量即一個(gè)帶名字的用來(lái)存儲(chǔ)數(shù)據(jù)的內(nèi)存空間,
數(shù)據(jù)可以存儲(chǔ)到變量中,也可以從變量中\(zhòng)取出數(shù)據(jù)。\
1. 變量的聲明\
**JavaScript 是一種弱類型語(yǔ)言,在聲明變量時(shí)不需要指明數(shù)據(jù)類型, 直接用
var 修飾符進(jìn)\行聲明。
變量聲明和賦值:
// 先聲明再賦值
var a ;
a = 10;
// 聲明同時(shí)賦值
var b = 20;
注:如果聲明變量時(shí)不使用var修飾符,則該變量是全局變量
2變量的注意點(diǎn):
1)若只聲明而沒(méi)有賦值,則該變量的值為 undefined
2)變量要有定義才能使用,若變量未聲明就使用,JavaScript
會(huì)報(bào)錯(cuò),告訴你變量未定義
3)可以在同一條 var 命令中聲明多個(gè)變量。
4)若使用 var 重新聲明一個(gè)已經(jīng)存在的變量,是無(wú)效的。
5)若使用 var 重新聲明一個(gè)已經(jīng)存在的變量且賦值,則會(huì)覆蓋掉前面的值
6)JavaScript
是一種動(dòng)態(tài)類型、弱類型語(yǔ)言,也就是說(shuō),變量的類型沒(méi)有限制,可以賦予各種類型的值
3.變量提升
JavaScript
引擎的工作方式是,先解析代碼,獲取所有被聲明的變量,然后再一行一行地運(yùn)行。這造成的結(jié)果,就是所有的變量的聲明語(yǔ)句,都會(huì)被提升到代碼的頭部,這就叫做變量提升。
<script type="text/javascript">
/*1、JavaScript是一種弱類型語(yǔ)言,聲明時(shí)不需要指定數(shù)據(jù)類型,直接通過(guò)var修飾符聲明*/
var a; // 先聲明
a = 1; // 再賦值
var b = 2; // 聲明并賦值
console.log(a,b);
console.log("==========變量的注意點(diǎn)==========");
/*1)若只聲明而沒(méi)有賦值,則該變量的值為 undefined*/
var str1; // 只聲明
console.log(str1); // undefined
/*2)變量要有定義才能使用,若變量未聲明就使用,JavaScript 會(huì)報(bào)錯(cuò),告訴你變量未定義*/
//console.log(str2); // Uncaught ReferenceError: str2 is not defined
/*3)可以在同一條 var 命令中聲明多個(gè)變量。*/
var aa,bb,cc=1;
console.log(aa,bb,cc);
/*4)若使用 var 重新聲明一個(gè)已經(jīng)存在的變量,是無(wú)效的。*/
var a;
console.log(a);
/*5)若使用 var 重新聲明一個(gè)已經(jīng)存在的變量且賦值,則會(huì)覆蓋掉前面的值*/
var b = 10;
console.log(b);
console.log("==========變量提升==========");
console.log(uname); // js引擎會(huì)將所有通過(guò)var聲明的變量名提升到代碼的頭部
var uname = "zhangsan";
console.log(uname);
// console.log(userName); // 只有varvar聲明的變量才會(huì)變量提升
userName = "lisi";
console.log(userName);
</script>
四、 數(shù)據(jù)類型
雖說(shuō) JS 是弱類型語(yǔ)言, 變量沒(méi)有類型, 但數(shù)據(jù)本身是有類型的。
針對(duì)不同的類型,我們可以進(jìn)行不同的操作。
JavaScript 中有 6 種數(shù)據(jù)類型, 其中有五種簡(jiǎn)單的數(shù)據(jù)類型: Undefined、
Null、 布爾、數(shù)值和字符串。一種復(fù)雜數(shù)據(jù)類型 Object。
數(shù) 值(Number) : 整數(shù)和小數(shù)(比如 1 和 3.14)
字符串(String) : 字符組成的文本(比如"Hello World")
布爾值(Boolean) : true(真)和 false(假)兩個(gè)特定值
Undefined: 表示"未定義"或不存在,即此處目前沒(méi)有任何值
Null: 表示空缺,即此處應(yīng)該有一個(gè)值,但目前為空
對(duì)象(object) (引用) : 各種值組成的集合
1)、對(duì)象(object) {name:" zhangsan" ,age:" 18" }
2)、數(shù)組(array) [1,2,3]
3)、函數(shù)(function) function test() {}
1. typeof 操作符
typeof 操作符是用來(lái)檢測(cè)數(shù)據(jù)類型。對(duì)于值或變量使用 typeof
操作符會(huì)返回如下字符串:

說(shuō)明:
1、 typeof null 返回的是 object 字符串
2、函數(shù)不是數(shù)據(jù)類型,但是也可以使用 typeof 操作符返回字符串。
typeof 操作符可以操作變量也可以操作字面量。
注意:函數(shù)在 JavaScript 中是對(duì)象,不是數(shù)據(jù)類型,所以使用 typeof 區(qū)分
function 和
object 是有必要的。
//undefined\
var a;\
//a 的類型是 Undefined,值是 undefined,類型返回的字符串是 undefined\
alert(typeof a);\
//boolean\
var a = true;\
//a 的類型是 Boolean,值是 true,類型返回的字符串是 boolean\
alert(typeof a);\
//string\
var a = \"你好\";\
alert(typeof a);//a 的類型是 String,值是\"你好\",類型返回的字符串是
string\
//number\
var a = 380;\
alert(typeof a);//a 的類型是 Number,值是 380,類型返回的字符串是 number\
//object\
//空的對(duì)象,表示對(duì)象已經(jīng)創(chuàng)建了,但是還沒(méi)有東西\
//空對(duì)象,表示對(duì)象還沒(méi)有創(chuàng)建,就是 null\
var a = {};\
//a 的類型是 Object,值是\[object Object\],類型返回的字符串是 object\
alert(typeof a);\
var a = null;\
//a 的類型是 Null,值是 null,類型返回的字符串是 object
alert(typeof a);\
var a = new Object();\
//a 的類型是 Object,值是\[object Object\],類型返回的字符串是 object\
alert(typeof a);\
function a () {}\
//a 的類型是 Function 函數(shù),值是函數(shù)的代碼 function
a(){},類型返回的字符串是 function\
alert(typeof a);
2.undefined
undefined 類型的值是 undefined。
undefined 是一個(gè)表示"無(wú)"的原始值,表示值不存在。
出現(xiàn) undefined 的常見(jiàn)情況:
1)當(dāng)聲明了一個(gè)變量而沒(méi)有初始化時(shí),這個(gè)變量的值就是undefined
2)當(dāng)函數(shù)需要形參,但未傳遞實(shí)參時(shí)
3)函數(shù)沒(méi)有返回值,但定義了變量接收
console.log("================undefined===========");
// 1)當(dāng)聲明了一個(gè)變量而沒(méi)有初始化時(shí),這個(gè)變量的值就是 undefined
var aa;
console.log(aa);
// 2)當(dāng)函數(shù)需要形參,但未傳遞實(shí)參時(shí)
function tt(num) {
console.log(num);
}
tt(); // 未傳遞實(shí)參
// 3)函數(shù)沒(méi)有返回值,但定義了變量接收
function tt2() {
console.log("函數(shù)...");
// return true;
}
tt2();
var t = tt2(); // 沒(méi)有返回值
console.log(t);
3. null
**null 類型是只有一個(gè)值的數(shù)據(jù)類型,即特殊的值 null。
它表示空值,即該處的值現(xiàn)在為空,
它表示一個(gè)空對(duì)象引用。
使用 Null 類型值時(shí)注意以下幾點(diǎn):
1)使用 typeof 操作符測(cè)試 null 返回 object 字符串。
2) undefined 派生自 null,所以等值比較返回值是
true。所以,未初始化的變量和賦值為
null 的變量相等。
console.log("=================null==================");
// 1)使用 typeof 操作符測(cè)試 null 返回 object 字符串。
// 2)undefined 派生自 null,所以等值比較返回值是 true。所以,未初始化的變量和賦值為 null 的變量相等
// undefined 派生自 null
console.log(undefined == null); // true
var ab; // 只聲明未賦值返回undefined
console.log(ab == null); // true
4. 數(shù)值型
數(shù)值型包含兩種數(shù)值:整型和浮點(diǎn)型。
1) 所有數(shù)字(整型和浮點(diǎn)型)都是以 64 位浮點(diǎn)數(shù)形式儲(chǔ)存。所以, JS 中 1
與 1.0 相等,
而且 1 加上 1.0 得到的還是一個(gè)整數(shù)。 浮點(diǎn)數(shù)最高精度是 17
位小數(shù),由于浮點(diǎn)數(shù)運(yùn)算時(shí)可能不精確,盡量不要使用浮點(diǎn)數(shù)做判斷。
2)在存儲(chǔ)數(shù)值型數(shù)據(jù)時(shí)自動(dòng)將可以轉(zhuǎn)換為整型的浮點(diǎn)數(shù)值轉(zhuǎn)為整型。
3)對(duì)于過(guò)大或過(guò)小的數(shù)值,可以使用科學(xué)計(jì)數(shù)法來(lái)表示
4)Infinity、-Infinity
超過(guò)了表數(shù)范圍,出現(xiàn) Infinity(正無(wú)窮)或者-Infinity(負(fù)無(wú)窮)
isFinite()函數(shù)可以確定是否超出范圍:
true:沒(méi)有超出;false:超出了
console.log("======================數(shù)值型=================");
// 浮動(dòng)性自動(dòng)轉(zhuǎn)整型
console.log(1 + 2.0); // 3
var n = 5.0;
console.log(n); // 5
// 數(shù)值過(guò)大或過(guò)小會(huì)使用科學(xué)計(jì)數(shù)法顯示
var num2 = 4.12e9;
console.log(num2);//4120000000
console.log(0.0000000412);//4.12e-8
// 正無(wú)窮和負(fù)無(wú)窮
console.log(100e1000);//Infinity
console.log(-100e1000);//-Infinity
console.log(1 / -0 );// 除以負(fù) 0 得到-Infinity
console.log(1 / +0); // 除以 0 得到 Infinit
// isFinite()
console.log(isFinite(1)); //true
console.log(isFinite(100e1000)); //fasle
5.NaN
表示非數(shù)值(Not a Number),是一個(gè)特殊的值。
如:將字符串解析成數(shù)字出錯(cuò)的場(chǎng)合。
console.log(parseInt("abc"));//parseInt
方法將字符串解析為數(shù)值,但若無(wú)法解析,返回 NaN
注意:
NaN 不等于任何值,包括它本身,因?yàn)樗皇且粋€(gè)值
NaN 與任何數(shù)(包括它自己)的運(yùn)算,得到的都是 NaN
isNaN()可以用來(lái)判斷一個(gè)值是否為 NaN
true:不是數(shù)字;false:是數(shù)字
// NaN
console.log(parseInt("123")); // 123
console.log(parseInt("abc")); // NaN
console.log(NaN == NaN); // false
console.log(parseInt("abc") + 1); // NaN
// isNaN()可以用來(lái)判斷一個(gè)值是否為 NaN
console.log(isNaN(parseInt("123"))); // false
console.log(isNaN(parseInt("abc"))); // true
6. 字符串
使用 ' ' 或 " "引起來(lái),如: 'sxt', "good"。
使用加號(hào)'+'進(jìn)行字符串的拼接,如: console.log('hello' + '
everybody');
7. 對(duì)象
對(duì)象是一組數(shù)據(jù)和功能的集合。
typeof window // "object"
typeof {} // "object"
typeof [] // "object"
typeof null // "object"
說(shuō)明:
{}:表示使用對(duì)象字面量方式定義的對(duì)象??盏拇罄ㄌ?hào)表示定義包含默認(rèn)屬性和方法的對(duì)
象。
instanceof 運(yùn)算符
typeof 操作符對(duì)數(shù)組(array)和對(duì)象(object)的顯示結(jié)果都是
object,那么可以利用
instanceof 運(yùn)算符,它可用于判斷一個(gè)變量是否某個(gè)對(duì)象的實(shí)例。
console.log("===============對(duì)象====================");
// instanceof 運(yùn)算符
var o = {};
var ar = [];
console.log(o instanceof Object); // true
console.log(ar instanceof Array); // true