国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

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

2019-11-20 21:00:45
字體:
供稿:網(wǎng)友

1、Javascript變量作用域

javascript中,變量主要分為局部變量和全局變量兩種,對應(yīng)的作用域也是局部作用域和全局作用域。

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

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

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

2、全局變量和作用域

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

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

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

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

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

2、typeof關(guān)鍵字

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

console.log(typeof 'str');//stringconsole.log(typeof 23);//numberconsole.log(typeof false);//booleanconsole.log(typeof [1,3,12]);//objectconsole.log(typeof {name:'jack',age:12});//objectconsole.log(typeof new Date());//object

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

3、null和undefined

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

console.log(typeof null);//objectvar persion = null;console.log(persion);//nullconsole.log(typeof undefined);//undefinedvar persion2;console.log(persion2);//undefined

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

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

這就可以看出來,null和undefined的表示值的時(shí)候,都表示空;null的數(shù)據(jù)類型為object,undefined的數(shù)據(jù)類型就是undefined。只聲明而沒有初始化的值都是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)閤是局部變量,訪問不到</script>

Situation Two

<script>function sayHello(){  var x=100;  if(x==100){    var y=x+1;    alert(y); //輸出101  }  alert(y); //也輸出101,在方法內(nèi)部,不存在塊級作用域,在C#中就不可以了!!!  for(var i=0;i<2;i++){    alert(i)  } //在for循環(huán)里面定義的變量是塊級作用域  alert(i); //因?yàn)閕是局部變量,所以輸出2}sayHello();</script>

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

關(guān)于undefined與null

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

Example1:

var xx;var yy=null;if(xx==yy){  alert('相等');}else{  alert('不等');}

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

var xx=10var yy='10';if(xx==yy){  alert('相等');}else{  alert('不等');}

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

Example3:

var n='10';switch(n){  case 10:    alert('數(shù)字');  break;  case '10':    alert('字符串');  break;}

輸出 字符串
switch中的判斷要考慮類型

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 高淳县| 绥棱县| 博客| 张家口市| 桑植县| 沛县| 平顶山市| 修文县| 崇义县| 余姚市| 横峰县| 上杭县| 黄浦区| 尤溪县| 遂溪县| 洛隆县| 洛宁县| 博罗县| 南平市| 白城市| 广元市| 如皋市| 宿松县| 汨罗市| 甘孜县| 天祝| 景宁| 繁昌县| 安新县| 绥阳县| 分宜县| 原平市| 扎鲁特旗| 突泉县| 汶上县| 天峻县| 门源| 桑日县| 涟源市| 马山县| 衡阳县|