JavaScript學(xué)習(xí)筆記二

這篇文章寫得不完善显设,因?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ù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末喉脖,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子抑月,更是在濱河造成了極大的恐慌树叽,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谦絮,死亡現(xiàn)場離奇詭異题诵,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)层皱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門性锭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人叫胖,你說我怎么就攤上這事草冈。” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵怎棱,是天一觀的道長哩俭。 經(jīng)常有香客問我,道長拳恋,這世上最難降的妖魔是什么凡资? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮谬运,結(jié)果婚禮上隙赁,老公的妹妹穿的比我還像新娘。我一直安慰自己梆暖,他們只是感情好伞访,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著式廷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪芭挽。 梳的紋絲不亂的頭發(fā)上滑废,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機(jī)與錄音袜爪,去河邊找鬼蠕趁。 笑死,一個胖子當(dāng)著我的面吹牛辛馆,可吹牛的內(nèi)容都是我干的俺陋。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼昙篙,長吁一口氣:“原來是場噩夢啊……” “哼腊状!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起苔可,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤缴挖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后焚辅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體映屋,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年同蜻,在試婚紗的時候發(fā)現(xiàn)自己被綠了棚点。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡湾蔓,死狀恐怖瘫析,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤颁股,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布么库,位于F島的核電站,受9級特大地震影響甘有,放射性物質(zhì)發(fā)生泄漏诉儒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一亏掀、第九天 我趴在偏房一處隱蔽的房頂上張望忱反。 院中可真熱鬧,春花似錦滤愕、人聲如沸温算。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽注竿。三九已至,卻和暖如春魂贬,著一層夾襖步出監(jiān)牢的瞬間巩割,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工付燥, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宣谈,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓键科,卻偏偏與公主長得像闻丑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子勋颖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

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