這篇文章寫得不完善显设,因?yàn)檎Z法方面的細(xì)節(jié)太多悄窃,懶得記錄了少欺,只記錄個大概瓷式,以后好用于自己回顧。
語法
- 區(qū)分大小寫
- 標(biāo)識符:變量责球、函數(shù)焦履、屬性的名字,或者函數(shù)的參數(shù)雏逾。
- 第一個字符必須是一個字母嘉裤、下劃線、或美元符號
- 其他字符可以使字母栖博、下劃線屑宠、美元符號或數(shù)字
- 不能把保留字、關(guān)鍵字笛匙、true侨把、false和null用作標(biāo)識符
- 注釋
//單行注釋
/*
* 這是一個
* 多行注釋
*/
- 啟用嚴(yán)格模式 "use strict"
function doSomething(){
"use strict"
//函數(shù)體
}
- 語句以分號結(jié)尾(可以省略,建議不要這么做)
變量
var message = "hi";
message = 100;//有效妹孙,但不推薦
如果在函數(shù)中定義了一個變量秋柄,那么在函數(shù)退出后這個變量就會被銷毀。
function test(){
var message = "hi";
}
test();
alert(message);//錯誤
定義多個變量
var message="hi",
found=false,
age=29;
數(shù)據(jù)類型
Undefined蠢正、Null骇笔、Boolean、Number嚣崭、String和一種復(fù)雜的數(shù)據(jù)類型Object笨触。
typeof操作符
對于一個值使用typeof操作符會返回下列某個字符串:
- ‘undefined’ -> 如果這個值未定義
- 'boolean' -> 如果這個值是布爾值
- 'string' -> 如果這個值是字符串
- 'number' -> 如果這個值是數(shù)值
- 'object' -> 如果這個值是對象或null
- 'function' -> 如果這個值是函數(shù)
var message = "some string"
alert(typeof message) //"string"
alert(typeof(message)) //"string"
alert(typeof 95) //"number"
typeof是一個操作符,不是一個函數(shù)雹舀,所以括號可以不用芦劣。
Undefined類型
在使用var聲明變量并未對其初始化時,這個變量的值就是undefined说榆。
對未初始化和未聲明的變量執(zhí)行typeof操作符都會返回undefined值虚吟。
Null類型
如果定義的變量在將來要用于保存對象,那么最好將該變量初始化為null而不是其他值签财,這樣只要檢查null就能知道相應(yīng)的變量是否保存了一個對象的引用串慰。
var car = null;
alert(typeof car);//object
if(car != null){
}
實(shí)際上undefined值是派生自null值。
如果要保存的對象還沒有真正保存對象唱蒸,那么就應(yīng)該明確讓該變量保存null值邦鲫。
Boolean類型
Boolean類型的字面值true和false是區(qū)分大小寫的。也就是說True和False以及其他的混合大小寫形式都不是Boolean的值神汹,只是標(biāo)識符庆捺。
如果要將一個值轉(zhuǎn)換為對應(yīng)的Boolean值,可以調(diào)用Boolean()函數(shù)慎冤。
var mesage ="Hello world";
var messageAsBoolean = Boolean(message);
下面是各種數(shù)據(jù)類型及其對應(yīng)的轉(zhuǎn)換規(guī)則:
Boolean true false
String 任何非空字符串 ""(空字符串)
Number 任何非零數(shù)字值(包括無窮大) 0和NaN
Object 任何對象 null
Undefined n/a undefined
這些轉(zhuǎn)換規(guī)則對流程控制語句非常重要
var message ="Hello world";
if(message){
alert("Value is true");
}
Number類型
var intNum = 55;//十進(jìn)制
var octalNum = 070;//八進(jìn)制
var hexNum = 0xA;//十六進(jìn)制
javascript中可以保存正零(+0)和負(fù)零(-0);
能夠表示的最大數(shù)值是Number.MAX_VALUE,最小數(shù)值是Number.MIN_VALUE疼燥。
如果某次計(jì)算的結(jié)果超出了Javascript所能表示的范圍的值,那么這個數(shù)值將被轉(zhuǎn)換成特殊的Infinity,如果這個數(shù)值是負(fù)數(shù)蚁堤,那么將會被轉(zhuǎn)換成-Infinity.如果要確定一個值是不是有窮的醉者,那么可以使用isFinite().這個函數(shù)在參數(shù)位于最大最小數(shù)值之間會返回true。
var result = Number.MAX_VALUE+Number.MAX_VALUE;
alert(isFinite(result));
NaN,即非數(shù)值披诗,是一個特殊的數(shù)值撬即,這個數(shù)值用于表示一個本來要返回?cái)?shù)值的操作數(shù)未返回?cái)?shù)值的情況。
任何涉及NaN的操作都會返回NaN呈队,其次NaN與任何數(shù)值都不想等剥槐,包括NaN本身。
isNaN()函數(shù)
alert(isNaN(NaN)); true
alert(isNaN(10)); false
alert(isNaN("blue"));true 不能轉(zhuǎn)換成數(shù)值
數(shù)值轉(zhuǎn)換:Number(), parseInt(),parseFloat()
第一個方法可以用于任何數(shù)據(jù)類型宪摧,而另外兩個則專門用于把字符串轉(zhuǎn)換成數(shù)值粒竖。
Number函數(shù)的轉(zhuǎn)換規(guī)則如下:
- 如果是Boolean治颅崩,true和false被分別轉(zhuǎn)換成1和0
- 如果是數(shù)字值,只是簡單的傳入和返回
- 如果是null蕊苗,返回0
- 如果是undefined沿后,返回NaN
- 如果是字符串,遵循以下規(guī)則:
- 如果字符串中只包含數(shù)字朽砰,則將其轉(zhuǎn)換為十進(jìn)制數(shù)值
- 如果字符串中包含有效的浮點(diǎn)格式尖滚,則將其轉(zhuǎn)換為對應(yīng)的浮點(diǎn)數(shù)值
- 如果字符串是空的(不包含任何字符),則將其轉(zhuǎn)換為0
- 如果字符串中包含除上述意外的字符瞧柔,則將其轉(zhuǎn)換為NaN
- 如果是對象漆弄,則調(diào)用對象的valueOf()方法,然后依照前面的規(guī)則轉(zhuǎn)換返回的值造锅,如果轉(zhuǎn)換的結(jié)果是NaN撼唾,則調(diào)用對象的toString()方法,然后再次按照前面的規(guī)則轉(zhuǎn)換返回的字符串
var num1 = parseInt("AF",16);//解析16進(jìn)制的字符串
parseFloat()
只能解析十進(jìn)制值哥蔚,因此他沒有指定第二個參數(shù)的用法券坞。如果字符串包含的是一個沒有小數(shù)點(diǎn)或者小數(shù)點(diǎn)后都是零的值,那么parseFloat會返回整數(shù)肺素。
String類型
字符串可以用雙引號或者單引號表示恨锚。
字符字面量:
- \n 換行
- \t 制表
- \b 空格
- \r 回車
- \f 進(jìn)紙
- \ 斜杠
- ' 單引號
- " 雙引號
- \xnn 以十六進(jìn)制代碼nn表示的一個字符,其中\(zhòng)41表示‘A’
- \unnnn 以十六進(jìn)制表示的nnnn表示的一個unicode字符
這些字符字面量可以出現(xiàn)在字符串中的任意位置倍靡,而且也將被作為一個字符來解析猴伶。
字符串的特點(diǎn)
- 不可變,一旦創(chuàng)建塌西,值就不能改變
轉(zhuǎn)換字符串
- 使用toString()方法他挎,null和undefined沒有這個方法
- String() 能將任何類型的值轉(zhuǎn)換成字符串
Object類型
Object的每個實(shí)例都具有下列屬性和方法:
- Constructor:保存用于創(chuàng)建當(dāng)前對象的函數(shù)
- hasOwnProperty(propertyName):用于檢查給定的屬性在當(dāng)前對象實(shí)例中是否存在,其中捡需,作為參數(shù)的屬性名办桨,必須以字符串的形式指定
- isPrototypeOf(object):用于檢查傳入的對象是否是另一個對象的原型。
- propertyIsEnumerable(propertyName):用于檢查給定的屬性是否能夠使用for-in語句來枚舉
- toLocaleString() 返回對象的字符串表示站辉,該字符串與執(zhí)行環(huán)境的地區(qū)對應(yīng)
- toString() 返回對象的字符串表示
- valeOf() 返回對象的字符串呢撞、數(shù)值或布爾值表示,通常與toString()的返回值相同
布爾操作符
邏輯非
- 如果操作數(shù)是一個對象饰剥,則返回false殊霞;
- 如果操作數(shù)是一個非空字符串,返回false
- 如果操作數(shù)是一個空字符串汰蓉,返回true
- 如果操作數(shù)是數(shù)值0绷蹲,返回true
- 如果操作數(shù)是null,返回true
- 如果操作數(shù)是NaN,返回true
- 如果操作數(shù)是undefined祝钢,返回true
邏輯與
- 如果第一個操作數(shù)是對象比规,則返回第二個操作數(shù)
- 如果第二個操作數(shù)是對象,則只有在第一個操作數(shù)的結(jié)果為true時才會返回該對象
- 如果兩個操作數(shù)都是對象拦英,則返回第二個操作數(shù)
- 如果有一個操作數(shù)是null苞俘,則返回null
- 如果有一個操作數(shù)是NaN,則返回NaN
- 如果有一個操作數(shù)是undefined,則返回undefined
邏輯或
- 如果第一個操作數(shù)是對象龄章,則返回第一個操作數(shù)
- 如果第一個操作數(shù)的求職結(jié)果為false,則返回第二個操作數(shù)
- 如果兩個操作數(shù)都是對象乞封,則返回第一個操作數(shù)
- 如果兩個操作數(shù)都是null做裙,則返回null
- 如果兩個操作數(shù)都是NaN,則返回NaN
- 如果兩個操作數(shù)都是undefined肃晚,則返回undefined
乘法操作符
- 如果操作數(shù)都是數(shù)值锚贱,之慈寧宮常規(guī)的乘法計(jì)算,如果只有一個操作數(shù)有符號关串,那么結(jié)果就是負(fù)數(shù)拧廊,如果成績超過表示反胃,則返回Infinity和-Infinity
- 如果一個操作數(shù)是NaN晋修,則結(jié)果是NaN
- 如果Infinity與0相乘吧碾,則結(jié)果是NaN
- 如果Infinity與非0數(shù)值相乘,則結(jié)果是Infinity或-Infinity墓卦,取決于有符號操作數(shù)的符號
- 如果Infinity與Infinity相乘倦春,則結(jié)果是Infinity
- 如果一個操作數(shù)不是數(shù)值,則在后臺調(diào)用Number()將其轉(zhuǎn)換為數(shù)值落剪,然后再應(yīng)用上面的規(guī)則
除法操作符
- 如果操作數(shù)都是數(shù)值睁本,執(zhí)行常規(guī)的除法計(jì)算,即兩個正數(shù)或兩個負(fù)數(shù)相處的結(jié)果還是正數(shù)忠怖,而如果只有一個操作數(shù)有符號呢堰,那么結(jié)果就是負(fù)數(shù)
- 如果一個操作數(shù)是NaN,則結(jié)果是NaN
- 如果如果是零被零除凡泣,則結(jié)果是NaN
- 如果是非零的有限數(shù)被零除則結(jié)果是Infinity或-Infinity枉疼,取決于有符號操作數(shù)的符號
- 如果是Infinity被任何非零的數(shù)值除,則結(jié)果是Infinity或-Infinity鞋拟,取決于有符號操作數(shù)的符號
- 如果一個操作數(shù)不是數(shù)值往衷,則在后臺調(diào)用Number()將其轉(zhuǎn)換為數(shù)值,然后再應(yīng)用上面的規(guī)則严卖。
變量席舍、作用域、內(nèi)存問題
- 基本數(shù)據(jù)類型:undefined哮笆、null来颤、boolean汰扭、number、string
- 基本數(shù)據(jù)類型在內(nèi)存中占據(jù)固定大小的空間福铅,因此被保存在棧內(nèi)存中萝毛。
- 從一個變量向另一個變量復(fù)制基本類型的值,會創(chuàng)建這個值的一個副本滑黔;
- 引用類型的值是對象笆包,保存在堆內(nèi)存中。
- 包含引用類型值的變量實(shí)際上包含的并不是對象本身略荡,而是一個指向該對象的指針庵佣。
- 從一個變量向另一個變量復(fù)制引用類型的值,復(fù)制的其實(shí)就是指針汛兜,因此兩個變量最終都指向同一個對象巴粪。
- 確定一個值是哪種基本類型可以使用typeof操作符,而確定一個值是哪種引用類型可以使用instanceof操作符粥谬。
- 執(zhí)行環(huán)境有全局執(zhí)行環(huán)境和函數(shù)執(zhí)行環(huán)境之分肛根。
- 每次進(jìn)入一個新執(zhí)行環(huán)境,都會創(chuàng)建一個用于搜索變量和函數(shù)的作用域鏈漏策。
- 函數(shù)的局部環(huán)境不僅有權(quán)訪問函數(shù)作用域中的變量派哲,而且有權(quán)訪問其包含環(huán)境,乃至全局環(huán)境掺喻。
- 全局環(huán)境只能訪問在全局環(huán)境中定義的變量和函數(shù)狮辽,而不能直接訪問局部環(huán)境中的任何數(shù)據(jù)。
- 變量的執(zhí)行環(huán)境有助于確定應(yīng)該何時釋放內(nèi)存巢寡。
- 垃圾回收機(jī)制:標(biāo)記清除和引用計(jì)數(shù)