成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

JavaScript 學(xué)習(xí)筆記一 (入門(mén)篇)

lentoo / 1052人閱讀

摘要:學(xué)習(xí)筆記一入門(mén)篇最近正在看高級(jí)程序設(shè)計(jì),一直沒(méi)來(lái)得及總結(jié)一下,順便對(duì)之前看的編程藝術(shù)進(jìn)行一些簡(jiǎn)單的總結(jié),如有一些不正確的地方還請(qǐng)多指出討論。其他字符可以是字母下劃線美元符號(hào)或者數(shù)字。

JavaScript 學(xué)習(xí)筆記一 (入門(mén)篇)

最近正在看《JavaScript高級(jí)程序設(shè)計(jì)》,一直沒(méi)來(lái)得及總結(jié)一下,順便對(duì)之前看的《JavaScript DOM編程藝術(shù)》進(jìn)行一些簡(jiǎn)單的總結(jié),如有一些不正確的地方還請(qǐng)多指出討論。

第1章 基本概念 1.1 區(qū)分大小寫(xiě)

在學(xué)習(xí) JavaScript 之前要理解的第一個(gè)概念就是在 ECMAScript 中所有的一切(變量、函數(shù)名和操作符)都是區(qū)分大小寫(xiě)的。比如變量 test 和 Test 是兩個(gè)不同的變量,typeof 不能用在函數(shù)名上,因?yàn)樗且粋€(gè)關(guān)鍵字,但 typeOf 完全可以是一個(gè)函數(shù)名,因?yàn)樵?ECMAScript 中變量、函數(shù)名和操作符等等都是區(qū)分大小寫(xiě)的。

1.2 標(biāo)識(shí)符

在學(xué)習(xí)之前還需要了解的第二個(gè)概念就是「標(biāo)識(shí)符」,所謂標(biāo)識(shí)符就是指變量、函數(shù)、函數(shù)的參數(shù)和屬性的名字,標(biāo)識(shí)符可以下列格式規(guī)則組合起來(lái)的一個(gè)或多個(gè)字符:

第一個(gè)字符必須是是字母、下劃線(_)或者美元符號(hào)($)。

其他字符可以是字母、下劃線、美元符號(hào)或者數(shù)字。

按照慣例,ECMAScript 標(biāo)識(shí)符采用駝峰大小寫(xiě)格式,也就是第一個(gè)字母小寫(xiě),剩下的每個(gè)單詞的首字母大寫(xiě),例如:

firstSecond

myCar

doSomethingImportant

第2章 數(shù)據(jù)類(lèi)型

ECMAScript 中有 5 種基本數(shù)據(jù)類(lèi)型:Undefined、 Null、 Boolean、 String 和 Number。還有 1 種復(fù)雜數(shù)據(jù)類(lèi)型:Obect,Object 本質(zhì)上是由一組無(wú)序的名值對(duì)組成。ECMAScript 不支持任何創(chuàng)建自定義類(lèi)型的機(jī)制,而所有值最終都將是上述 6 種數(shù)據(jù)類(lèi)型之一。

2.1 typeof 操作符

由于 ECMAScript 是松散類(lèi)型的,所以需要有一種方法來(lái)檢測(cè)給定變量的數(shù)據(jù)類(lèi)型,typeof 就是負(fù)責(zé)提供這方面信息的操作符。對(duì)一個(gè)值使用 typeof 操作符可能返回下列某個(gè)字符串:

"undefined",如果這個(gè)值未定義;

"boolean",如果這個(gè)值是布爾值;

"string",如果這個(gè)值是字符串;

"number",如果這個(gè)值是數(shù)值;

"object",如果這個(gè)值是對(duì)象或 null;

"function",如果這個(gè)值是函數(shù)。

例如:

var message = "Some Message!"

alert(typeof message); // "string"
alert(typeof(message)); // "string"
alert(typeof 95); // "number"

由此可以看出 typeof 操作符的操作數(shù)可以是變量(message),也可以是數(shù)值字面量。注意,typeof 是一個(gè)操作符而不是函數(shù),所以例子中的圓括號(hào)盡管可以使用,但不是必需的。

這里需要注意一下的是,如果對(duì) null 進(jìn)行 typeof 操作的話(huà),會(huì)返回 "object",因?yàn)?null 會(huì)被認(rèn)為是一個(gè)空的對(duì)象引用。還有一些比較奇怪的返回值,比如 Safari 5 及之前的版本、 Chrome 7 及之前的版本在對(duì)正則表達(dá)式調(diào)用 typeof 操作符時(shí)會(huì)返回 "function",而在其他瀏覽器下則會(huì)返回 "object"。

2.2 Undefined 類(lèi)型

Undefined 類(lèi)型的值只有一個(gè),即特殊的 undefined。當(dāng)用 var 關(guān)鍵字聲明一個(gè)變量但未對(duì)它進(jìn)行初始化時(shí),這個(gè)變量的值就是 undefined,例如:

var message;
alert(message == undefined); // true

這個(gè)例子只對(duì) message 進(jìn)行了聲明,但未對(duì)其進(jìn)行賦值操作,此時(shí) message 的值就是 undefined,這個(gè)例子和下面這個(gè)例子是等價(jià)的:

var message = undefined;
alert(message == undefined); // true

這個(gè)例子使用 undefined 值顯式初始化了變量 message。但我們沒(méi)有必要這么做,因?yàn)槲唇?jīng)初始化的值默認(rèn)就會(huì)取得 undefined 值。

對(duì)于 Undefined 類(lèi)型還有一點(diǎn)需要注意的就是,聲明了變量但是未對(duì)其進(jìn)行初始化賦值操作和根本就沒(méi)有聲明變量是不同的:

var message; // 聲明變量后默認(rèn)取得 undefined

// 下面這個(gè)變量根本沒(méi)有聲明
// var age;

alert(message); // undefined
alert(age);// Uncaught ReferenceError: age is not defined

對(duì)于第一個(gè)警告框大家肯定沒(méi)疑問(wèn),彈出的應(yīng)該是 "undefined",由于傳遞給第二個(gè)警告框的是一個(gè)未申明的變量,所以在這里會(huì)導(dǎo)致一個(gè)錯(cuò)誤。

對(duì)于尚未申明的變量,只能對(duì)其進(jìn)行一項(xiàng)操作,即使用 typeof 對(duì)其進(jìn)行數(shù)據(jù)類(lèi)型的判斷。不過(guò)有一點(diǎn)比較奇怪的就是,對(duì)未進(jìn)行初始化賦值操作的變量和未申明的變量使用 typeof 操作符,都會(huì)返回 "undefined":

var message; // 聲明變量后默認(rèn)取得 undefined

// 下面這個(gè)變量根本沒(méi)有聲明
// var age;

alert(typeof message); // "undefined"
alert(typeof age); // "undefined"

結(jié)果表明對(duì)未進(jìn)行初始化賦值操作的變量和未申明的變量使用 typeof 操作符,都會(huì)返回 "undefined"。

2.3 Null 類(lèi)型

Null 類(lèi)型是第二個(gè)只有一個(gè)值的數(shù)據(jù)類(lèi)型,這個(gè)特殊的值是 null。從邏輯角度來(lái)看,null 值表示一個(gè)空對(duì)象指針,而這也正是使用 typeof 操作符檢測(cè) null 值時(shí)會(huì)返回 "object" 的原因,如下面的例子所示:

var car = null;
alert(typeof car); // "object"

如果定義的變量準(zhǔn)備在將來(lái)用于保存對(duì)象,那么最好將該變量初始化為 null 而不是其他值。這樣一來(lái),只要直接檢查 null 值就可以知道相應(yīng)的變量是否已經(jīng)保存了一個(gè)對(duì)象的引用,如下面的例子所示:

if (car != null){
    // 對(duì) car 對(duì)象執(zhí)行某些操作
}

實(shí)際上,undefined 值是派生自 null 值的,因此 ECMA-262 規(guī)定對(duì)它們的相等性測(cè)試要返回 true:

alert(null == undefined); //true 

這里有一點(diǎn)也要注意的是,這里的相等操作符(==)出于比較的目的,會(huì)對(duì)比較的兩個(gè)類(lèi)型進(jìn)行類(lèi)型轉(zhuǎn)換(后面會(huì)對(duì)這個(gè)知識(shí)點(diǎn)進(jìn)行一些詳細(xì)的總結(jié))。

盡管 undefined 派生自 null,但它們的用途卻不相同,無(wú)論在什么情況下都沒(méi)有必要對(duì)一個(gè)變量的值顯示的賦值為 undefined,而同樣的道理對(duì) null 卻不適用,換句話(huà)說(shuō),只要意在保存對(duì)象的變量還沒(méi)有真正的保存對(duì)象,就應(yīng)該明確地地讓該變量保存 null 值。這樣做不僅可以體現(xiàn) null 作為空對(duì)象指針的慣例,也有助于進(jìn)一步的區(qū)分 undefined 和 null。

2.4 Boolean 類(lèi)型

Boolean 類(lèi)型的值有兩個(gè),分別是 true 和 false,這兩個(gè)值和數(shù)字值不是一回事,也就是說(shuō) true 不一定等于 1,false 不一定等于 0,還有一點(diǎn)值得注意的是文章一開(kāi)始就強(qiáng)調(diào)的一個(gè)概念,在 ECMAScript 中所有的一切都是區(qū)分大小寫(xiě)的,所以 True 和 False (以及其他混合大小寫(xiě)的形式)并不是 Boolean 類(lèi)型的兩個(gè)值,只是標(biāo)識(shí)符。以下是為變量賦 Boolean 類(lèi)型值的例子:

var found = true;
var lost = false;

盡管 Boolean 類(lèi)型的值只有兩個(gè),但是在 ECMAScript 中,所有類(lèi)型的值都有與這兩個(gè) Boolean 值等價(jià)的值,將任意一種類(lèi)型的值轉(zhuǎn)換為對(duì)應(yīng)的 Boolean 值,可以調(diào)用轉(zhuǎn)型函數(shù) Boolean(),例如:

var message = "Hello World!";
var messageAsBoolean = Boolean(message);

上面這個(gè)例子中,message 字符串被轉(zhuǎn)換成了 Boolean 值,轉(zhuǎn)換后的 Boolean 值被儲(chǔ)存在變量 messageAsBoolean 中。可以對(duì)任何數(shù)據(jù)類(lèi)型的值調(diào)用 Boolean() 函數(shù),而且總會(huì)返回一個(gè) Boolean 值。至于具體返回是 true 還是 false 則要要具體的情況而定,下面給出了轉(zhuǎn)換的規(guī)則:

數(shù)據(jù)類(lèi)型 轉(zhuǎn)換為true的值 轉(zhuǎn)換為false的值
Boolean ture false
String 任何非空字符串 ""(空字符串)
Number 任何非零數(shù)字值(包括無(wú)窮大) 0和NaN(參見(jiàn)本章后面有關(guān)NaN的內(nèi)容)
Object 任何對(duì)象 null
Undefined n/a① undefined
2.5 Number 類(lèi)型

Number 類(lèi)型應(yīng)該算是幾種基本數(shù)據(jù)類(lèi)型中比較復(fù)雜的類(lèi)型吧。

在 Number 類(lèi)型中,最簡(jiǎn)單的應(yīng)該算是十進(jìn)制整數(shù)吧,十進(jìn)制整數(shù)可以直接像下面這樣在代碼中輸入:

var intNum = 9; // 整數(shù) 9

除了十進(jìn)制以外,整數(shù)還可以用二進(jìn)制、八進(jìn)制和十六進(jìn)制來(lái)表示。

其中八進(jìn)制必須以 0 開(kāi)頭,然后是八進(jìn)制數(shù)字序列(0-7),如果字面中的值超出了范圍,則第一個(gè) 0 將被忽略,后面的數(shù)值將被當(dāng)成十進(jìn)制數(shù)值解析。

var num1 = 070; // 八進(jìn)制 56
var num2 = 079 // 無(wú)效的八進(jìn)制數(shù),被解析成十進(jìn)制數(shù) 79
var num3 = 08; // 無(wú)效的八進(jìn)制數(shù),被解析成十進(jìn)制數(shù) 8

八進(jìn)制字面量在嚴(yán)格模式下是無(wú)效的,會(huì)導(dǎo)致支持的 JavaScript 引擎拋出錯(cuò)誤。

十六進(jìn)制必須以 0x 開(kāi)頭,然后是十六進(jìn)制數(shù)字序列(0-9 及 A-F),其中字母可以大寫(xiě)也可以小寫(xiě),例如:

var num1 = 0xA; // 十六進(jìn)制的 10
var num2 = 0x1f; // 十六進(jìn)制的 31

在進(jìn)行算數(shù)計(jì)算時(shí),所有的八進(jìn)制和十六進(jìn)制表示的數(shù)值最終都將被轉(zhuǎn)換成十進(jìn)制數(shù)值。

2.5.1 浮點(diǎn)數(shù)值

浮點(diǎn)數(shù)值必須包含一個(gè)小數(shù)點(diǎn),且小數(shù)點(diǎn)后面必須要有一位**非 0 **數(shù)字才算是浮點(diǎn)數(shù)值,如果小數(shù)點(diǎn)后沒(méi)有數(shù)字,則 ECMAScript 會(huì)自動(dòng)忽略這個(gè)小數(shù)點(diǎn),小數(shù)點(diǎn)前面則不一定要有數(shù)字,但不推薦這種寫(xiě)法:

var num1 = 1.1;
var num2 = 0.1;
var num3 = .1; // 有效但不推薦
var num4 = 1.; // 小數(shù)點(diǎn)后面沒(méi)有數(shù)字,被解析為 1
var num5 = 1.0; // 被解析成整數(shù) 1

由于浮點(diǎn)數(shù)值所需的內(nèi)存是整數(shù)數(shù)值所需要的內(nèi)存的兩倍,所以 ECMAScript 會(huì)不失時(shí)機(jī)的將浮點(diǎn)數(shù)值轉(zhuǎn)化為整數(shù)。

還有一點(diǎn)需要注意的是,浮點(diǎn)數(shù)值的最高精度是 17 位小數(shù),在進(jìn)行算術(shù)計(jì)算的時(shí)候其精度遠(yuǎn)遠(yuǎn)不如整數(shù)數(shù)值。比如,0.1 加上 0.2 的結(jié)果并不是 0.3,而是 0.30000000000000004。這個(gè)小小的舍入誤差會(huì)導(dǎo)致無(wú)法測(cè)試特定的浮點(diǎn)數(shù)值,例如:

var a = 0.1;
var b = 0.2;

if (a + b = 0.3) { // 不要這么測(cè)試
    alert("You got 0.3.");
}
2.5.2 數(shù)值范圍

由于內(nèi)存的限制,ECMAScript 并不能保存所有的數(shù)值,ECMAScript 能夠表示的最小數(shù)值保存在 Number.MIN_VALUE 中,能夠表示的最大數(shù)值保存在 Number.MAX_VALUE 中,具體的來(lái)說(shuō),如果一個(gè)數(shù)值超出了 ECMAScript 所能保存的數(shù)值范圍,并且如果這個(gè)值是負(fù)數(shù),則會(huì)被轉(zhuǎn)換成 -Infinity(負(fù)無(wú)窮),如果這個(gè)值是正數(shù),則會(huì)被轉(zhuǎn)換成 +Infinity(正無(wú)窮)。

如果一個(gè)數(shù)被轉(zhuǎn)換成了無(wú)窮大(Infinity),則不能進(jìn)行下一次運(yùn)算,因?yàn)?Infinity 是不能被運(yùn)算的數(shù)值。要想確定一個(gè)數(shù)值是不是有窮的(是不是最大值和最小值之間),可以使用 isFinite() 函數(shù)來(lái)確定,如果處于最大值和最小值之間,則會(huì)返回 true,例如:

var result = Number.MAX_VALUE + Number.MAX_VALUE;
var min = Number.MIN_VALUE;
var max = Number.MAX_VALUE;
alert(isFinite(result)); // false
alert(isFinite(min)); // true
alert(isFinite(max)); // true

由上可知,最大值和最小值也算是有窮的。

2.5.3 NaN

NaN 即非數(shù)值(Not a Number)是一個(gè)特殊的數(shù)值,NaN 是用來(lái)表示本來(lái)應(yīng)該返回一個(gè)數(shù)值卻沒(méi)有返回?cái)?shù)值的情況(這樣就不會(huì)拋出異常了),例如在 ECMAScript 中,0 除以 0 并不會(huì)報(bào)錯(cuò),而是會(huì)返回 NaN,因此不會(huì)影響其他代碼的執(zhí)行。在這里有一點(diǎn)需要注意的是,并不是任意數(shù)值除以 0 都會(huì)返回 NaN 的,例如:

alert(0 / 0); // "NaN"
alert(1 / 0); // "Infinity"
alert(-1 / 0); // "-Infinity"
alert(NaN / NaN); //"NaN"

由上可知,當(dāng)正數(shù)除以 0 的時(shí)候,返回的是 Infinity,當(dāng)負(fù)數(shù)除以 0 的時(shí)候,返回的是 -Infinity,只有 NaN 或者 0 初除以 0 的時(shí)候返回的才是 NaN。

NaN 有兩個(gè)特點(diǎn),首先,任何涉及 NaN 的操作都會(huì)返回 NaN;其次,NaN 與任何值都不相等,包括 NaN 本身。例如下面代碼會(huì)返回 false:

alert(NaN = NaN); // false

為了判斷某個(gè)數(shù)值是否是「非數(shù)值」,ECMAScript 定義了 isNaN() 函數(shù),該函數(shù)接受一個(gè)任意類(lèi)型的參數(shù),如果這個(gè)參數(shù)是 NaN,則返回 true,如果不是 NaN,則返回 false,例如:

alert(isNaN(NaN)); // true
alert(isNaN(10)); // false(10 是一個(gè)數(shù)值)
alert(isNaN("10")); // false(可以被轉(zhuǎn)換成數(shù)值 10)
alert(isNaN("blue")); // true(不能轉(zhuǎn)換成數(shù)值)
alert(isNaN(true)); // false(可以被轉(zhuǎn)換成數(shù)值 1)

由上可知,如果一個(gè)參數(shù)不能被轉(zhuǎn)換成數(shù)值,則 isNaN() 函數(shù)會(huì)返回 true。

值得一提的是,isNaN() 函數(shù)同樣適用于對(duì)象,在對(duì)對(duì)象調(diào)用 isNaN() 時(shí),會(huì)首先調(diào)用對(duì)象的 valueOf() 方法試圖把對(duì)象轉(zhuǎn)換為數(shù)值,如果不能轉(zhuǎn)換為數(shù)值,則基于這個(gè)對(duì)象再調(diào)用 toString() 方法,在測(cè)試返回的值。

2.5.4 數(shù)值轉(zhuǎn)換

可以把非數(shù)值轉(zhuǎn)換成數(shù)值的函數(shù)有 3 個(gè),分別是 Number()、 parseInt() 和 parseFloat()。其中 Number() 適用于任何數(shù)據(jù)類(lèi)型,另外兩個(gè)則專(zhuān)門(mén)用于把字符串轉(zhuǎn)換成數(shù)值。

Number() 函數(shù)的轉(zhuǎn)換規(guī)則如下:

如果是 Boolean 值,true 和 false 將分別被轉(zhuǎn)換為 1 和 0。

如果是數(shù)字值,只是簡(jiǎn)單的傳入和返回。

如果是 null 值,返回 0。

如果是 undefined,返回 NaN。

如果是字符串,遵循下列規(guī)則:

如果字符串中只包含數(shù)字(包括前面帶正號(hào)或負(fù)號(hào)的情況),則將其轉(zhuǎn)換為十進(jìn)制數(shù)值,即"1"會(huì)變成 1,"123"會(huì)變成 123,而"011"會(huì)變成 11(注意:前導(dǎo)的零被忽略了);

如果字符串中包含有效的浮點(diǎn)格式,如"1.1",則將其轉(zhuǎn)換為對(duì)應(yīng)的浮點(diǎn)數(shù)值(同樣,也會(huì)忽略前導(dǎo)零);

如果字符串中包含有效的十六進(jìn)制格式,例如"0xf",則將其轉(zhuǎn)換為相同大小的十進(jìn)制整數(shù)值;

如果字符串是空的(不包含任何字符),則將其轉(zhuǎn)換為 0;

如果字符串中包含除上述格式之外的字符,則將其轉(zhuǎn)換為 NaN。

如果是對(duì)象,則調(diào)用對(duì)象的 valueOf()方法,然后依照前面的規(guī)則轉(zhuǎn)換返回的值。如果轉(zhuǎn)換的結(jié)果是 NaN,則調(diào)用對(duì)象的 toString() 方法,然后再次依照前面的規(guī)則轉(zhuǎn)換返回的字符串值。

下面則是一些具體的例子:

var num1 = Number("Hello world!"); //NaN
var num2 = Number(""); //0
var num3 = Number("000011"); //11
var num4 = Number(true); //1 

parseInt() 的轉(zhuǎn)換規(guī)則如下:

var num1 = parseInt("1234blue"); // 1234
var num2 = parseInt(""); // NaN
var num3 = parseInt("0xA"); // 10(十六進(jìn)制數(shù))
var num4 = parseInt(22.5); // 22
var num5 = parseInt("070"); // 56(八進(jìn)制數(shù))
var num6 = parseInt("70"); // 70(十進(jìn)制數(shù))
var num7 = parseInt("0xf"); // 15(十六進(jìn)制數(shù))

parseInt() 在轉(zhuǎn)換字符串的時(shí)候會(huì)忽略字符串前面的空格,直到找到第一個(gè)非空格字符,如果第一個(gè)字符不是數(shù)字字符或者負(fù)號(hào),parseInt() 就會(huì)返回 NaN;如果第一個(gè)字符是數(shù)字字符,parseInt() 會(huì)繼續(xù)解析第二個(gè)字符,知道解析完所有后足字符或遇到了一個(gè)非數(shù)字字符。有一點(diǎn)應(yīng)該注意的是 parseInt() 轉(zhuǎn)換空字符串時(shí)會(huì)返回一個(gè) NaN,而 Number() 轉(zhuǎn)換一個(gè)空字符串則會(huì)返回?cái)?shù)字 0。

parseInt() 默認(rèn)解析的是十進(jìn)制數(shù),但也可以解析指定的進(jìn)制,例如:

var num1 = parseInt("10", 2); //2 (按二進(jìn)制解析)
var num2 = parseInt("10", 8); //8 (按八進(jìn)制解析)
var num3 = parseInt("10", 10); //10 (按十進(jìn)制解析)
var num4 = parseInt("10", 16); //16 (按十六進(jìn)制解析)

parseInt() 可以接受第二個(gè)參數(shù),第二個(gè)參數(shù)只能是 2、 8、 10 和 16,分別對(duì)應(yīng)相應(yīng)的進(jìn)制。為了避免錯(cuò)誤,當(dāng)我們用 parseInt() 轉(zhuǎn)換數(shù)值時(shí)指定相應(yīng)的進(jìn)制是非常有必要的。

parseFloat() 的轉(zhuǎn)換規(guī)則如下:

var num3 = parseFloat("22.5"); //22.5
var num4 = parseFloat("22.34.5"); //22.34
var num5 = parseFloat("0908.5"); //908.5
var num6 = parseFloat("3.125e7"); //31250000 

與 parseInt() 類(lèi)似,parseFloat() 也是從第一個(gè)字符開(kāi)始解析每個(gè)字符,一直解析到字符串的末尾,或者解析到一個(gè)無(wú)效浮點(diǎn)數(shù)字字符為止。與 parseInt() 不同的是,parseFloat() 解析到的第一個(gè)小數(shù)點(diǎn)是有效的,而第二個(gè)小數(shù)點(diǎn)則無(wú)效,因此它后面的字符串也將被忽略。與 parseInt() 第二個(gè)不同的是 parseFloat() 會(huì)始終忽略第一個(gè) 0。

還有一點(diǎn)需要注意的是,如果字符串包含的是一個(gè)可解析為整數(shù)的數(shù)(沒(méi)有小數(shù)點(diǎn),或者小數(shù)點(diǎn)后都是零),parseFloat() 會(huì)返回整數(shù):

var num1 = parseFloat("1234blue"); //1234 (整數(shù))
var num2 = parseFloat("1234.000"); //1234 (整數(shù))

parseFloat() 只解析十進(jìn)制數(shù),所以它不接受第二個(gè)參數(shù),這也是為什么 parseFloat() 始終會(huì)把十六進(jìn)制的數(shù)值轉(zhuǎn)換成 0 的原因:

var num2 = parseFloat("0xA"); // 0
2.6 String 類(lèi)型

String 類(lèi)型表示字符串,可以由雙引號(hào)("")或單引號(hào)("")表示,所以下面這兩種字符串都是有效的:

var firstName = "Clear";
var lastName = "Design"; 

但有一點(diǎn)需要注意的是,以什么引號(hào)開(kāi)頭就必須以什么引號(hào)結(jié)尾,比如下面這種寫(xiě)法就是錯(cuò)誤的:

var name = "Clear Design";
2.6.1 字符字面量

String 數(shù)據(jù)類(lèi)型包含一些特殊的字符字面量,也叫轉(zhuǎn)義序列,如下:

字面量 含義
換行
制表
 空格
回車(chē)
f 進(jìn)紙
斜杠
" 單引號(hào)("),在用單引號(hào)表示的字符串中使用。例如:"He said, "hey.""
" 雙引號(hào)("),在用雙引號(hào)表示的字符串中使用。例如:"He said, "hey.""
xnn 以十六進(jìn)制代碼nn表示的一個(gè)字符(其中n為0~F)。例如,x41表示"A"
unnnn 以十六進(jìn)制代碼nnnn表示的一個(gè)Unicode字符(其中n為0~F)。例如,u03a3表示希臘字符Σ
2.6.2 字符串的特點(diǎn)

ECMAScript 中的字符串是不可變的,字符串一旦創(chuàng)建,它們的值就不能改變。要改變某個(gè)變量保存的字符串,首先要銷(xiāo)毀原來(lái)的字符串,然后再用另一個(gè)包含新值的字符串填充該變量,例如:

var lang = "Java";
lang = lang + "Script"; 

上面的 lang 開(kāi)始時(shí)包含 "Java",而第二行代碼把 lang 重新定義為 "Java" 和 "Script" 的組合,即 "JavaScript"。第二行代碼并不是把原來(lái)的 lang 的值改變了,而是首先創(chuàng)建一個(gè)能容納 10 個(gè)字符的新字符串,然后在這個(gè)字符串中填充 "Java" 和 "Script",由于新的字符串拼接完成后,原來(lái)的字符串已經(jīng)沒(méi)有用了,所以原來(lái)的字符串 "Java" 和 "Script" 會(huì)被銷(xiāo)毀,這些都是發(fā)生在后臺(tái)的。

2.6.3 轉(zhuǎn)換為字符串

前面提到 Number 數(shù)據(jù)類(lèi)型的時(shí)候有提到 parseInt() 和 parseFloat() 兩個(gè)函數(shù),這兩個(gè)函數(shù)的作用是將可轉(zhuǎn)換成數(shù)值的字符串轉(zhuǎn)換成數(shù)值,而 String 數(shù)據(jù)類(lèi)型同樣也提供了一個(gè) toString() 函數(shù),它的作用是把可轉(zhuǎn)換為字符串的數(shù)據(jù)類(lèi)型轉(zhuǎn)換成字符串:

var age = 22;
var ageAsString = age.toString(); // "22"

var found = true;
var foundAsString = found.toString(); // "true"

Number、 Boolean、 Object 和 String(沒(méi)錯(cuò),String 本身也具有 toString() 方法,該方法返回該字符串的一個(gè)副本)都有 toString() 方法,但 Null 和 Undefined 沒(méi)有這個(gè)方法。

toString() 方法接受一個(gè)參數(shù),參數(shù)只能是 2、 8、 10 和 16,分別對(duì)應(yīng)相應(yīng)的進(jìn)制。例如:

var num = 10;
alert(num.toString()); // "10"
alert(num.toString(2)); // "1010"
alert(num.toString(8)); // "12"
alert(num.toString(10)); // "10"
alert(num.toString(16)); // "a" 

默認(rèn)情況(沒(méi)有傳入?yún)?shù))下 toString() 方法以十進(jìn)制格式返回?cái)?shù)值的字符串表示。在不知道傳入的值是不是 Null 或 Undefined 的時(shí)候,可以使用 String() 轉(zhuǎn)型函數(shù),該函數(shù)支持把任意數(shù)據(jù)類(lèi)型的值轉(zhuǎn)換為字符串,String() 函數(shù)的轉(zhuǎn)換規(guī)則如下:

如果值有 toString() 方法,則調(diào)用該方法(沒(méi)有參數(shù))并返回相應(yīng)的結(jié)果;

如果值是 null,則返回 "null";

如果值是 undefined,則返回 "undefined"。

下面再看幾個(gè)例子:

var value1 = 10;
var value2 = true;
var value3 = null;
var value4;

alert(String(value1)); // "10"
alert(String(value2)); // "true"
alert(String(value3)); // "null"
alert(String(value4)); // "undefined" 
2.7 Object 類(lèi)型

Object 類(lèi)型是 ECMAScript 中 6 種數(shù)據(jù)類(lèi)型中唯一一種復(fù)雜數(shù)據(jù)類(lèi)型,簡(jiǎn)單的說(shuō)的話(huà) ECMAScript 中對(duì)象就是一組數(shù)據(jù)和功能的集合。創(chuàng)建對(duì)象的方法有很多,這里說(shuō)一下比較常用的一種方法,就是通過(guò)執(zhí)行 new 操作符后跟要?jiǎng)?chuàng)建的對(duì)象類(lèi)型的名稱(chēng)來(lái)創(chuàng)建:

var o = new Object();

在了解對(duì)象之前,首先要先理解一個(gè)重要的思想:在 ECMAScript 中,Object 類(lèi)型是所有它的實(shí)例的基礎(chǔ)。也就是說(shuō),Object 類(lèi)型所具有的任何屬性和方法也同樣存在于更具體的對(duì)象中。

Object 的每個(gè)實(shí)例都具有下列屬性和方法:

constructor:保存著用于創(chuàng)建當(dāng)前對(duì)象的函數(shù)。對(duì)于前面的例子而言,構(gòu)造函數(shù)(constructor)就是 Object()。

hasOwnProperty(propertyName):用于檢查給定的屬性在當(dāng)前對(duì)象實(shí)例中(而不是在實(shí)例的原型中)是否存在。其中,作為參數(shù)的屬性名(propertyName)必須以字符串形式指定(例如:o.hasOwnProperty("name"))。

isPrototypeOf(object):用于檢查傳入的對(duì)象是否是傳入對(duì)象的原型(第 5 章將討論原型)。

propertyIsEnumerable(propertyName):用于檢查給定的屬性是否能夠使用 for-in 語(yǔ)句
(本章后面將會(huì)討論)來(lái)枚舉。與 hasOwnProperty() 方法一樣,作為參數(shù)的屬性名必須以字符串形式指定。

toLocaleString():返回對(duì)象的字符串表示,該字符串與執(zhí)行環(huán)境的地區(qū)對(duì)應(yīng)。

toString():返回對(duì)象的字符串表示。

valueOf():返回對(duì)象的字符串、數(shù)值或布爾值表示。通常與 toString() 方法的返回值相同。

在 ECMAScript 中,Object 是所有對(duì)象的基礎(chǔ),也是 ECMAScript 中需要掌握的重點(diǎn),所以筆者將在后面的學(xué)習(xí)筆記中詳細(xì)地對(duì) Object 進(jìn)行總結(jié),這里就先了解一些 Object 類(lèi)型的基本概念的方法。

2.8 總結(jié)

以上部分主要是筆者對(duì) ECMAScript 中的一些基本概念的簡(jiǎn)單總結(jié),本篇主要寫(xiě)的還是在進(jìn)一步學(xué)習(xí) ECMAScript 中需要了解的一些基本且重要的概念。

如有寫(xiě)的不好的地方還請(qǐng)多指出討論。

原文地址:http://www.cleardesign.me/javascript-study-note-1

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/85862.html

相關(guān)文章

  • 入門(mén)級(jí)前端開(kāi)發(fā)可能需要的安利列表

    摘要:開(kāi)發(fā)篇版本管理工具,無(wú)腦的視圖操作,功能強(qiáng)大并且支持多賬號(hào)點(diǎn)我跳轉(zhuǎn)網(wǎng)站篇學(xué)習(xí)最重要的是經(jīng)常百度,要始終堅(jiān)信著你的水平能遇到的坑,別人都幫你踩過(guò)了。另外就是開(kāi)發(fā)過(guò)程多看文檔,很多問(wèn)題文檔都會(huì)有相關(guān)的解決方案,多看幾次就能想到解決方法。 IDE篇 程序員最重要的的就是IDE了,一個(gè)好的IDE可以幫你省略大量的時(shí)間,以及少生很多悶氣,下面開(kāi)始前端的IDE推薦: VSCode 最推薦的IDE...

    Flands 評(píng)論0 收藏0
  • 前端相關(guān)大雜燴

    摘要:希望幫助更多的前端愛(ài)好者學(xué)習(xí)。前端開(kāi)發(fā)者指南作者科迪林黎,由前端大師傾情贊助。翻譯最佳實(shí)踐譯者張捷滬江前端開(kāi)發(fā)工程師當(dāng)你問(wèn)起有關(guān)與時(shí),老司機(jī)們首先就會(huì)告訴你其實(shí)是個(gè)沒(méi)有網(wǎng)絡(luò)請(qǐng)求功能的庫(kù)。 前端基礎(chǔ)面試題(JS部分) 前端基礎(chǔ)面試題(JS部分) 學(xué)習(xí) React.js 比你想象的要簡(jiǎn)單 原文地址:Learning React.js is easier than you think 原文作...

    fuyi501 評(píng)論0 收藏0
  • JS筆記

    摘要:從最開(kāi)始的到封裝后的都在試圖解決異步編程過(guò)程中的問(wèn)題。為了讓編程更美好,我們就需要引入來(lái)降低異步編程的復(fù)雜性。異步編程入門(mén)的全稱(chēng)是前端經(jīng)典面試題從輸入到頁(yè)面加載發(fā)生了什么這是一篇開(kāi)發(fā)的科普類(lèi)文章,涉及到優(yōu)化等多個(gè)方面。 TypeScript 入門(mén)教程 從 JavaScript 程序員的角度總結(jié)思考,循序漸進(jìn)的理解 TypeScript。 網(wǎng)絡(luò)基礎(chǔ)知識(shí)之 HTTP 協(xié)議 詳細(xì)介紹 HTT...

    rottengeek 評(píng)論0 收藏0
  • 前端資源系列(4)-前端學(xué)習(xí)資源分享&前端面試資源匯總

    摘要:特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 本以為自己收藏的站點(diǎn)多,可以很快搞定,沒(méi)想到一入?yún)R總深似海。還有很多不足&遺漏的地方,歡迎補(bǔ)充。有錯(cuò)誤的地方,還請(qǐng)斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應(yīng)和斧正,會(huì)及時(shí)更新,平時(shí)業(yè)務(wù)工作時(shí)也會(huì)不定期更...

    princekin 評(píng)論0 收藏0
  • 個(gè)人分享--web前端學(xué)習(xí)資源分享

    摘要:前言月份開(kāi)始出沒(méi)社區(qū),現(xiàn)在差不多月了,按照工作的說(shuō)法,就是差不多過(guò)了三個(gè)月的試用期,準(zhǔn)備轉(zhuǎn)正了一般來(lái)說(shuō),差不多到了轉(zhuǎn)正的時(shí)候,會(huì)進(jìn)行總結(jié)或者分享會(huì)議那么今天我就把看過(guò)的一些學(xué)習(xí)資源主要是博客,博文推薦分享給大家。 1.前言 6月份開(kāi)始出沒(méi)社區(qū),現(xiàn)在差不多9月了,按照工作的說(shuō)法,就是差不多過(guò)了三個(gè)月的試用期,準(zhǔn)備轉(zhuǎn)正了!一般來(lái)說(shuō),差不多到了轉(zhuǎn)正的時(shí)候,會(huì)進(jìn)行總結(jié)或者分享會(huì)議!那么今天我就...

    sherlock221 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<