欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javascript基礎(chǔ)語(yǔ)法——全面理解變量和標(biāo)識(shí)符

 更新時(shí)間:2016年06月02日 09:09:41   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇javascript基礎(chǔ)語(yǔ)法——全面理解變量和標(biāo)識(shí)符。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧

關(guān)于javascript,第一個(gè)比較重要的概念是變量,變量的工作機(jī)制是javascript的基本特性。實(shí)際上,變量是標(biāo)識(shí)符的一種。本文將詳細(xì)介紹變量和標(biāo)識(shí)符

定義  

標(biāo)識(shí)符(Identifier)就是一個(gè)名字,用來(lái)對(duì)變量、函數(shù)、屬性、參數(shù)進(jìn)行命名,或者用做某些循環(huán)語(yǔ)句中的跳轉(zhuǎn)位置的標(biāo)記

//變量
var Identifier = 123;
//屬性
(new Object).Identifier = 'test';
//函數(shù)及參數(shù)
function IdentifierName(Identifier1){};
//跳轉(zhuǎn)標(biāo)記
Identifier:
for(var i = 0; i < 5; i++){
  if(i == 3){
    break Identifier;
  }
}

在日常生活中,有些東西是固定不變的,有些東西則會(huì)發(fā)生變化。例如,人的姓名和生日是固定不變的,但心情和年齡卻會(huì)隨著時(shí)間變化而變化。人們把那些會(huì)發(fā)生變化的東西稱為變量

當(dāng)程序需要將值保存起來(lái)以備將來(lái)使用時(shí),便將其賦值給一個(gè)變量。變量(variable)是一個(gè)用于保存值的占位符,可以通過(guò)變量名稱來(lái)獲得對(duì)值的引用

 

命名規(guī)則  

在詞法結(jié)構(gòu)一文中,我們介紹到j(luò)avascript是一門(mén)區(qū)分字母大小寫(xiě)的語(yǔ)言,且和其他任何編程語(yǔ)言一樣,javascript保留了一些標(biāo)識(shí)符為自己所用,保留字不能用做普通的標(biāo)識(shí)符

[注意]保留字包括關(guān)鍵字、未來(lái)保留字、空字面量和布爾值字面量

保留字 ReservedWord ::
  Keyword
  FutureReservedWord
  NullLiteral
  BooleanLiteral

javascript標(biāo)識(shí)符名允許包含字母、數(shù)字、美元符號(hào)和下劃線(但第一個(gè)字符不允許是數(shù)字)

//錯(cuò)誤示范
 6num //開(kāi)頭不能用數(shù)字
 %sum //開(kāi)頭不能用除(_ $)外特殊符號(hào),如(% + /等)
 sum+num //開(kāi)頭中間不能使用除(_ $)外特殊符號(hào),如(% + /等)

javascript允許標(biāo)識(shí)符中出現(xiàn) Unicode字符全集中的字母和數(shù)字(包括中文)。因此,程序員也可以使用非英語(yǔ)語(yǔ)言或數(shù)學(xué)符號(hào)來(lái)書(shū)寫(xiě)標(biāo)識(shí)符

var 測(cè)試文字 = 'test';

[注意]出于可移植性和易于書(shū)寫(xiě)的考慮,通常我們不使用擴(kuò)展的ASCII或Unicode字符

通常駝峰格式是標(biāo)識(shí)符命名的首選格式,第一個(gè)字母小寫(xiě),剩下的每個(gè)單詞的首字母大寫(xiě)

var myMoodToday = 'happy';

對(duì)于不同的數(shù)據(jù)類型,javascript有約定俗成的標(biāo)識(shí)符名命名規(guī)則

類型          前綴      示例    
數(shù)組(Array)         a         aItems
布爾值(Boolean)      b         bIsComplete
浮點(diǎn)數(shù)(Float)       f        fPrice
函數(shù)(Function)       fn        fnHandler
整數(shù)(Integer)        i        iItemCount
對(duì)象(Object)        o        oDIv1
正則表達(dá)式(RegExp)    re        reEmailCheck
字符串(String)       s        sUserName
變量()Variant        v        vAnything

變量聲明

聲明

在javascript中,使用一個(gè)變量之前應(yīng)當(dāng)先聲明(declare),變量是使用關(guān)鍵字var(variable的縮寫(xiě))來(lái)聲明的

var i;
var sum;

也可以通過(guò)一個(gè)var關(guān)鍵字來(lái)聲明多個(gè)變量

var i ,sum;

賦值

把值存入變量的操作稱為賦值(assignment)。一個(gè)變量被賦值以后,我們就說(shuō)該變量包含這個(gè)值

給變量第一次賦值的過(guò)程,叫初始化

我們可以將變量的初始賦值和變量聲明合寫(xiě)在一起

var message = 'hello';
var i=0,j=0,k=0;

如果未在var聲明語(yǔ)句中給變量指定初始值,那么雖然聲明了這個(gè)變量,但在給它存入一個(gè)值之前,它的初始值就是undefined

在for循環(huán)和for-in循環(huán)中同樣可以使用var語(yǔ)句,這樣可以更簡(jiǎn)潔地聲明在循環(huán)語(yǔ)法內(nèi)中使用的循環(huán)變量

for(var i=0; i<10; i++)console.log(i);

變量可以在聲明時(shí)賦值,但不能有其他操作,如+=、-=等

var a = 2;//是正確的
var a += 2;//是錯(cuò)誤的
var a = 2++;//是錯(cuò)誤的,++只能用于變量,不能用于常量

重復(fù)聲明

使用var語(yǔ)句重復(fù)聲明變量是合法且無(wú)害的,如果重復(fù)聲明且?guī)в匈x值操作,相當(dāng)于重新賦值

遺漏聲明

如果試圖讀取一個(gè)沒(méi)有聲明的變量的值,javascript會(huì)報(bào)錯(cuò)

javascript允許遺漏聲明,即直接對(duì)變量賦值而無(wú)需事先聲明,賦值操作將自動(dòng)聲明該變量

但是,在ECMAScript5嚴(yán)格模式中,給一個(gè)沒(méi)有聲明的變量賦值會(huì)報(bào)錯(cuò)

<script>
'use strict';
a = 5;
console.log(a);
</script>

變量特性  

javascript變量是弱類型(也叫松散類型)的,所謂松散類型就是可以用來(lái)保存任何類型的數(shù)據(jù)

編程語(yǔ)言分類動(dòng)態(tài)類型語(yǔ)言和靜態(tài)類型語(yǔ)言兩種。 動(dòng)態(tài)類型語(yǔ)言是指在運(yùn)行期間才去做數(shù)據(jù)類型檢查的語(yǔ)言,也就是說(shuō),在用動(dòng)態(tài)類型的語(yǔ)言編程時(shí),不用給任何變量指定數(shù)據(jù)類型,該語(yǔ)言會(huì)在第一次賦值給變量時(shí),在內(nèi)部將數(shù)據(jù)類型記錄下來(lái)。javascript就是動(dòng)態(tài)類型語(yǔ)言的代表。

在javascript中,可以在修改變量值的同時(shí)修改值的類型

var message = 'hi';
message = 100;//有效,但不推薦

變量松散類型的特性總結(jié)起來(lái)有兩點(diǎn):一是聲明時(shí)不用給變量指定數(shù)據(jù)類型;二是賦值時(shí)可以修改數(shù)據(jù)類型

變量作用域

變量的作用域(scope),又叫執(zhí)行環(huán)境(execution context),是程序源代碼中定義這個(gè)變量的區(qū)域

作用域分為全局作用域和函數(shù)作用域(又叫局部作用域)兩種

全局作用域是最外圍的一個(gè)執(zhí)行環(huán)境,在web瀏覽器中,全局執(zhí)行環(huán)境被認(rèn)為是window對(duì)象。所有全局變量和函數(shù)都是作為window對(duì)象的屬性和方法創(chuàng)建的。全局變量擁有全局作用域,在javascript代碼中的任何地方都是有定義的。全局作用域直到應(yīng)用程序退出例如關(guān)閉網(wǎng)頁(yè)或?yàn)g覽器時(shí)才會(huì)被銷毀

在函數(shù)內(nèi)聲明的變量只在函數(shù)體內(nèi)有定義。它們是局部變量,作用域是局部性的。函數(shù)參數(shù)也是局部變量,它們只在函數(shù)體內(nèi)有定義。函數(shù)作用域中的所有代碼執(zhí)行完畢后,該作用域被銷毀,保存在其中的所有變量和函數(shù)定義也隨之銷毀

function test(){
  var message = 'hi';
}
test();
alert(message);//錯(cuò)誤

如果省略var操作符,則會(huì)創(chuàng)建一個(gè)全局變量

function test(){
  message = 'hi';
}
test();
alert(message);//'hi'

雖然省略var操作符可以定義全局變量,但并不推薦。在局部作用域中定義的全局變量很難維護(hù),而且如果有意地忽略了var操作符,也會(huì)由于相應(yīng)變量不會(huì)馬上就有定義而導(dǎo)致不必要的混亂,給未經(jīng)聲明的變量賦值在嚴(yán)格模式下會(huì)導(dǎo)致拋出ReferenceError錯(cuò)誤

在函數(shù)體內(nèi),局部變量的優(yōu)先級(jí)高于同名的全局變量,如果在函數(shù)內(nèi)聲明的一個(gè)局部變量或者函數(shù)參數(shù)中帶有的變量和全局變量重名,那么全局變量就被局部變量遮蓋

var scope = 'global';
function checkscope(){
  var scope = 'local';
  return scope;
};
checkscope();//'local'

聲明提升(hoisting)

塊級(jí)作用域

塊級(jí)作用域是指花括號(hào)內(nèi)的每一段代碼都具有各自的作用域,而javascript沒(méi)有塊級(jí)作用域。javascript只有函數(shù)作用域:變量在聲明它們的函數(shù)體以及這個(gè)函數(shù)體嵌套的任意函數(shù)體內(nèi)都是有定義的

這意味著,變量在聲明之前甚至已經(jīng)可用。javascript這個(gè)特性被非正式地稱為聲明提升(hoisting),javascript函數(shù)里聲明的所有變量(不涉及賦值)都被提前到函數(shù)體的頂部

[注意]其實(shí)除了變量提升,函數(shù)也被提升,到函數(shù)部分會(huì)有詳細(xì)介紹

var scope = 'global';
function f(){
  console.log(scope);//undefined
  var scope = 'local';
  console.log(scope);//'local'
}
//變量聲明提升之后,相當(dāng)于下面代碼
var scope = 'global';
function f(){
  var scope;
  console.log(scope);//undefined
  scope = 'local';
  console.log(scope);//'local'
}

javascript中沒(méi)有塊級(jí)作用域,所以一些程序員特意將變量聲明放在函數(shù)體頂部,這種源代碼非常清晰地反映了真實(shí)的變量作用域

屬性變量

當(dāng)聲明一個(gè)javascript全局變量時(shí),實(shí)際上是定義了全局對(duì)象window的一個(gè)屬性

當(dāng)使用var聲明一個(gè)變量時(shí),創(chuàng)建的這個(gè)變量是不可配置的,也就是說(shuō)這個(gè)變量無(wú)法通過(guò)delete運(yùn)算符刪除

var truevar = 1;
console.log(truevar,window.truevar);//1 1
delete truevar;//false
console.log(truevar,window.truevar);//1 1

如果沒(méi)有使用嚴(yán)格模式并給一個(gè)未聲明的變量賦值的話,javascript會(huì)自動(dòng)創(chuàng)建一個(gè)全局變量,以這種方式創(chuàng)建的變量是全局對(duì)象的正常的可配置屬性,并可以刪除它們

window.fakevar1 = 10;
console.log(fakevar1,window.fakevar1);//10 10 
this.fakevar2 = 20;
console.log(fakevar2,window.fakevar2); //20 20
fakevar = 30;
console.log(fakevar,window.fakevar); //30 30

delete window.fakevar1;//true
delete this.fakevar2;//true
delete fakevar;//true

console.log(fakevar1,window.fakevar1);//報(bào)錯(cuò)
console.log(fakevar2,window.fakevar2); //報(bào)錯(cuò)
console.log(fakevar,window.fakevar); //報(bào)錯(cuò)

javascript全局變量是全局對(duì)象的屬性,這是在ECMAScript中強(qiáng)制 規(guī)定的。局部變量當(dāng)做跟函數(shù)調(diào)用相關(guān)的某個(gè)對(duì)象的屬性。ECMAScript3稱為調(diào)用對(duì)象(call object),ECMAScript5稱為聲明上下文對(duì)象(declarative environment record)。javascript允許使用this關(guān)鍵字來(lái)引用全局對(duì)象,卻沒(méi)有辦法可以引用局部變量中存放的對(duì)象。這種存放局部變量對(duì)象的特有性質(zhì),是一種對(duì)我們不可見(jiàn)的內(nèi)部實(shí)現(xiàn)

以上這篇javascript基礎(chǔ)語(yǔ)法——全面理解變量和標(biāo)識(shí)符就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論