妙味公開課-筆試題1

1.下列代碼輸出的值html

console.log(100['toString']['length']); // 1
console.log(100['toString']) // 輸出爲函數,由於toString是方法,沒有小括號就是沒有調用,因此返回的是函數自己

解釋:函數自己上的length屬性是函數的形參個數,toString方法有默認參數,表示的進制,因此length爲1,因此結果是1

參考連接:http://www.ecma-international.org/ecma-262/5.1/#sec-15.7.4.2數組

2.代碼輸出爲閉包

var x=1;
function fn(n){n=n+1}
y=fn(x);
console.log(y); // 輸出爲undefined

解釋:函數沒有返回值因此輸出爲undefined

3.代碼輸出爲函數

function fn1(){
    var a=0;
    function fn2(){
        ++a;
        alert(a);
    }
    return fn2;
}
fn1()();  // 彈出1
var newFn=new fn1();
newFn();  // 彈出1
newFn();  // 彈出2

解釋:第一次屬於調用函數,++a先執行++操做在賦值給a,因此彈出1,然後新創造了一個函數newFn第一次彈出和正常引用同樣,因此彈出1,2而第二次調用的時候,因爲閉包的做用,裏面a沒被釋放,在1的基礎上又加上了1,因此彈出2

參考++a和++a的區別code

4.代碼輸出爲htm

var arr=[1,2];
var arr2=arr.concat();
arr2.push(arr.splice(1,0));
console.log(arr); // [1,2]
console.log(arr2); // [1,2,[]]

知識點1:contact方法不傳參數

var arr = [1, 2];
var arr2 = arr.concat();
console.log(arr); // 輸出爲[1,2]
console.log(arr2); // 輸出爲[1,2]
小結:不傳參數,會從新建立一個同樣的數組,不改變原數組

知識點2:contact方法,傳一個一緯數組

var arr = [1, 2];
var arr2 = arr.concat([3,4]);
console.log(arr); // 輸出爲[1,2]
console.log(arr2); // 輸出爲[1,2,3,4]
小結:傳一個一緯數組,會從新建立新數組,傳入數組會被拉平,不改變原數組

知識點2:contact方法,傳一個二緯數組

var arr = [1, 2];
var arr2 = arr.concat([3,4,[5,6]]);
console.log(arr); // 輸出爲[1,2]
console.log(arr2); // 輸出爲[1,2,3,4,[5,6]]
小結:傳二緯數組,會從新建立新數組,傳入數組的最外層元素會被拉平,裏面的不變,不改變原數組

知識點3:contact方法,傳一個對象

var arr = [1, 2];
var arr2 = arr.concat({name:'bonly'});
console.log(arr); // 輸出爲[1,2]
console.log(arr2); // 輸出爲[1,2,{name:'bonly'}]
小結:傳對象,會從新建立新數組,傳入對象直接和數組拼接成新數組,不改變原數組

知識點4:splice方法

var arr = [1, 2];
console.log(arr); // 輸出[1,2]
console.log(arr.splice()); // 輸出爲[]
arr.splice();
console.log(arr); // 輸出[1,2]
小結:不傳參數表示不對數組作任何操做,可是又返回值,返回被切割的空數組

知識點5:splice方法,用於刪除數組的元素

var arr = [1, 2];
console.log(arr); // 輸出[1,2]
console.log(arr.splice(1)); // 輸出爲[2]
arr.splice(1);
console.log(arr); // 輸出[1]
小結:傳一個參數表示從這個位置開始切割(包括這個 位置),返回被切割的數組,原數組改變

知識點5:splice方法,用於刪除數組的元素

var arr = [1, 2];
console.log(arr); // 輸出[1,2]
console.log(arr.splice(1)); // 輸出爲[2]
arr.splice(1);
console.log(arr); // 輸出[1]
小結:傳一個參數表示從這個位置開始切割(包括這個 位置),返回被切割的數組,原數組改變

知識點6:splice方法,用於刪除數組的元素

var arr = [1, 2,3];
console.log(arr.splice(1,1)); // 輸出[2]
console.log(arr); // 輸出[1,3]
小結:傳兩個參數表示從第一個位置開始切割(包括這個 位置),第二個參數表示切割的個數,返回被切割的數組,原數組改變

知識點7:splice方法,用於替換數組的元素

var arr = [1, 2,3];
console.log(arr.splice(1,1,4,5)); // 輸出[2]
console.log(arr); // 輸出[1,4,5,3]
小結:傳兩個參數表示從第一個位置開始切割(包括這個 位置),第二個參數表示切割的個數,以後的參數表示在切割位置上放上開始新的元素,返回被切割的數組,原數組改變

知識點8:splice方法,用於增長數組的元素

var arr = [1, 2,3];
console.log(arr.splice(1,0,4,5)); // 輸出[]
console.log(arr); // 輸出[1,4,5,2,3]
小結:傳兩個參數表示從第一個位置開始切割(包括這個 位置),第二個參數表示切割的個數,以後參數表示在切割位置以後添加的元素,返回被切割的數組,原數組改變

參考菜鳥:http://www.runoob.com/jsref/jsref-splice.html對象

5.代碼輸出爲blog

console.log((!+[]+[]+!+[]).length); // 輸出8
console.log((!+[]+[]+!+[])); // 輸出爲truetrue
console.log((!+[]+[])); // 輸出爲true
console.log((!+[])); // true
console.log((+[])); // 0

解釋:+號除了加法運算,字符串鏈接功能,還有正號的功能,會有兩步操做,第一步先嚐試轉string,第二步嘗試轉number,因此+[]會先轉成''=>0,而後再去反爲真即true

6.下列代碼輸出字符串

console.log((3<5,4>6)); // false
console.log((4>6,3<5)); // true

解釋:,號表達式,返回的是最後一個表達式的值,第一個最後的表達式是4>6,因此fasle,第二個逗號運算符最後一個表達式是3<5,因此爲true

相關文章
相關標籤/搜索