紅寶書之JS語法

ECMAScript的語法大量借鑒了C及類C語言的語法隙姿。
JS的語法特點比較多,大致如下:

1.JS語言區(qū)分大小寫
2.標(biāo)識符
3.注釋
4.嚴(yán)格模式
5.語句

標(biāo)識符

所謂標(biāo)識符就是指變量亩码、函數(shù)、屬性的名字、或者函數(shù)的參數(shù)。標(biāo)識符規(guī)則:
1.第一個字符必須是一個字母央渣、下劃線计盒、或一個美元符號渴频;
2.其他字符可以是字母、下劃線北启、美元符號或數(shù)字卜朗;
3.標(biāo)識符采用駝峰命名法。

嚴(yán)格模式

嚴(yán)格模式為JS定義了一種不同的解析與執(zhí)行模型咕村,在嚴(yán)格模式下场钉,ECMAScript3中的一些不確定的行為將得到處理,而且對某些不安全的操作也會拋出錯誤懈涛。要在整個腳本中啟用安全模式逛万,可以在頂部添加代碼:

"use strict"

這是一個編譯指示,用于告訴引擎切換到嚴(yán)格模式批钠。
也可以在函數(shù)中定義宇植。在函數(shù)內(nèi)部的最上方包含這條指令得封,可以指定函數(shù)在嚴(yán)格模式下執(zhí)行。

funtion doSomething () {
    "use strict"
    //  函數(shù)體
}
語句

任何時候都不要省略一條語句后面的分號指郁,因為加上分號可以避免很多錯誤忙上,如不完整的輸入和壓縮時如果結(jié)尾沒有分號會導(dǎo)致壓縮錯誤。

關(guān)鍵字和保留字

關(guān)鍵字可以用于表示控制語句的開始或者結(jié)束闲坎,或者用于執(zhí)行特定操作疫粥。
關(guān)鍵字也是語言保留的,不能用作標(biāo)識符腰懂。

還有一些不能用作標(biāo)識符的保留字梗逮,有可能將來用作關(guān)鍵字。

變量

ECMASprint的變量是松散類型的绣溜,可以用來保存任何類型的數(shù)據(jù)库糠。

var message

var 是一個關(guān)鍵字,后面是一個變量名涮毫,也是一個標(biāo)識符瞬欧。這樣定義而未賦值的變量,會返回undefined罢防。
用var操作符定義的變量將成為定義該變量的作用域中的局部變量艘虎,如果在函數(shù)中定義,在函數(shù)被調(diào)用時咒吐,就會創(chuàng)建該變量并為其賦值野建,在函數(shù)退出后就會被銷毀。
如果省略var操作符恬叹,變量就會成為全局變量候生。不推薦使用這種方法。

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

ECMAScript中有六種數(shù)據(jù)類型绽昼,五種簡單數(shù)據(jù)類型也叫基本數(shù)據(jù)類型:
1.Undefined
2.Null
3.Boolean
4.Number
5.String
一種復(fù)雜數(shù)據(jù)類型:
6.Object

變量定義未賦值和變量未定義使用typeof都會打印undefined唯鸭。

typeof操作符

因為ECMAScript是松散類型的,因此需要一種手段來檢測給定變量的數(shù)據(jù)類型硅确,所以有了typeof目溉。

1. typeof(1)// number
2. typeof("1")  // string
3. typeof(true)// boolean
4. typeof({ }) // object
5. typeof(null)// object
6. typeof([ ])// object
7. typeof(undefined)// undefined
8. typeof(console.log)// function
Undefined 類型

這個類型只有一個值,就是undefined菱农。
什么時候會返回undefined
1.定義變量未賦值
2.函數(shù)默認(rèn)返回值
3.訪問某個對象沒有的屬性時候
4.沒有傳入實參
5.undefined

Null類型

這也是只有一個值的數(shù)據(jù)類型缭付,他的值就是null。
null值表示一個空對象指針循未,這就是使用typeof(null)的時候會返回"object"的原因陷猫。
舉個小例子,這時候彈出的就是object:

        var car = null;
        alert(typeof car)

為什么要定義成null,還是有一些到阿里的绣檬,如果定義的變量準(zhǔn)備在將來用于保存對象舅巷,那么最好將變量初始化為null而不是其他值,這樣直接檢查null就可以知道相應(yīng)的變量是否已經(jīng)保存了一個對象的引用河咽。這樣可以體現(xiàn)它作為一個空指針钠右。

并且還有一點 需要特別注意。
undefined是派生自null值的忘蟹。所以這兩個值的相等性測試返回為true飒房。他們兩個的區(qū)別是:null是壓根兒沒有這個東西,undefined是有這個東西但是沒有賦值媚值。

alert(null == undefined); // true 

但是盡管如此狠毯,他們的用處是不同的,任何時候都沒有必要把一個變量的值設(shè)為undefined褥芒,但卻可以設(shè)置為null嚼松。

Boolean 類型

這個類型有兩個值:true和false。
這兩個值是區(qū)分大小寫的锰扶,只有小寫的才是Boolean值献酗,首字母大寫及其他形式都不是值,只是標(biāo)識符坷牛。
數(shù)據(jù)類型及對應(yīng)的轉(zhuǎn)換規(guī)則詳細如下:

數(shù)據(jù)類型                  轉(zhuǎn)為true                 轉(zhuǎn)為false
Boolean                       true                  false
string                 任何非空字符串               空字符串
number     任何非零數(shù)字(包括無窮大)                0和NAN
object                      任何對象                 null
undefined                 不適用                   undefined

為什么要了解這些轉(zhuǎn)換規(guī)則呢罕偎?
因為它對理解流程控制語句很重要,語句中會自動執(zhí)行Boolean轉(zhuǎn)換京闰⊙占埃看這個小例子:

let message = "你好啊";
   if (message) {
       alert('我是true哦')
   }

頁面會直接alert出“我是true哦”這句話。
原因是因為字符串直接被自動轉(zhuǎn)換成了對應(yīng)的Boolean值(true)蹂楣。因為有這種轉(zhuǎn)換俏站,所以知道使用的變量是什么狀態(tài)至關(guān)重要,如果你不小心用了一個對象而不是Boolean值痊土,就有可能徹底改變應(yīng)用程序的流程肄扎。

Number 類型

number 類型的值包括浮點數(shù)和整數(shù)。
最典型的一個就是0.1+0.2等不等于0.3施戴?
答案是:不反浓。因為等于0.30000000000000004。

number類型的特點:

1.浮點數(shù)的最高精度是17位赞哗,但是進行運算使,精度不如整數(shù)辆雾。
ECMAScript會自動將可以轉(zhuǎn)換為整數(shù)的浮點數(shù)自動轉(zhuǎn)為整數(shù)肪笋。
2.它的數(shù)值范圍是Infinity(正無窮) ---- -Infinity(負(fù)無窮)
3.NaN,一個特殊的數(shù)值,用于表示一個本來要返回數(shù)值的操作數(shù)和未返回數(shù)值的情況(這樣不會報錯)藤乙。
4.數(shù)值轉(zhuǎn)換猜揪。

NaN有兩個特點
(1).任何涉及NaN的操作,都返回NaN坛梁,0除以0會返回NaN而姐,其他語言會直接報錯。
(2).NaN和任何值都不相等划咐,包括NaN本身拴念。

isNaN()

針對NaN的特點,定義了isNaN()這個函數(shù)褐缠。
這個函數(shù)可以接收一個任何類型的參數(shù)政鼠,來判斷這個參數(shù)是否“ 不是數(shù)值”。判斷原理是接收參數(shù)之后队魏,會嘗試將這個值轉(zhuǎn)換為數(shù)值公般,某些不是數(shù)值的值會被直接轉(zhuǎn)換為數(shù)值,例如胡桨,字符串"10"或Boolean值官帘。而任何不能被轉(zhuǎn)換為數(shù)值的值都會導(dǎo)致這個函數(shù)返回true。

        console.log(isNaN(NaN))    // true NaN和任何數(shù)值都不相等昧谊,包括它自身
        console.log(isNaN(10))     // false isNaN判斷的是:是否不是一個數(shù)值遏佣,10是一個數(shù)值,所以返回false
        console.log(isNaN("10"))   // false 可以被轉(zhuǎn)換為數(shù)值10
        console.log(isNaN("blue")) // true (不能被轉(zhuǎn)換為數(shù)值揽浙,所以他不是數(shù)值状婶,返回true)
        console.log(isNaN(true))   // false (可以被轉(zhuǎn)換成數(shù)值1)

還有一點不可思議的地方,isNaN() 也適用于對象馅巷,在基于對象調(diào)用isNaN() 函數(shù)的時候膛虫,會首先調(diào)用對象的valueOf() 方法,然后確定該方法返回的值是否可以轉(zhuǎn)換為數(shù)值钓猬,如果不能稍刀,則基于這個返回值再調(diào)用toString() 方法,再測試返回值敞曹。這個過程就是ECMAScript中的一般執(zhí)行流程账月。

Sring 類型

string可以使用 " " 或者 ' ' 表示,這兩種寫法都是有效的澳迫。
特點如下:
1.字符字面量
2.字符串是不可變的局齿,一旦創(chuàng)建,值不可變橄登。
3.有兩種方法將一個值轉(zhuǎn)換為字符串抓歼。
(1)toString()方法讥此。幾乎每個值都有toString()方法,數(shù)值谣妻,布爾值萄喳,對象和字符串值等,只有null和undefined沒有這個方法蹋半。
(2) string()方法他巨。在不知道值是不是null和undefined的情況下,可以使用轉(zhuǎn)型函數(shù)string()方法减江。它能夠?qū)⑷魏晤愋偷闹缔D(zhuǎn)換為字符串染突。
string()方法規(guī)則:
1>如果值有toString()方法,就調(diào)用這個方法并返回相應(yīng)結(jié)果您市;
2>如果值是null觉痛,就返回null;
3>如果值是undefined茵休,就返回undefined薪棒。

多數(shù)情況下,調(diào)用toString()不用傳遞參數(shù)榕莺,但是在調(diào)用數(shù)值的這個方法時俐芯,可以傳入一個參數(shù),輸出數(shù)值的基數(shù)钉鸯。這個方法可以輸出二進制吧史,八進制,十六進制等和其他任意有效進制的字符串值唠雕。

       let num = 10;
        console.log(num.toString())    // 字符串10
        console.log(num.toString(2))   // "1010"  將十進制轉(zhuǎn)換為二進制
        console.log(num.toString(8))   // "12"    將十進制轉(zhuǎn)換為八進制
        console.log(num.toString(16))  // "a" 將十進制轉(zhuǎn)換為8進制
        console.log(num.toString(10))  // "10" 十進制輸出
object 類型

對象類型其實就是一組數(shù)據(jù)和功能的集合贸营,可以通過new操作符來創(chuàng)建。object類型所具有的任何屬性和方法同樣存在于更具體的對象中岩睁。
object的每個實例都具有下列屬性和方法:
(1)constructor:保存著用于創(chuàng)建當(dāng)前對象的函數(shù)钞脂。對于前面的例子而言,構(gòu)造函數(shù)(constructor)就是object()捕儒。
(2)hasOwnProperty(propertyName): 用于檢查給定的屬性在當(dāng)前對象實例中(而不是在實例的原型中)是否存在冰啃。其中,作為參數(shù)的屬性名(propertyName)必須以字符串形式指定刘莹,例如:o.hasOwnProperty("name")
(3)isPrototypeof(object):用于檢查傳入的對象是否是傳入對象的原型阎毅。
(4)propertyIsEnumerable(propertyName):用于檢查給定的屬性是否能夠使用for-in語句來枚舉。與hasOwenProperty()方法一樣点弯,作為參數(shù)的屬性名必須以字符串形式來指定扇调。
(5)toLocaleString():返回對象的字符串表示,該字符串與執(zhí)行環(huán)境的地區(qū)相對應(yīng)蒲拉。
(6)toString():返回對象的字符串表示肃拜。
(7)valueOf():返回對象的字符串痴腌、數(shù)值或布爾值表示雌团。通常與toString()方法的返回值相同燃领。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市锦援,隨后出現(xiàn)的幾起案子猛蔽,更是在濱河造成了極大的恐慌,老刑警劉巖灵寺,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件曼库,死亡現(xiàn)場離奇詭異,居然都是意外死亡略板,警方通過查閱死者的電腦和手機毁枯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來叮称,“玉大人种玛,你說我怎么就攤上這事∪块埽” “怎么了赂韵?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長挠蛉。 經(jīng)常有香客問我祭示,道長,這世上最難降的妖魔是什么谴古? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任质涛,我火速辦了婚禮,結(jié)果婚禮上掰担,老公的妹妹穿的比我還像新娘汇陆。我一直安慰自己,他們只是感情好恩敌,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布瞬测。 她就那樣靜靜地躺著,像睡著了一般纠炮。 火紅的嫁衣襯著肌膚如雪月趟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天恢口,我揣著相機與錄音孝宗,去河邊找鬼。 笑死耕肩,一個胖子當(dāng)著我的面吹牛因妇,可吹牛的內(nèi)容都是我干的问潭。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼婚被,長吁一口氣:“原來是場噩夢啊……” “哼狡忙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起址芯,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤灾茁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后谷炸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體北专,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年旬陡,在試婚紗的時候發(fā)現(xiàn)自己被綠了拓颓。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡描孟,死狀恐怖驶睦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情画拾,我是刑警寧澤啥繁,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站青抛,受9級特大地震影響旗闽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蜜另,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一适室、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧举瑰,春花似錦捣辆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至耸序,卻和暖如春忍些,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背坎怪。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工罢坝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人搅窿。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓嘁酿,卻偏偏與公主長得像隙券,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子闹司,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

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

  • 1开仰、標(biāo)識符 標(biāo)識符是指變量拟枚、函數(shù)薪铜、屬性的名字众弓,或函數(shù)的參數(shù)。 格式規(guī)則: 第一個字符必須是一個字母隔箍、下劃線(_)或...
    風(fēng)中丶凌亂閱讀 1,622評論 0 0
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,216評論 0 4
  • 1蜒滩、標(biāo)識符 標(biāo)識符是指變量滨达、函數(shù)、屬性的名字俯艰,或函數(shù)的參數(shù)捡遍。 格式規(guī)則: 第一個字符必須是一個字母、下劃線(_)或...
    霜天曉閱讀 693評論 0 0
  • 北湖軒 山與樹 公眾號鏈接 http://mp.weixin.qq.com/s/-0nbcsBTU-WUrjniX...
    簡悅直播教練恬源閱讀 171評論 0 0
  • 一個人竹握,聽著歌画株,漫無目的的隨便走走!
    米藍色的晴天閱讀 327評論 1 2