Javascript和ECMAScript通常被人們用來表達(dá)相同的含義,但是嚴(yán)格意義上Javascript比ECMA-262中規(guī)定的含義要多,一個(gè)完整的Javascript應(yīng)該包含三個(gè)部分
**核心**:ECMAScript
- 由ECMA-262定義,提供核心語言功能
**文檔對(duì)象模型**:DOM(Document Object Model)
- 用于HTML的應(yīng)用程序編程接口,DOM把整個(gè)頁面映射為一個(gè)多層節(jié)點(diǎn)的結(jié)構(gòu),提供訪問和操作網(wǎng)頁內(nèi)容的方法和接口
**瀏覽器對(duì)象模型**:BOM(Browser Object Model)
- 支持可以訪問操作瀏覽器窗口的對(duì)象模型,提供與瀏覽器交互的方法和接口
**ECMA-262**:
- 語法、類型、語句、關(guān)鍵字、保留字、操作符、對(duì)象等
**區(qū)分大小寫**
- ECMAScript中一切(變量、函數(shù)名、操作符)都區(qū)分大小寫
**標(biāo)識(shí)符**
- 指變量、函數(shù)、屬性的名字或函數(shù)的參數(shù)
**命名規(guī)范**
- 必須是數(shù)字、字母、下劃線(_)或$,不能以數(shù)字開頭、不能以關(guān)鍵字、保留字命名。
- 可以使用駝峰命名法,例如:firstSecond
**關(guān)鍵字、保留字**
- ??關(guān)鍵字用于控制語句的開始或結(jié)束,或用于執(zhí)行特定操作等
- ??保留字將定義一些將來可能被用于關(guān)鍵字的單詞
**注釋**
- // 單行注釋
- /*
??* 這是一個(gè)多行
??* (塊級(jí))注釋
??*/
- 第二行及第三行的*號(hào)不是必須,僅為提高代碼的可讀性,企業(yè)級(jí)應(yīng)用這種方式比較多
**嚴(yán)格模式**
- 定義一種不同的解析與執(zhí)行模式,在嚴(yán)格模式下,將對(duì)一些不確定、不安全或不當(dāng)操作的行為拋出錯(cuò)誤
- 使用:在script標(biāo)簽內(nèi)部最頂端添加 'use strict';也可以在指定的函數(shù)體內(nèi)部添加
**分號(hào)**
- 結(jié)尾的分號(hào)不是必須,但是可讀性降低,并且壓縮代碼時(shí)容易導(dǎo)致壓縮錯(cuò)誤,還需要解析器去確定語句的結(jié)尾,加上分號(hào)也會(huì)在某些情況下提高性能,因?yàn)檫@樣,解析器就不用花時(shí)間去推測應(yīng)該在哪里插入分號(hào)
**變量**
- ECMA的變量(存儲(chǔ)在內(nèi)存中的一塊區(qū)域)是松散類型(可以用來保存任何類型的數(shù)據(jù)),換句話說每個(gè)變量僅僅是用來保存值的一個(gè)占位符
- 定義變量需要使用var操作符 例如: var num = 10;
**數(shù)據(jù)類型**
- ECMAScript中有5種簡單數(shù)據(jù)類型(基本數(shù)據(jù)類型):Undefined、Null、Boolean、Number、String
- 一種復(fù)雜數(shù)據(jù)類型:Object
? - undefined:只有一個(gè)值的數(shù)據(jù)類型,聲明的變量未定義或未對(duì)其初始化
? - null:只有一個(gè)值的數(shù)據(jù)類型,表示一個(gè)空的對(duì)象指針,一般用于將來保存對(duì)象而使用,由于undefined派生自null,ECMA-262規(guī)定undefined與null值相等
? - boolean:只有兩個(gè)值true或false, Boolean()轉(zhuǎn)換規(guī)則,除false、''、0、NaN、null、undefined皆為true
? - number:數(shù)字類型,基本字面量格式是十進(jìn)制整數(shù),例如:var num = 10;
? ? - 也可以以八進(jìn)制(8為基數(shù))或十六進(jìn)制(16為基數(shù))的字面數(shù)來表示,例如:var num = 070; // 八進(jìn)制的56
? ? - 八進(jìn)制第一位必須是0開頭,字?jǐn)?shù)序列為0~7,無效數(shù)值將會(huì)以十進(jìn)制解析,忽略前面的0
? ? - 十六進(jìn)制例如:var num = 0xA; //十六進(jìn)制的10,十六進(jìn)制由(0~9及A~F)組成,不區(qū)分大小寫,字面值前兩位必須是0x;
? ? - 八進(jìn)制嚴(yán)格模式下會(huì)拋出錯(cuò)誤
? ? - 浮點(diǎn)數(shù)值:數(shù)值必須包含一個(gè)小數(shù)點(diǎn),小數(shù)點(diǎn)后面必須有一位數(shù)字,由于浮點(diǎn)數(shù)需要的內(nèi)存空間是整數(shù)的兩倍,一般對(duì)于小數(shù)點(diǎn)沒有跟任何值或本身表示一個(gè)整數(shù)如1.0,那么該
? ? 值會(huì)被轉(zhuǎn)為整數(shù)
? ? - 數(shù)值范圍:由于內(nèi)存限制,ECMAScript并不能保存所有值,因此把表示最小的值保存在Number.MIN_VALUE中一般在瀏覽器中這個(gè)值是5e-324,把最大的值保存在
? ? Number.MAX_VALUE中,一般為1.7976931348623157e+308,計(jì)算中如果是負(fù)數(shù)則會(huì)轉(zhuǎn)為-Infinity(負(fù)無窮),正數(shù)則為Infinity(正無窮),要想確定一個(gè)數(shù)值是不是有窮的使
? ? 用isFinite()
? ? - 數(shù)字中的e(科學(xué)計(jì)數(shù)法)表示10的幾次方,例如:3.125e7等于31250000 相當(dāng)于3.125 * 10^7
? ? - NaN:非數(shù)值(Not a Number)是一個(gè)特殊的數(shù)值,表示一個(gè)要返回?cái)?shù)值的操作數(shù)未返回?cái)?shù)值
? ? - 檢測一個(gè)值是否為非數(shù)值可以用isNaN()方法來檢測,該方法接受一個(gè)任何類型的參數(shù)
? ? - 轉(zhuǎn)換為數(shù)值的方法:Number(傳任何值)、parseInt(字符串或數(shù)字)[接受兩個(gè)參數(shù),第一個(gè)為傳入的要處理的參數(shù),第二個(gè)為基于解析的基數(shù),取2-36之間的數(shù)值]、parseFloat(字符串或數(shù)字)
- string:由英文狀態(tài)下的雙引號(hào)或單引號(hào)表示,例如:var str = 'abc' 或 var str1 = "abc";
? - 字符字面量:\n 換行 \t制表 \b退格 \r回車 \\斜杠? \' 單引號(hào) \"雙引號(hào)
? - 轉(zhuǎn)換字符串的方法:
? ? - toString方法:toString()返回一個(gè)字符串的副本,除了null和undefined以外,數(shù)值、布爾值、對(duì)象、字符串都有這個(gè)方法,可以接受一個(gè)參數(shù),作為輸出數(shù)值的基數(shù),默認(rèn)為十進(jìn)制
? ? - 使用:var num = 10;? num.toString();
? ? - String方法:轉(zhuǎn)型函數(shù),能夠?qū)⑷魏晤愋偷闹缔D(zhuǎn)為字符串,包括undefined和null,一般如果轉(zhuǎn)變的值有toString方法則會(huì)調(diào)用該方法
- object:數(shù)據(jù)和功能的集合,一般通過new操作符后面跟要?jiǎng)?chuàng)建的對(duì)象類型來創(chuàng)建,例如:var obj = new Object();也可以使用字面量方式創(chuàng)建,例如:var obj = {};
? -? 任何涉及到類型轉(zhuǎn)換如果針對(duì)的是對(duì)象類型,則會(huì)調(diào)用對(duì)象的toString()和valueOf()方法通過轉(zhuǎn)換得到值[概念,暫時(shí)不講]
**typeof操作符**
- 用來檢測給定變量的數(shù)據(jù)類型,返回一個(gè)字符串
- 檢測得到的結(jié)果:undefined、boolean、string、number、object、function
- 操作數(shù)可以是一個(gè)變量也可以是一個(gè)字面量,typeof可以加圓括號(hào)(typeof(10))但不是必須,例如:typeof 10;
- typeof 對(duì)于未定意的變量也會(huì)返回undefined 例如:var str; typeof str 和 typeof num都是undefined;但是如果去通過控制臺(tái)或其他方式輸出,未定義的num則會(huì)產(chǎn)生報(bào)錯(cuò);
??
??