天天看點

javascript基礎之一

這裡再次感謝大叔提供了這麼好的javascript學習書籍,想學習javascript的同學,不要錯過這本書哦 o(∩_∩)o

一,javascript基礎

1.undefined和null:當使用var something;定義一個變量,alert(something)得到就是undefined。undefined和null主要是理論上的差別:null表示該值被定義,但是沒有任何實際值。undefined==null傳回true。

2.自動類型轉換

下面幾個判斷都會傳回true:false==0  ""==0  "5"==5  在多數情況下會将一個類型的值轉化為另一個類型進行判斷,但是當遇到null或者undefined的時候,隻有兩邊都是null或undefined時才傳回true。0,NaN和空字元串(""或者空白字元(串)"  ")轉化為false,其他所有的值都會轉化為true。

如果不想發送任何類型的自動轉化,可以使用另外的兩個操作符:===和!==。分别表示精确相等和精确不等,此時,null===undefined,false===0,""===0,"5"===5都會傳回false。

如果數字和字元串相乘,javascript會嘗試将字元串轉換為數字。如"Apollo"+5——>Apollo5,null+"ify"——>nullify,"5"*5=25,"zxf"*5=NaN.因為字元串不是數字,是以得到的結果也不是數字,NaN==NaN傳回的是false,判斷是否是數字可以用isNaN函數。

3.&&和||

||的作用:如果能将該值轉化為bool,并且值為true,就傳回左邊的值,否則傳回右邊的值

&&的作用:當左邊的值為false時,傳回左邊的值,否則傳回右邊的值。

另:隻在必要時才執行表達式右邊的值,例如true||X,不管X什麼,結果都是true,是以X從來就沒有被執行過。

4.函數

在C#等其他語言中,大括号是可以産生新的作用域的,但是在javascript中,函數是唯一可以建立新作用域的地方。如:

此時,内外a的值都是1.

4.1 函數值

javascript裡面的所有東西都是值,包括function函數,可以像定義一個普通變量一樣定義函數。如:

(a||b)()這裡将"調用時不傳參數"的操作符"()"應用到了(a||b)上,如果該表達式産生的不是函數,則會報錯。用匿名的函數也可以:(a||function(){alert("B");})();

4.2 閉包

如果建立局部變量的函數調用不在棧上了,那局部變量會發生什麼變化,如下:

調用createFunction()傳回一個函數,這裡賦給了a(展現了函數值的能力),a再加上"調用時不傳參數"的操作符"()"執行傳回的函數function(){return local;},local的值被儲存了下來,javascript的這種特性成為閉包——包裹一些局部變量的一個函數叫做一個閉包。再如:

ps:感謝大叔這麼簡短有力的文字,讓我對閉包有了更多的了解,之前看過一些關于閉包描述,都不是很清楚。現在好多了o(∩_∩)o

繼續閱讀