Javascript聲明和使用變量

1.1變量的聲明

要在程序中使用變量尚卫,就必須從聲明變量學(xué)起酪捡,因?yàn)镴avascript語(yǔ)法與我們基礎(chǔ)的其他程序語(yǔ)言聲明變量的方法略有不同,但是Javascript語(yǔ)法的變量應(yīng)用非常強(qiáng)大纳账,使用也非常簡(jiǎn)單逛薇。

1.1.1聲明和命名變量

要使用變量,就必須聲明變量疏虫,可以使用關(guān)鍵字var來(lái)聲明永罚,如果不使用var關(guān)鍵字可能會(huì)導(dǎo)致程序不易閱讀啤呼。變量區(qū)分大小寫(xiě)。

基本的規(guī)則:var 變量名呢袱;

(1)聲明一個(gè)變量名:var firstName;

(2)聲明多個(gè)變量名官扣,用逗號(hào)分隔:var?firstName,middleName,lastName;

(3)在聲明變量時(shí)直接為變量賦值:var firstName = "chengmingxiaowu";

(4)一條語(yǔ)句聲明多個(gè)變量,同時(shí)為這些變量賦值:var?firstName="chengming",middleName="xiao",lastName="wu";

1.1.2變量和標(biāo)識(shí)符的命名規(guī)范

變量名必須是一個(gè)js標(biāo)識(shí)符羞福,遵循以下標(biāo)準(zhǔn)命名規(guī)則

(1)第一個(gè)字符必須為字母惕蹄,下劃線(_)或者美元符號(hào)($);

(2)后面可以跟字母、下劃線治专、美元符號(hào)卖陵、數(shù)字,最好不要包含其他符號(hào)张峰。

(3)變量名不能是一個(gè)關(guān)鍵字或者邏輯常量泪蔫。(true,null,false,underfind)

(4)變量名在其作用范圍內(nèi)必須是唯一的。

tip:使用錯(cuò)誤的變量名在執(zhí)行時(shí)就會(huì)導(dǎo)致錯(cuò)誤喘批,但是大多數(shù)瀏覽器不會(huì)提示這種語(yǔ)法錯(cuò)誤撩荣。

1.1.3

數(shù)據(jù)類(lèi)型可分為簡(jiǎn)單數(shù)據(jù)類(lèi)型和復(fù)雜數(shù)據(jù)類(lèi)型

一、簡(jiǎn)單的

數(shù)據(jù)類(lèi)型取值范圍

Booleantrue或false饶深。

js也會(huì)在適當(dāng)?shù)臅r(shí)候?qū)⒅缔D(zhuǎn)換為1和0餐曹。

Number雙精度浮點(diǎn)型。

兩個(gè)數(shù)字常量:

(1)Infinity表示無(wú)窮大

(2)NaN表示非數(shù)字

String表示一個(gè)字符序列粥喜,一般使用雙引號(hào)或者單引號(hào)包圍凸主。除了內(nèi)存限制以外,對(duì)其長(zhǎng)度沒(méi)有限制额湘。

UnderfindUnderfind數(shù)值類(lèi)型僅有一個(gè)值卿吐,與類(lèi)型名相同,注意區(qū)分大小寫(xiě)锋华。

當(dāng)定義了一個(gè)變量而未為該變量賦值時(shí)嗡官,該變量就是underfind.

NullNull數(shù)值類(lèi)型僅有一個(gè)值,與類(lèi)型名相同毯焕,注意區(qū)分大小寫(xiě)衍腥。

當(dāng)一個(gè)用于引用某個(gè)對(duì)象的變量不再使用時(shí),就可以為該變量賦值為null,

從而該變量就不再引用那個(gè)對(duì)象了纳猫,該變量的值就是空引用婆咸。

使用情況:

(1)聲明變量還沒(méi)有接收到值;

(2)聲明變量不再包含值芜辕;

(3)作為函數(shù)的返回值尚骄,表明很熟沒(méi)有可以返回的值;

(4)作為函數(shù)的一個(gè)參數(shù)侵续,表明省略了一個(gè)參數(shù)倔丈。

二憨闰、復(fù)雜數(shù)據(jù)類(lèi)型

(1)Array數(shù)據(jù)類(lèi)型

Array為數(shù)組變量,數(shù)組可以是連續(xù)數(shù)字索引的數(shù)組也可以是符合數(shù)組需五,并且數(shù)組元素的數(shù)據(jù)類(lèi)型也可以多種多樣鹉动。

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

Object是屬性的集合,屬性是用來(lái)描述對(duì)象特性的宏邮。

1.1.4自定義常量和內(nèi)建常量

常量也是變量泽示,但它是一個(gè)用于表示其值永遠(yuǎn)不會(huì)改變的變量。

用戶可以使用const關(guān)鍵字自定義常量蜀铲;開(kāi)發(fā)可以使用con_或者大寫(xiě)所有的常量名來(lái)區(qū)分常量和變量边琉。(IE中的常量定義不生效,所以不推薦自定義的常量记劝。)

以下是常量表:

常量說(shuō)明

false一個(gè)表示與true相反的唯一邏輯值变姨,表示邏輯假

Infinity表示正無(wú)窮大 IEEE-754值

-Infinity表示負(fù)無(wú)窮大的IEEE-754值

NaN一個(gè)預(yù)定義的變量

null一個(gè)可以分配給變量的或由未提供數(shù)據(jù)的函數(shù)返回的特殊值。

true一個(gè)表示與false相反的唯一邏輯值厌丑,表示邏輯真

undefind一個(gè)特殊值定欧,通常用于指示變量尚未賦值。

將underfind用于不同的類(lèi)型轉(zhuǎn)換函數(shù)時(shí)怒竿,結(jié)果也不相同:

(1)String 返回的是 underfind, 轉(zhuǎn)換為字符串砍鸠。

(2)Nunber返回的是NaN;

(3)Object返回的值為新的Object實(shí)例;該實(shí)例的屬性如果沒(méi)有初始化耕驰,那么其屬性值為underfind,而非null,

因?yàn)镺bject并非動(dòng)態(tài)類(lèi)爷辱。

(4)向類(lèi)型變量賦予值underfind時(shí),改值轉(zhuǎn)換為該數(shù)據(jù)類(lèi)型的默認(rèn)值朦肘。

Tip:null==underfind是true;null===underfind是false;

1.2在程序中使用變量

1.2.1為變量賦值和更改變量值:

1饭弓、為變量值賦值,1.1中已經(jīng)介紹媒抠,注意點(diǎn):

1)在位現(xiàn)有的變量重新賦值時(shí)弟断,無(wú)需使用var關(guān)鍵字;

2)不用var關(guān)鍵字申明的隱式變量具有全局作用趴生,是全局變量阀趴;

2、變量值包含引號(hào):若在變量值中包含引號(hào)(雙引號(hào)或者單引號(hào))苍匆,就必須用轉(zhuǎn)義符(\)刘急;但是如果二者交替出現(xiàn),則無(wú)需使用‘\’浸踩;

如:var myName="my name is \"chengmingxiaowu\",thank you!";

var?myName="my name is 'chengmingxiaowu',thank you!";

var?myName='my name is "chengmingxiaowu",thank you!';

3叔汁、更改變量值:只需為該變量重新賦值即可。

var? myName = "chengmingxiaowu";

myName = "xiaowu";

4、數(shù)據(jù)類(lèi)型的轉(zhuǎn)換:只需為變量賦一個(gè)不同類(lèi)型的值即可攻柠。

5、變量的默認(rèn)值:如果定義了一個(gè)變量后裸,但是沒(méi)有賦值瑰钮,則運(yùn)行環(huán)境會(huì)為其指定一個(gè)默認(rèn)值,這個(gè)默認(rèn)值為underfind微驶。

1.2.2使用變量和獲取變量值

變量的值可以相互傳遞浪谴,也可以作為函數(shù)的參數(shù)被處理,或者被直接顯示在網(wǎng)頁(yè)上因苹。

1苟耻、變量申明的順序:先申明后使用;不申明就會(huì)報(bào)錯(cuò)扶檐。

2凶杖、變量申明的提升:先使用后申明,申明會(huì)自動(dòng)提升到最頂部款筑,但是卻不能將賦值語(yǔ)句提到頂部智蝠,所以會(huì)返回該變量對(duì)應(yīng)數(shù)據(jù)類(lèi)型的默認(rèn)值。(雖合法奈梳,但不推薦杈湾。)

1.3變量的傳值和傳址

1.3.1傳值變量-按值傳遞

簡(jiǎn)單數(shù)據(jù)類(lèi)型是按值進(jìn)行傳遞的, 這種傳遞類(lèi)型被成為傳值攘须。當(dāng)按值傳遞時(shí)漆撞,將在計(jì)算機(jī)內(nèi)存中分配一塊空間并將原復(fù)制到其中,是相互獨(dú)立的實(shí)體于宙。

var i=10;

var j=i;

alert(j)//輸出15

i=30;

alert(j)//輸出15

1.3.2傳址變量-按引用傳遞

復(fù)雜數(shù)據(jù)類(lèi)型可以包含大量和復(fù)雜的信息浮驳,所以屬于此類(lèi)型的變量并不包含實(shí)際的值,它包含的是對(duì)值的引用限煞,這種傳遞類(lèi)型稱(chēng)為傳址抹恳。

(這種引用類(lèi)似于指向變量名的別名,在一些程序語(yǔ)言中稱(chēng)為指針)

var myArry = ["chengming","xiaowu"];

var newArry = myArry;

alert(newArry[1])//返回xiaowu

myArry[1]="xiaowushi";

alert(newArry[1])//返回xiaowushi

1.4內(nèi)存使用規(guī)則-堆和棧

堆和棧都是運(yùn)行時(shí)內(nèi)存中分配的一個(gè)數(shù)據(jù)去署驻,因此也被成為堆區(qū)和棧區(qū)奋献,但二者存儲(chǔ)的數(shù)據(jù)類(lèi)型和處理速度不同。

(1)堆(heap):用于復(fù)雜數(shù)據(jù)類(lèi)型的分配空間旺上,例如數(shù)組對(duì)象瓶蚂,Object對(duì)象。它在運(yùn)行時(shí)動(dòng)態(tài)分配內(nèi)存的宣吱,因此存取速度比較慢窃这。

(2)棧(stack):主要存放一些基本類(lèi)型的變量和對(duì)象的引用。優(yōu)勢(shì)速度快征候,數(shù)據(jù)共享杭攻。缺點(diǎn):棧中數(shù)據(jù)大小與生存期是確定的祟敛,缺乏靈活性。

1.4.1 棧的使用規(guī)則:

var a=3 首先會(huì)在棧中創(chuàng)建一個(gè)變量為a的引用兆解,然后查找棧中是否有3這個(gè)值馆铁,沒(méi)有找到,就將3存放進(jìn)來(lái)锅睛,然后指向a,接著處理var b=3埠巨,在創(chuàng)建完b的引用變量后,直接查找棧中是否有3這個(gè)值现拒,因?yàn)榇嬖诶崩荩灾苯又赶騜 。這樣就出現(xiàn)a和b同時(shí)指向3的情況印蔬。

此時(shí)如果a=4勋桶,那么js引擎就會(huì)重新搜索棧中是否有4,如果沒(méi)有侥猬,存放起來(lái)哥遮,并a指向4,如果已經(jīng)有了陵究,就指向這個(gè)地址眠饮,因此a值的改變不會(huì)影響到b值。

1.4.2堆的使用:

當(dāng)創(chuàng)建數(shù)組時(shí)铜邮,就會(huì)在堆內(nèi)創(chuàng)建一個(gè)數(shù)組對(duì)象仪召,并且在棧內(nèi)創(chuàng)建一個(gè)對(duì)數(shù)組的引用。

js堆不需要程序代碼來(lái)顯示的釋放松蒜,因?yàn)槎咽怯勺詣?dòng)的垃圾回收來(lái)負(fù)責(zé)的扔茅,各種引擎各不相同,但最基本的原則是秸苗,如果占中不存在對(duì)堆中某個(gè)對(duì)象堆的引用召娜,那么就會(huì)認(rèn)為該對(duì)象已經(jīng)不再需要,在垃圾回收時(shí)就會(huì)清除該對(duì)象占用的空間惊楼。

因此玖瘸,在不需要的時(shí)候應(yīng)該對(duì)對(duì)象的引用釋放掉,以利于垃圾回收檀咙。這樣可以提高性能雅倒。最常用的方法就是為其賦值null。

1.4.3易犯的錯(cuò)誤

在堆和棧的使用問(wèn)題上弧可,最易犯錯(cuò)誤的就是String的使用蔑匣,例如:

var str1 = new String("abc"); //存放在堆中

var str2 = "abc";//存放在棧中

下面進(jìn)行邏輯運(yùn)算來(lái)深入了解以下:

(1)存放在棧中

var str1 = "abc";

var str2 = "abc";

alert(str1==str2);//true

alert(str1===str2);//true

(2)存放在堆中

var str1 = new String("abc");

var str2 = new String("abc");

alert(str1==str2);//false

alert(str1===str2);//false

(3)一個(gè)存放在堆中,一個(gè)棧中

var str1 = "abc";

var str2 = new String("abc");

alert(str1==str2);//true 在進(jìn)行邏輯等于運(yùn)算時(shí),會(huì)首先將變量轉(zhuǎn)換成相同的數(shù)據(jù)類(lèi)型裁良,然后進(jìn)行對(duì)比凿将。

alert(str1===str2);//false

1.5數(shù)據(jù)類(lèi)型的轉(zhuǎn)換

在js中,有時(shí)進(jìn)行數(shù)據(jù)運(yùn)算前會(huì)對(duì)數(shù)據(jù)類(lèi)型進(jìn)行轉(zhuǎn)換价脾,分為兩種

(1)強(qiáng)制數(shù)據(jù)轉(zhuǎn)換丸相。

可以使用全局函數(shù)進(jìn)行數(shù)據(jù)類(lèi)型轉(zhuǎn)換,這些函數(shù)包括parseFloat()彼棍、parseInt()、Number()膳算、String()和Boolean()函數(shù)座硕。

(2)隱式數(shù)據(jù)類(lèi)型轉(zhuǎn)換,比如賦值的時(shí)候涕蜂。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末华匾,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子机隙,更是在濱河造成了極大的恐慌蜘拉,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件有鹿,死亡現(xiàn)場(chǎng)離奇詭異旭旭,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)葱跋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)持寄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人娱俺,你說(shuō)我怎么就攤上這事稍味。” “怎么了荠卷?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵模庐,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我油宜,道長(zhǎng)掂碱,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任慎冤,我火速辦了婚禮顶吮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘粪薛。我一直安慰自己悴了,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著湃交,像睡著了一般熟空。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上搞莺,一...
    開(kāi)封第一講書(shū)人閱讀 51,541評(píng)論 1 305
  • 那天息罗,我揣著相機(jī)與錄音,去河邊找鬼才沧。 笑死迈喉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的温圆。 我是一名探鬼主播挨摸,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼岁歉!你這毒婦竟也來(lái)了得运?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤锅移,失蹤者是張志新(化名)和其女友劉穎熔掺,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體非剃,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡置逻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了备绽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诽偷。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖疯坤,靈堂內(nèi)的尸體忽然破棺而出报慕,到底是詐尸還是另有隱情,我是刑警寧澤压怠,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布眠冈,位于F島的核電站,受9級(jí)特大地震影響菌瘫,放射性物質(zhì)發(fā)生泄漏蜗顽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一雨让、第九天 我趴在偏房一處隱蔽的房頂上張望雇盖。 院中可真熱鬧,春花似錦栖忠、人聲如沸崔挖。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)狸相。三九已至薛匪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間脓鹃,已是汗流浹背逸尖。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瘸右,地道東北人娇跟。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像太颤,于是被迫代替她去往敵國(guó)和親苞俘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

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