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

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

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

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

定義  

標(biāo)識符(Identifier)就是一個名字,用來對變量、函數(shù)、屬性、參數(shù)進(jìn)行命名,或者用做某些循環(huán)語句中的跳轉(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;
  }
}

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

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

 

命名規(guī)則  

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

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

保留字 ReservedWord ::
  Keyword
  FutureReservedWord
  NullLiteral
  BooleanLiteral

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

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

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

var 測試文字 = 'test';

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

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

var myMoodToday = 'happy';

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

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

變量聲明

聲明

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

var i;
var sum;

也可以通過一個var關(guān)鍵字來聲明多個變量

var i ,sum;

賦值

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

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

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

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

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

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

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

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

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

重復(fù)聲明

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

遺漏聲明

如果試圖讀取一個沒有聲明的變量的值,javascript會報(bào)錯

javascript允許遺漏聲明,即直接對變量賦值而無需事先聲明,賦值操作將自動聲明該變量

但是,在ECMAScript5嚴(yán)格模式中,給一個沒有聲明的變量賦值會報(bào)錯

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

變量特性  

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

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

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

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

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

變量作用域

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

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

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

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

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

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

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

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

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

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

聲明提升(hoisting)

塊級作用域

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

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

[注意]其實(shí)除了變量提升,函數(shù)也被提升,到函數(shù)部分會有詳細(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中沒有塊級作用域,所以一些程序員特意將變量聲明放在函數(shù)體頂部,這種源代碼非常清晰地反映了真實(shí)的變量作用域

屬性變量

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

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

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

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

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)錯
console.log(fakevar2,window.fakevar2); //報(bào)錯
console.log(fakevar,window.fakevar); //報(bào)錯

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

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

相關(guān)文章

最新評論