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