[前端] script 與 noscript、基本語法、變量、數(shù)據(jù)類型

script 與 noscript:

script 用來在 html 中引入 JS 代碼,而當瀏覽器不支持 JS 或 JS 被禁用時,瀏覽器會用 noscript 的內(nèi)容替代頁面其它內(nèi)容進行展示。
基本語法:
ECMAScript 的語法很像 C,標識符規(guī)則只多了一個 $ 符號,注釋、語句等基本相同。
嚴格模式:
ECMAScript 在嚴格模式下有不同的解析和執(zhí)行模型,不確定的行為會被處理,不安全的操作也會拋出錯誤。使用嚴格模式只需在文件頂部添加指令:"use strict";
也可以僅指定某個函數(shù)在嚴格模式下執(zhí)行,在函數(shù)體第一行寫上 "use strict"; 即可。
關(guān)鍵字和保留字:
關(guān)鍵字指在語言中有特殊用途的字符串,保留字指將來可能被用作關(guān)鍵字的字符串,這兩種字符串都不能被作為標識符來命名。
變量:
ECMAScript 的變量是動態(tài)類型的,可以保存任何類型的數(shù)據(jù),在賦值時自動完成類型轉(zhuǎn)換,聲明變量的關(guān)鍵字有 var、let、const,自 es6 起不提倡使用 var,也可以不聲明直接使用,這樣是創(chuàng)建全局變量。
數(shù)據(jù)類型:

ECMAScript 有 6 種基本數(shù)據(jù)類型:undefined、null、string、boolean、number、symbol(ES6),一種引用數(shù)據(jù)類型:Object。
typeof 操作符:判斷常量、變量的數(shù)據(jù)類型。
Undefined 類型:當變量聲明未賦值時,默認值就是 undefined。
Null 類型:該類型只有一個值 null,是個對象,并且 null == undefined 成立,習慣上,會將準備用來存儲對象的變量初始化為 null。
Boolean 類型:只有兩個值 true、flase,區(qū)分大小寫,與 C 不同,JS 中的 boolean 值與數(shù)值不是一回事,JS 的所有數(shù)據(jù)類型都與 Boolean 類型有等價的值,并且 可以將其轉(zhuǎn)換為 Boolean 類型,用函數(shù) Boolean() 即可。
Number 類型: JS 的 Number 類型大致分為整數(shù)、浮點數(shù)、NaN 三類。
整數(shù):
整數(shù)有十進制、八進制、十六進制三種,以 0 開頭是八進制,0x 開頭是十六進制。運算時,所有八進制、十六進制都會先被轉(zhuǎn)換為十進制進行運算。
浮點數(shù):
JS 的浮點數(shù)必須包含一個小數(shù)點且其后要有一位非零數(shù)字,否則就會被判定為整數(shù)存儲。浮點數(shù)可以使用科學計數(shù)法表示,比如 1.23e5 就是 123000。另外,JS 的浮點數(shù)計算總會有偏差,因此浮點數(shù)一般不參與條件判斷,例如 0.1 + 0.2 = 0.300000000004,這個誤差導致 0.1 + 0.2 == 0.3 為 false,當然可以通過指定個范圍比如 0.1 + 0.2 - 0.3 > -0.0001 && 0.1 + 0.2 - 0.3 < 0.0001 來避免這個問題,但通常是直接避免浮點數(shù)參與邏輯表達式的運算。
數(shù)值范圍:
ECMAScript 規(guī)定最值分別為 Number.MIN_VALUE、Number.MAX_VALUE,大多數(shù)瀏覽器中分別是 5e-324 和 1.7976931348623157e+308。若超出 范圍會被轉(zhuǎn)換為 Infinity 值,即正無窮或負無窮,如果要程序判斷一個數(shù)字是否在范圍內(nèi),可以使用函數(shù) isfinite(),該函數(shù)會返回一個布爾值,true 代表在范圍內(nèi)。
NaN:
非數(shù)值類型,數(shù)值與其它類型進行運算結(jié)果大多等于 NaN,NaN 與任何值都不相等包括它本身,NaN 與任何值的運算結(jié)果都是它本身。關(guān)于 NaN 有個函數(shù) isNaN() 可以判斷參數(shù)是否是 NaN。
數(shù)值轉(zhuǎn)換:
有三個常用函數(shù),Number()、parseInt()、parseFloat(),第一個可以用于任何數(shù)據(jù)類型,后兩個專門把字符串轉(zhuǎn)為數(shù)值。
Number():Boolean 值對應 1、0,null 對應 0,undefined 對應 NaN,僅含數(shù)字的字符串會轉(zhuǎn)換為對應的十進制數(shù)字,含其它字符的字符串返回 NaN。
parseInt()、parseFloat():分別用來轉(zhuǎn)換整數(shù)、浮點數(shù)字符串,只要第一個非空格字符是數(shù)字就可以進行轉(zhuǎn)換,若不是則返回 NaN。
String 類型:用單/雙引號包含的,由 0 或多個 Unicode 字符組成的字符序列,具有 length 屬性保存其長度。
轉(zhuǎn)義字符:例如 \n、\t、\b(退格)、\r(回車)、\\ 等,一個轉(zhuǎn)義字符代表一個字符。
字符串不可變:JS 字符串的值無法更改,只能銷毀重建,例如:
????let a = "你";
????a = a + "我";
過程是銷毀 "你"、"我",再創(chuàng)建 "你我" 賦值到 a,如果你嘗試像 C 一樣直接通過 a[0] 的形式修改字符串,是會失敗的。
轉(zhuǎn)換為字符串:
任何數(shù)據(jù)都可以轉(zhuǎn)為字符串,兩種方式,一是調(diào)用 toString() 方法,除 null、undefined 外都能使用該方法。第二種是使用 String() 函數(shù),該函數(shù)會先嘗試調(diào)用 toString() 方法,如果是 null 或 undefined 則返回 "null" 或 "undefined"。
Object 類型:
創(chuàng)建對象可以用 let 對象名 = new 構(gòu)造函數(shù)(); 來創(chuàng)建(new 可省略),也可以用 let 對象名 = { 屬性名:值 , ... } 這種字面量形式來創(chuàng)建,也可以后續(xù)直接用 對象名.屬性或方法名 = ... 的形式添加屬性或方法,下面是幾個每個對象都有的屬性、方法:
constructor:保存著創(chuàng)建當前類型對象的函數(shù)。
hanOwnProoerty(PropertyName):檢查某對象的實例是否存在某屬性,參數(shù)就是屬性名。
isPrototypeOf(object):檢查參數(shù)是否是當前對象的原型。
PropertyIsEnumerable(propertyName):檢查某屬性是否能使用 for-in 語句來枚舉。
toLocaleString()、toString()、valueOf():基本都是返回對象的字符串表示,略有差異。