1、Javascript變數作用域
javascript中,變數主要分為局部變數和全域變數兩種,對應的作用域也是局部作用域和全域作用域。
1 局部變數和作用域
局部變數一般在函數體內部宣告使用:
function func(){ var i=12;//局部變數......}局部變數的作用域在宣告這個變數的函數體範圍內使用。
局部變數的宣告週期從函數被呼叫執行開始初始化,在函數呼叫執行完畢之後被銷毀。
2、全域變數和作用域
全域變數一般在函數體外面宣告:
var i=12;//全域變數function func(){ ......}還有一種沒有宣告而直接使用的變量,預設為全域變數:
function func(){ i=12;//沒有被宣告(使用var 關鍵字宣告),預設為全域變數}全域變數在目前頁面中所有的腳本和方法中都可以使用,作用域為目前頁面腳本中。
全域變數的宣告週期在變數被初始化時被創建,在目前頁面關閉的時候被銷毀。
2、typeof關鍵字
typeof關鍵字主要用來偵測變數的資料類型,JavaScript中主要的資料型別有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中的陣列、json物件都是object資料類型的
3、null和undefined
null和undefined在JavaScript中經常出現,表示一個變數的值為空或是一個變數未被定義。在表示值的時候,都可以表示為空值,但是在資料型別方面還是不一樣。
console.log(typeof null);//objectvar persion = null;console.log(persion);//nullconsole.log(typeof undefined);//undefinedvar persion2;console.log(persion2);//undefined
null的資料型別為object,undefined的資料型別就是undefined。
變數聲明,值為null,變數值為null;變數只聲明,沒有賦值,值為undefined。
再看一組對比:
console.log(null==undefined);//true 值相等console.log(null===undefined);//false 類型不相等
這就可以看出來,null和undefined的表示值的時候,都表示空;null的資料型別為object,undefined的資料型別就是undefined。只宣告而沒有初始化的值都是undefined。
以下是補充
Situation One
<script> var i; //全域變數//方法名稱是camel命名法//方法裡面的變數是局部變數function sayHello(){ var x=100; alert(x); x++; } sayHello(); / /輸出100 alert(x); //報錯,因為x是局部變量,存取不到</script>Situation Two
<script>function sayHello(){ var x=100; if(x==100){ var y=x+1; alert(y); //輸出101 } alert(y); //也輸出101,在方法內部,不存在區塊級作用域,在C#中就不行了! ! ! for(var i=0;i<2;i++){ alert(i) } //在for迴圈裡面定義的變數是區塊級作用域alert(i); //因為i是局部變量,所以輸出2} sayHello();</script>註:變數使用前可以不用var聲明,這樣的變數會被認為是「全域變數」,但很少這樣用
關於undefined與null
有以下幾種情況的,變數的值為undefined
1.變數定義,但沒有賦值,則變數的值為undefined
2.呼叫的方法沒有回傳值,在傳回的值為undefined
3.物件的屬性值不存在,則傳回值為undefined,如:document.ddd
Example1:
var xx;var yy=null;if(xx==yy){ alert('相等');}else{ alert('不等');}輸出結果為相等,因為在進行if判斷時,瀏覽器會對xx及yy進行值的判斷,因為兩者都沒有具體的值,認為他們都是false。
如果if判斷中換成===[全等於符號],則輸出不等!因為===表示要求xx及yy的資料型態和值都要相同才可以!
Example2:
var xx=10var yy='10';if(xx==yy){ alert('相等');}else{ alert('不等');}輸出相等,如果換成===,則輸出不等
Example3:
var n='10';switch(n){ case 10: alert('數字'); break; case '10': alert('字串'); break;}輸出字串
switch中的判斷要考慮類型
總結:if中的判斷是判斷數值,不考慮類型