JavaScript易混淆的零碎知識點積累

一、callee屬性 和 caller屬性。數組

區別:二者的調用對象不一樣app

arguments.callee:指向擁有這個arguments對象的函數,在遞歸運算中常常用到。函數

functionName.caller:在函數中經過函數名來調用,這個屬性中保存着調用當前函數的函數引用。functionName也可使用arguments.callee來代替 。 學習

function out(){
    console.log(arguments.callee);
    }    
out();  // ƒ out(){console.log(arguments.callee);} 
function out(){
    inner();
}
function inner(){
    console.log(arguments.callee.caller)
}
out(); // ƒ out(){inner();}

二、arguments.length 和 function.lengththis

區別:很明顯,調用這個屬性的對象不一樣。arguments.length表示調用函數時實際傳遞的參數個數,有可能與函數定義時設置的參數個數不一樣。function.length表示函數但願接收的參數個數即定義函數時聲明的形參的個數。spa

function test(a,b){
    console.log('arguments.length = '+arguments.length);
    console.log('函數test.length = '+test.length);
}
test(1,2,3,4); // arguments.length = 4, 函數test.length = 2

三、在ECMAscript5中,prototype屬性時不可枚舉的,所以使用for-in沒法獲取該屬性的值。prototype

四、apply方法和call方法code

這兩個方法的用途都是在特定的做用域中調用函數,實際上等於設置函數體this對象的值。對象

區別:主要是除了第一個參數以外的其餘參數類型不一樣。apply接收arguments對象和數組,call只能逐個傳入參數。blog

function sum(num1,num2){
        return num1 + num2;
}
function callSum1(num1,num2){
        return sum.apply(this,arguments); // 傳入arguments對象
}
function callSum2(num1,num2){
        return sum.apply(this,[num1,num2]); // 傳入數組
}
function callSum3(num1,num2){
        return sum.call(this,num1,num2); //逐個列舉參數
}
console.log(callSum1(10,10)); //20
console.log(callSum2(10,10)); //20
console.log(callSum3(10,10)); //20

 五、typeof 和 instanceof

這兩個操做符均可以用來檢測類型,可是typeof只能檢測基本數據類型,好比:字符串、數值、布爾值、undefined等,若是變量是一個對象或者null,使用typeof只會返回「object」。

使用instanceof能夠知道檢測的值是什麼類型的對象。

var num = 1;
var str = 'hello';
var b = true;
var u;
var n = null;
var arr = [1,2,3];

console.log(typeof num); //number
console.log(typeof str); // string
console.log(typeof b); // boolean
console.log(typeof u); // undefined
console.log(typeof n); // object
console.log(typeof arr); // object
console.log(arr instanceof Array); // true

 六、document.documentElement.scrollTop 和 document.body.scrollTop

頁面具備 DTD(或者說指定了 DOCTYPE)時,使用 document.documentElement。
頁面不具備 DTD(或者說沒有指定了 DOCTYPE)時,使用 document.body。
爲了兼容,可使用以下代碼:

var scrollTop = document.documentElement.scrollTop || document.body.scrollTop 

 

 

不斷學習,不斷完善中~~~

相關文章
相關標籤/搜索