上周收到湯姆大叔的贈書《JavaScript編程精解》(順風快遞哦,大叔果然給力),迫不及待瀏覽了下,首先看到是各種對該書原著的贊譽,非常期待接下來的閱讀體驗。讀完第一章,已經非常吸引我持續讀下去。因為書里的內容很對我的胃口——簡明扼要,把握細節。 這里我把自己覺得很細節,很重要的部分記錄下來,以方便今后的學習和查閱,當然也希望給正在學習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中,函數是唯一可以創建新作用域的地方。如:
var a=0; if(true) { var a=1; } alert(a);
此時,內外a的值都是1.
4.1 函數值
javascript里面的所有東西都是值,包括function函數,可以像定義一個普通變量一樣定義函數。如:
var a=null; function b(){alert("B");} (a||b)();
(a||b)()這里將"調用時不傳參數"的操作符"()"應用到了(a||b)上,如果該表達式產生的不是函數,則會報錯。用匿名的函數也可以:(a||function(){alert("B");})();
4.2 閉包
如果創建局部變量的函數調用不在棧上了,那局部變量會發生什么變化,如下:
function createFunction(){ var local=100; return function(){return local;}; } var a=createFunction(); alert(a());//輸出100
調用createFunction()返回一個函數,這里賦給了a(體現了函數值的能力),a再加上"調用時不傳參數"的操作符"()"執行返回的函數function(){return local;},local的值被保存了下來,javascript的這種特性成為閉包——包裹一些局部變量的一個函數叫做一個閉包。再如:
function makeAdder(amount){ return function(number){ return number+amount; }; }
var addTwo=makeAdder(2);
alert(addTwo(3));//輸出5 這里因為閉包保存了amount這個變量的值
ps:感謝大叔這么簡短有力的文字,讓我對閉包有了更多的了解,之前看過一些關於閉包描述,都不是很清楚。現在好多了o(∩_∩)o