1.null和undefined區別
undefined 繼承自null,兩者都是瀏覽器window的一個特殊屬性
例:
alert('undefined' in window); //輸出:true
var anObj = {};
alert('undefined' in anObj); //輸出:false
undefined 表示變量未定義或者定義了未賦值的值
例:
var a;
alert(a);//輸出:undefined
alert( typeof b);//輸出:undefined
alert(b);//產生錯誤
對於未聲明的變量,只能執行一項操作,即使用typeof 檢測其數據類型
即便未初始化的變量被自動賦予undefined值,但顯示地初始化變量依然是明智的選擇。如果能做到這一點,那麼當typeof操作符返回undefined值時,我們就知道被檢測的變量還沒有被聲明,而不是尚未被初始化。
null代表空指針對象,所以用typeof檢測null回返回"object"
無論在什麼情況下沒有必要把一個變量顯式的設置爲undefined;但只要意在保存對象的變量名還沒有真正保存對象(實例化),就應該明確地讓該變量保存null值。這樣做可以體現null作爲空對象指針的慣例,而且也有助於進一步區分null和undefined。
個人認爲null和undefined主要作用是區分未賦值的對象和變量,正確使用null和undefined可以避免一些混亂
2.RegExp類型
var expression=/parttern/flags
var parttenr1=/[bc]at/i
var parttenr2=new RegExp("[bc]at","i")
alert(parttenr2.source);正則表達式字面量值
alert(parttenr2.golbal);是否設置了global標誌
alert(parttenr2.ignoreCase);是否設置了i標誌
alert(parttern2.multiline);是否設置了m標誌
alert(parttern2.lastIndex);整數,表示開始搜索下一個匹配項的字符位置,從0算起
所有元字符都要雙重轉義:
/\w\\hello\\123\ 等價"\\w\\\\hello\\\\123"
exex()匹配返回一個Array數組,包含2個額外屬性,index和input,index表示匹配字符出現的位置,input表示應用正則表達式的字符串
var test="cat bat bat";
var matches=parttern2.exec(text);
alert(matches[0]);
test()方法接受一個字符串參數,匹配模式返回true
3.作用域鏈(Scope Chain)
JavaScript中的一種重要機制,JS中所有的標識符(Identifier)都是通過Scope Chain來查找值的。
詞法作用域(Lexical Scoping)
JavaScript中的函數運行在它們被定義的作用域裏,而不是它們被執行的作用域裏.
這個作用域我們稱之爲[[scope]]
非內嵌函數的[[scope]]都是宿主對象,不同的宿主會有不同的內容
var i = "w i";
var a =function(){
alert(i);
}
var b = function(){
var i = "b i";
a();
}
var c = function(){
a();
}
a();
b();
c();
輸出都爲 w i
call apply都不繼承原型鏈
只繼承函數中定義的方法屬性