JavaScript語法

1.1 語法

1.1.1 區(qū)分大小寫

ECMAScript中的一切(變量蛾洛、函數(shù)名和操作符)都區(qū)分大小寫。

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

所謂標(biāo)識(shí)符剧劝,就是指變量、函數(shù)抓歼、屬性的名字讥此,或者函數(shù)的參數(shù)拢锹。

  1. 第一個(gè)字符必須是一個(gè)字母、下劃線(_)或一個(gè)美元字符($)
  2. 其他字符可以是字母萄喳、下劃線卒稳、美元符號(hào)或數(shù)字

** 最佳實(shí)踐:標(biāo)識(shí)符采用駝峰大小寫格式(即第一個(gè)字母小寫,剩下的每個(gè)單詞的首字母大寫) **

1.2 變量

var操作符定義的變量將成為定義該變量的作用域中的局部變量他巨。不過充坑,假如省略var操作符,將會(huì)創(chuàng)建一個(gè)全局變量染突。

1.3 數(shù)據(jù)類型

ECMAScript中有5種簡單數(shù)據(jù)類型:

  • Undefined
  • Null
  • Boolean
  • Number
  • String

1.3.1 typeof 操作符

  • "undefined"——如果這個(gè)值未定義捻爷;
  • "boolean"——如果這個(gè)值是布爾值;
  • "string"——如果這個(gè)值是字符串份企;
  • "number"——如果這個(gè)值是數(shù)值也榄;
  • "object"——如果這個(gè)值是對(duì)象或null;
  • "function"——如果這個(gè)值是函數(shù)司志。

** 注意:typeof 是一個(gè)操作符而不是函數(shù)甜紫,因此圓括號(hào)不是必須的。 **

1.3.2 Undefined 類型

Undefined類型只有一個(gè)值骂远,即特殊的undefined囚霸。在使用var聲明變量但未對(duì)其加以初始化時(shí),這個(gè)變量的值就是undefined激才。
  對(duì)于尚未聲明的變量邮辽,只能執(zhí)行一項(xiàng)操作,即使用typeof操作符檢測(cè)器數(shù)據(jù)類型贸营。然而吨述,令人困惑的是:對(duì)未初始化的變量執(zhí)行typeof操作符同樣也會(huì)返回undefined值。

1.3.3 Null 類型

Null類型也是只有一個(gè)值钞脂,這個(gè)特殊的值是null仇箱。從邏輯的角度講,null值表示一個(gè)空對(duì)象指針望几,而這也是使用typeof操作符檢測(cè)null值會(huì)返回"object"的原因蛀缝。如果定義的變量準(zhǔn)備在將來用于保存對(duì)象,那么最好將該變量初始化為null而不是其他值阎毅。

1.3.4 Boolean 類型

該類型只有兩個(gè)字面值:truefalse焚刚。ECMAScript中所有類型的值都有與這兩個(gè)Boolean值等價(jià)的值。要將一個(gè)值轉(zhuǎn)換為其對(duì)應(yīng)的Boolean值扇调,可以調(diào)用轉(zhuǎn)型函數(shù)Boolean()矿咕。下表給出了各種數(shù)據(jù)類型及其對(duì)應(yīng)的轉(zhuǎn)換規(guī)則。

數(shù)據(jù)類型 轉(zhuǎn)換為true的值 轉(zhuǎn)換為false的值
Boolean true false
String 任何非空字符串 空字符串
Number 任何非零數(shù)字值(包括無窮大) 0和NAN
Object 任何對(duì)象 null
Undefined n/a undefined

1.3.5 Number 類型

除了以十進(jìn)制表示外,整數(shù)還可以通過八進(jìn)制或十六進(jìn)制的字面值表示碳柱。其中捡絮,八進(jìn)制字面值的第一位必須是0,然后是八進(jìn)制數(shù)字序列(0~7)莲镣。如果字面值中的數(shù)值超過范圍福稳,前導(dǎo)零將被忽略,后面的數(shù)值將被當(dāng)作十進(jìn)制數(shù)值解析瑞侮。注意:八進(jìn)制字面量在嚴(yán)格模式下是無效的的圆。
  十六進(jìn)制字面值的前兩位必須是0x,后跟任何十六進(jìn)制數(shù)字(0~9及A~F)半火。其中略板,字母A~F可以大寫,也可以小寫慈缔。

1. 浮點(diǎn)數(shù)值

所謂浮點(diǎn)數(shù)值叮称,就是該數(shù)值中必須包含一個(gè)小數(shù)點(diǎn),并且小數(shù)點(diǎn)后面必須至少有一位數(shù)字藐鹤。

由于保存浮點(diǎn)數(shù)值需要的內(nèi)存空間是保存整數(shù)值的兩倍瓤檐,因此ECMAScript會(huì)適時(shí)地將浮點(diǎn)數(shù)值轉(zhuǎn)換為整數(shù)值。如果小數(shù)點(diǎn)后面沒有跟任何數(shù)字娱节,那么這個(gè)數(shù)值就可以作為整數(shù)值來保存挠蛉。同樣地,如果浮點(diǎn)數(shù)值本身就是一個(gè)整數(shù)(如1.0)肄满,那么該數(shù)值也會(huì)被轉(zhuǎn)換為整數(shù)谴古。
  對(duì)于那些極大或極小的數(shù)值,可以用e表示法(即科學(xué)計(jì)數(shù)法)表示的浮點(diǎn)數(shù)表示稠歉。用e表示法表示的數(shù)值等于e前面的數(shù)值乘以10的指數(shù)次冪掰担。注意:由于浮點(diǎn)數(shù)值計(jì)算有精度誤差,因此永遠(yuǎn)不要測(cè)試某個(gè)特定的浮點(diǎn)數(shù)值怒炸。

2. 數(shù)值范圍

ECMAScript能夠表示的最小數(shù)值保存在Number.MIN_VALUE中带饱,能夠表示的最大數(shù)值保存在Number.MAX_VALUE中。如果某次計(jì)算的結(jié)果得到一個(gè)超出JavaScript數(shù)值范圍的值阅羹,那么這個(gè)數(shù)值將被自動(dòng)轉(zhuǎn)換成特殊的Infinity值勺疼。

3. NaN

NaN,即非數(shù)值(Not a Number)捏鱼。這個(gè)數(shù)值用于表示一個(gè)本來要返回?cái)?shù)值的操作數(shù)未返回?cái)?shù)值的情況执庐,例如,0除以0會(huì)返回NaN导梆。

NaN本身有兩個(gè)非同尋常的特點(diǎn):
  • 任何涉及NaN的操作都會(huì)返回NaN
  • NaN與任何值都不相等

針對(duì)這兩個(gè)特點(diǎn)轨淌,ECMAScript定義了isNaN()函數(shù)迂烁。該函數(shù)接收一個(gè)值之后,會(huì)嘗試將這個(gè)值轉(zhuǎn)換為數(shù)值猿诸,而任何不能被轉(zhuǎn)換為數(shù)值的值都會(huì)導(dǎo)致這個(gè)函數(shù)返回true婚被。請(qǐng)看下面例子:

alert(isNaN(NaN)); // true
alert(isNaN(10)); // false
alert(isNaN("10")); // false
alert(isNaN("0isfalse")); // true
alert(isNaN(true)); // false

4. 數(shù)值變換

有三個(gè)函數(shù)可以把非數(shù)值轉(zhuǎn)換為數(shù)值:Number()狡忙、parseInt()和parseFloat()梳虽。第一個(gè)函數(shù)可以用于任何數(shù)據(jù)類型,而另兩個(gè)函數(shù)則專門可用于把字符串轉(zhuǎn)換為數(shù)值灾茁。

Number()函數(shù)的轉(zhuǎn)換規(guī)則如下:
  • 如果是Boolean值窜觉,true和false將被分別轉(zhuǎn)換為1和0。
  • 如果是數(shù)字值北专,只是簡單的傳入和返回禀挫。
  • 如果是null值,返回零拓颓。
  • 如果是undefined语婴,返回NaN。
  • 如果是字符串驶睦,遵循下列規(guī)則:
    • 如果字符串中只包含數(shù)字(包含前面帶正號(hào)或負(fù)號(hào)的情況)砰左,則將其轉(zhuǎn)換為十進(jìn)制數(shù)值,即"1"會(huì)變成1场航,而"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)用valueOf()方法镀娶,然后依照前面的規(guī)則轉(zhuǎn)換返回的值蔬螟。如果轉(zhuǎn)換的結(jié)果是NaN,則調(diào)用對(duì)象的toString()方法汽畴,然后再次依照前面的規(guī)則轉(zhuǎn)換返回的字符串值旧巾。
parseInt()函數(shù)的轉(zhuǎn)換規(guī)則如下:

該函數(shù)會(huì)忽略字符串前面的空格,直至找到第一個(gè)非空格字符忍些。如果第一個(gè)字符不是數(shù)字字符或者正負(fù)號(hào)鲁猩,parseInt()就會(huì)返回NaN。如果第一個(gè)字符是數(shù)字字符罢坝,parseInt()會(huì)繼續(xù)解析第二個(gè)字符廓握,直到解析完所有后續(xù)字符或者遇到了一個(gè)非數(shù)字字符搅窿。
  如果字符串以"0x"開頭且后跟數(shù)字字符,就會(huì)將其當(dāng)作一個(gè)十六進(jìn)制整數(shù)隙券。但是在ECMAScript 5 JavaScript引擎中男应,parseInt()已經(jīng)不具有解析八進(jìn)制值的能力,因此前導(dǎo)的零會(huì)被認(rèn)為無效娱仔。
  為了消除在使用parseInt()函數(shù)可能導(dǎo)致的疑惑沐飘,可以為這個(gè)函數(shù)提供第二個(gè)參數(shù):轉(zhuǎn)換時(shí)使用的基數(shù)。** 注意:為了避免錯(cuò)誤的解析牲迫,建議無論在什么情況下都明確指定基數(shù)耐朴。**

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

parseFloat()函數(shù)也是從第一個(gè)字符開始解析直至遇到第一個(gè)無效的浮點(diǎn)數(shù)字字符為止。也就是說盹憎,字符串中的第一個(gè)小數(shù)點(diǎn)是有效的筛峭,而第二個(gè)小數(shù)點(diǎn)就是無效的了。parseFloat()函數(shù)始終都會(huì)忽略前導(dǎo)的零陪每。同時(shí)影晓,該函數(shù)只解析十進(jìn)制值,因此它沒有用第二個(gè)參數(shù)指定基數(shù)的用法檩禾。最后還要注意的是挂签,如果字符串包含的是一個(gè)可解析為整數(shù)的數(shù),那么將會(huì)返回整數(shù)锌订。

1.3.6 String類型

String類型用于表示由零或多個(gè)16位Unicode字符組成的字符序列竹握,即字符串。

字符串可以由雙引號(hào)(")或單引號(hào)(')表示辆飘。

1. 字符字面量

String數(shù)據(jù)類型包含一些特殊的字符字面量啦辐,也叫轉(zhuǎn)義序列。

字面量 含義
\n 換行
\t 制表
\b 退格
\r 回車
\f 進(jìn)紙
\\ 斜杠
' 單引號(hào)
" 雙引號(hào)
\xnn 以十六進(jìn)制代碼nn表示的一個(gè)字符
\unnnn 以十六進(jìn)制代碼nnnn表示的一個(gè)Unicode 字符

這些字符字面量可以出現(xiàn)在字符串中的任意位置蜈项,而且也將被作為一個(gè)字符來解釋芹关。任何字符串的長度都可以通過訪問其length屬性取得。

2. 字符串的特點(diǎn)

ECMAScript中的字符串是不可變的紧卒,也就是說侥衬,字符一旦創(chuàng)建,它們的值就不能改變跑芳。要改變某個(gè)變量保存的字符串轴总,首先要銷毀原來的字符串,然后再用另一個(gè)包含新值的字符串填充該變量博个,例如:

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

以上示例中的變量lang開始時(shí)包含字符串"Java"怀樟。而第二行代碼把lang的值重新定義為"Java"與"Script"的結(jié)合,即"JavaScript"盆佣。實(shí)現(xiàn)這個(gè)操作的過程如下:首先創(chuàng)建一個(gè)能容納10個(gè)字符的字符串往堡,然后在這個(gè)字符串中填充"Java"和"Script"械荷,最后一步是銷毀原來的字符串"Java"和字符串"Script",這個(gè)過程是在后臺(tái)發(fā)生的虑灰。

3.轉(zhuǎn)換為字符串

要把一個(gè)值轉(zhuǎn)換為一個(gè)字符串有兩種方式吨瞎。第一種是使用幾乎每個(gè)值都有的toString()方法。數(shù)值穆咐、布爾值颤诀、對(duì)象和字符串值(每個(gè)字符串值也都有一個(gè)toString()方法。但null和undefined值沒有這個(gè)方法庸娱。)
  在調(diào)用數(shù)值的toString()方法時(shí)着绊,可以傳遞一個(gè)參數(shù):輸出數(shù)值的基數(shù)谐算。默認(rèn)情況下熟尉,toString()方法以十進(jìn)制格式返回?cái)?shù)值的字符串表示。而通過傳遞參數(shù)洲脂,toString()可以輸出任意有效進(jìn)制格式表示的字符串值斤儿。
  在不知道要轉(zhuǎn)換的值是不是null或undefined的情況下,還可以使用轉(zhuǎn)型函數(shù)String()恐锦,這個(gè)函數(shù)能夠?qū)⑷魏晤愋偷闹缔D(zhuǎn)換為字符串往果。String()函數(shù)遵循下列轉(zhuǎn)換規(guī)則:

  • 如果值有toString()方法,則調(diào)用該方法(沒有參數(shù))并返回相應(yīng)的結(jié)果
  • 如果值是null一铅,則返回"null"
  • 如果值是undefined陕贮,則返回"undefined"

**   要把某個(gè)值轉(zhuǎn)換為字符串,可以使用加號(hào)操作符把它與一個(gè)字符串("")加在一起潘飘。**

3.4.7 Object類型

ECMAScript中的對(duì)象其實(shí)就是一組數(shù)據(jù)和功能的集合肮之。對(duì)象可以通過執(zhí)行new操作符后跟要?jiǎng)?chuàng)建的對(duì)象類型的名稱來創(chuàng)建。而創(chuàng)建Object類型的實(shí)例并為其添加屬性和(或)方法卜录,就可以創(chuàng)建自定義對(duì)象戈擒,如下圖所示:

var o = new Object();

在ECMAScript中,有一個(gè)重要的思想必須理解:**Object類型是所有它的實(shí)例的基礎(chǔ)艰毒。換句話說筐高,Object類型所具有的任何屬性和方法也同樣存在于更具體的對(duì)象中。
  Object的每個(gè)實(shí)例都具有下列屬性和方法:

  • constructor:保存著用于創(chuàng)建當(dāng)前對(duì)象的函數(shù)丑瞧。對(duì)于前面的例子而言柑土,構(gòu)造函數(shù)(constructor)就是Object()。
  • hasOwnProperty(propertyName):用于檢查給定的屬性在當(dāng)前對(duì)象實(shí)例中(而不是在實(shí)例的原型中)是否存在绊汹。
  • isPrototypeOf(object):用于檢查傳入的對(duì)象是否是傳入對(duì)象的原型稽屏。
  • propertyIsEnumerable(propertyName):用于檢查給定的屬性是否能夠使用for-in語句來枚舉。
  • toLocaleString():返回對(duì)象的字符串表示灸促,該字符串與執(zhí)行環(huán)境的地區(qū)對(duì)應(yīng)诫欠。
  • toString():返回對(duì)象的字符串表示涵卵。
  • valueOf():返回對(duì)象的字符串、數(shù)值或布爾值表示荒叼。通常與toString()方法的返回值相同轿偎。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市被廓,隨后出現(xiàn)的幾起案子坏晦,更是在濱河造成了極大的恐慌,老刑警劉巖嫁乘,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昆婿,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蜓斧,警方通過查閱死者的電腦和手機(jī)仓蛆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挎春,“玉大人看疙,你說我怎么就攤上這事≈狈埽” “怎么了能庆?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長脚线。 經(jīng)常有香客問我搁胆,道長,這世上最難降的妖魔是什么邮绿? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任渠旁,我火速辦了婚禮,結(jié)果婚禮上斯碌,老公的妹妹穿的比我還像新娘一死。我一直安慰自己,他們只是感情好傻唾,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布投慈。 她就那樣靜靜地躺著,像睡著了一般冠骄。 火紅的嫁衣襯著肌膚如雪伪煤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天凛辣,我揣著相機(jī)與錄音抱既,去河邊找鬼。 笑死扁誓,一個(gè)胖子當(dāng)著我的面吹牛防泵,可吹牛的內(nèi)容都是我干的蚀之。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼捷泞,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼足删!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起锁右,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤失受,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后咏瑟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拂到,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年码泞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了兄旬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡浦夷,死狀恐怖辖试,靈堂內(nèi)的尸體忽然破棺而出辜王,到底是詐尸還是另有隱情劈狐,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布呐馆,位于F島的核電站肥缔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏汹来。R本人自食惡果不足惜续膳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望收班。 院中可真熱鬧坟岔,春花似錦、人聲如沸摔桦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽邻耕。三九已至鸥咖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間兄世,已是汗流浹背啼辣。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留御滩,地道東北人鸥拧。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓党远,卻偏偏與公主長得像,于是被迫代替她去往敵國和親富弦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子麸锉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容