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

深入理解JS中的變量及作用域、undefined與null

 更新時(shí)間:2014年03月04日 10:10:12   投稿:jingxian  
本篇文章主要是對(duì)JS中的變量及作用域、undefined與null進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助

1、Javascript變量作用域

javascript中,變量主要分為局部變量和全局變量?jī)煞N,對(duì)應(yīng)的作用域也是局部作用域和全局作用域。

1 局部變量和作用域
局部變量一般在函數(shù)體內(nèi)部聲明使用:

function func(){
  var i=12;//局部變量
  ......
}

局部變量的作用域在聲明這個(gè)變量的函數(shù)體范圍內(nèi)使用。
局部變量的聲明周期從函數(shù)被調(diào)用執(zhí)行開(kāi)始初始化,在函數(shù)調(diào)用執(zhí)行完畢之后被銷(xiāo)毀。

2、全局變量和作用域

全局變量一般在函數(shù)體外面聲明:

var i=12;//全局變量
function func(){
  ......
}

還有一種沒(méi)有聲明而直接使用的變量,默認(rèn)為全局變量:

function func(){
  i=12;//沒(méi)有被聲明(使用var 關(guān)鍵字聲明),默認(rèn)為全局變量
}

全局變量在當(dāng)前頁(yè)面中所有的腳本和方法中都可以使用,作用域?yàn)楫?dāng)前頁(yè)面腳本中。
全局變量的聲明周期在變量被初始化時(shí)被創(chuàng)建,在當(dāng)前頁(yè)面關(guān)閉的時(shí)候被銷(xiāo)毀。

2、typeof關(guān)鍵字

typeof關(guān)鍵字主要用來(lái)檢測(cè)變量的數(shù)據(jù)類(lèi)型,JavaScript中主要的數(shù)據(jù)類(lèi)型有string、number、Boolean、object等

console.log(typeof 'str');//string
console.log(typeof 23);//number
console.log(typeof false);//boolean
console.log(typeof [1,3,12]);//object
console.log(typeof {name:'jack',age:12});//object
console.log(typeof new Date());//object

注意: js中的數(shù)組、json對(duì)象都是object數(shù)據(jù)類(lèi)型的

3、null和undefined

null和undefined在JavaScript中經(jīng)常出現(xiàn),表示一個(gè)變量的值為空或者是一個(gè)變量未被定義。在表示值的時(shí)候,都可以表示為空值,但是在數(shù)據(jù)類(lèi)型方面還是不一樣。

console.log(typeof null);//object
var persion = null;
console.log(persion);//null

console.log(typeof undefined);//undefined
var persion2;
console.log(persion2);//undefined

null的數(shù)據(jù)類(lèi)型為object,undefined的數(shù)據(jù)類(lèi)型就是undefined。
變量聲明,值為null,變量值為null;變量只聲明,沒(méi)有賦值,值為undefined。
再看一組對(duì)比:

console.log(null==undefined);//true 值相等
console.log(null===undefined);//false  類(lèi)型不相等

這就可以看出來(lái),null和undefined的表示值的時(shí)候,都表示空;null的數(shù)據(jù)類(lèi)型為object,undefined的數(shù)據(jù)類(lèi)型就是undefined。只聲明而沒(méi)有初始化的值都是undefined。

下面是補(bǔ)充

Situation One

<script>
  var i; //全局變量
  //方法名是camel命名法
  //方法里面的變量是局部變量

  function sayHello(){
  var x=100;
  alert(x);
  x++;
  }
  sayHello(); //輸出100
  alert(x); //報(bào)錯(cuò),因?yàn)閤是局部變量,訪問(wèn)不到
</script>

Situation Two

<script>
function sayHello(){
  var x=100;
  if(x==100){
    var y=x+1;
    alert(y); //輸出101
  }
  alert(y); //也輸出101,在方法內(nèi)部,不存在塊級(jí)作用域,在C#中就不可以了!??!

  for(var i=0;i<2;i++){
    alert(i)
  } //在for循環(huán)里面定義的變量是塊級(jí)作用域
  alert(i); //因?yàn)閕是局部變量,所以輸出2

}
sayHello();
</script>

注:變量使用前可以不用var聲明,這樣的變量會(huì)被認(rèn)為是“全局變量”,但很少這樣用

關(guān)于undefined與null

有以下幾種情況的,變量的值為undefined
1、變量定義,但沒(méi)有賦值,則變量的值為undefined
2、調(diào)用的方法沒(méi)有返回值,在返回的值為undefined
3、對(duì)象的屬性值不存在,則返回值為undefined,如:document.ddd

Example1:

var xx;
var yy=null;

if(xx==yy){

  alert('相等');

}

else{

  alert('不等');
}

輸出結(jié)果為相等,因?yàn)樵谶M(jìn)行if判斷時(shí),瀏覽器會(huì)對(duì)xx及yy進(jìn)行值的判斷,因?yàn)閮烧叨紱](méi)有具體的值,認(rèn)為他們都是false。
如果if判斷中換成===[全等于符號(hào)],則輸出不等!因?yàn)?==表示要求xx及yy的數(shù)據(jù)類(lèi)型和值都要相同才可以!
 
Example2:

var xx=10
var yy='10';

if(xx==yy){

  alert('相等');
}

else{

  alert('不等');
}

輸出相等,如果換成===,則輸出不等

Example3:

var n='10';
switch(n){
  case 10:

    alert('數(shù)字');
  break;

  case '10':

    alert('字符串');
  break;
}

輸出 字符串
switch中的判斷要考慮類(lèi)型

總結(jié):if中的判斷是判斷數(shù)值,不考慮類(lèi)型

相關(guān)文章

  • javascript 正則表達(dá)式(一)

    javascript 正則表達(dá)式(一)

    javascript 正則表達(dá)式使用實(shí)例,挺有意思的,既不是基礎(chǔ)也不是技巧就是解決例子。
    2010-05-05
  • js實(shí)現(xiàn)倒計(jì)時(shí)關(guān)鍵代碼

    js實(shí)現(xiàn)倒計(jì)時(shí)關(guān)鍵代碼

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)倒計(jì)時(shí)的關(guān)鍵代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 使用script的src實(shí)現(xiàn)跨域和類(lèi)似ajax效果

    使用script的src實(shí)現(xiàn)跨域和類(lèi)似ajax效果

    在解決js的跨域問(wèn)題的時(shí)候, 有多種方式, 其中有一種是利用script標(biāo)簽的src屬性,因?yàn)檫@個(gè)屬性是不受域名限制的,我們可以直接讓src的這個(gè)鏈接指向跨域網(wǎng)站的一個(gè)接口, 這個(gè)接口返回的是js代碼或者json格式數(shù)據(jù), 從而實(shí)現(xiàn)跨域獲取數(shù)據(jù)。
    2014-11-11
  • 操作按鈕懸浮固定在微信小程序底部的實(shí)現(xiàn)代碼

    操作按鈕懸浮固定在微信小程序底部的實(shí)現(xiàn)代碼

    在一些購(gòu)物平臺(tái)經(jīng)常需要將商品加入購(gòu)物車(chē),像加入購(gòu)物車(chē)按鈕、結(jié)算按鈕、收貨列表添加地址按鈕都是按鈕懸浮底部的,怎么實(shí)現(xiàn)這樣的功能呢?下面小編給大家?guī)?lái)了操作按鈕懸浮固定在微信小程序底部的實(shí)現(xiàn)代碼,一起看看吧
    2019-08-08
  • JS實(shí)現(xiàn)鼠標(biāo)點(diǎn)擊箭頭旋轉(zhuǎn)180度功能

    JS實(shí)現(xiàn)鼠標(biāo)點(diǎn)擊箭頭旋轉(zhuǎn)180度功能

    這篇文章主要介紹了JS實(shí)現(xiàn)鼠標(biāo)點(diǎn)擊箭頭旋轉(zhuǎn)180度的效果,通過(guò)點(diǎn)擊三角按鈕旋轉(zhuǎn)180度,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2024-02-02
  • layui layer select 選擇被遮擋的解決方法

    layui layer select 選擇被遮擋的解決方法

    今天小編就為大家分享一篇layui layer select 選擇被遮擋的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-09-09
  • 簡(jiǎn)單了解TypeScript中如何繼承 Error 類(lèi)

    簡(jiǎn)單了解TypeScript中如何繼承 Error 類(lèi)

    這篇文章主要介紹了簡(jiǎn)單了解TypeScript中如何繼承 Error 類(lèi),一個(gè)典型的網(wǎng)站服務(wù)器可能需要有 NetworkError, DatabaseError, UnauthorizedError 等。 我們希望這些類(lèi)都擁有 Error 的特性:有錯(cuò)誤消息、有調(diào)用棧、有方便打印的 toString 等。,需要的朋友可以參考下
    2019-06-06
  • js實(shí)現(xiàn)一個(gè)頁(yè)面多個(gè)倒計(jì)時(shí)的3種方法

    js實(shí)現(xiàn)一個(gè)頁(yè)面多個(gè)倒計(jì)時(shí)的3種方法

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)一個(gè)頁(yè)面多個(gè)倒計(jì)時(shí)的3種方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • 微信小程序開(kāi)發(fā)之麥克風(fēng)動(dòng)畫(huà) 幀動(dòng)畫(huà) 放大 淡出

    微信小程序開(kāi)發(fā)之麥克風(fēng)動(dòng)畫(huà) 幀動(dòng)畫(huà) 放大 淡出

    本篇文章主要介紹了微信小程序開(kāi)發(fā)之麥克風(fēng)動(dòng)畫(huà):幀動(dòng)畫(huà)、放大、淡出的相關(guān)資料。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-04-04
  • JavaScript中的類(lèi)與實(shí)例實(shí)現(xiàn)方法

    JavaScript中的類(lèi)與實(shí)例實(shí)現(xiàn)方法

    這篇文章主要介紹了JavaScript中的類(lèi)與實(shí)例實(shí)現(xiàn)方法,非常巧妙的模擬了類(lèi)與實(shí)例的實(shí)現(xiàn)過(guò)程,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-01-01

最新評(píng)論