今天在寫代碼的時候遇到一種代碼,在處理function的參數arguments的時候,錯誤的把當作一個Array處理了,嘗試着去調用Array對應的原型對象的slice屬性,結果報undifined錯誤,可見arguments並不是Array的孩子。懷着這個疑問,查看了arguments的constructor,發現arguments的constructor居然是Object.數組
那麼若是咱們須要對arguments進行slice,解決方式有不少,原理都是講arguments轉化成數組就解決了,可是問題是,這樣的描述,用什麼樣的代碼寫最爲優美。選擇call()方法是比較合適的,call(obj,[方法參數])方法使用來描述用別的對象來替代當前對象且調用對應的方法,例如,code
emptyArray = [], slice = emptyArray.slice alert(arguments.constructor) alert(slice.call(arguments,1));//slice是emptyArray對象的,這裏至關於把emptyArray替換成arguments來調用slice。
var args = [1,2,3]; args.forEach(function(arg){alert(arg)})
alert(1||2)//1 alert(""||2)//2 /* 左邊||右邊 ,表示不是選左邊就是選右邊,左邊沒有(false),那麼留下來的就是右邊,若是左邊有了(true)留下來的就是左邊。[選了右邊,就把||以前的一塊兒擦掉,選了左邊就把右邊擦掉] */
alert(1&&2);//2 alert(""&&2);//"" /* 與||正好相反 */