2009-09-06 67 views
6

我在indexOf頁面的developer.mozilla.org網站上查看javascript參考手冊,並在其實現代碼indexOf中注意到了一些事情,希望有人能向我解釋。爲什麼在提取數組長度時使用/ *,*/around參數和爲什麼使用>>>?

爲了節省大家往返於Mozilla的網站,這裏是整個函數:

if (!Array.prototype.indexOf) 
{ 
    Array.prototype.indexOf = function(elt /*, from*/) 
    { 
    var len = this.length >>> 0; 

    var from = Number(arguments[1]) || 0; 
    from = (from < 0) 
     ? Math.ceil(from) 
     : Math.floor(from); 
    if (from < 0) 
     from += len; 

    for (; from < len; from++) 
    { 
     if (from in this && 
      this[from] === elt) 
     return from; 
    } 
    return -1; 
    }; 
} 

我不明白的是在函數聲明的/*, from*/,零填充右移>>>在提取陣列的長度(var len = this.length >>> 0;)。

回答

10

/*, from */是一個註釋掉的參數。但看起來它已留在註釋中,表明該參數可以爲該功能指定(可選)

var from = Number(arguments[1]) || 0; 

相信如果傳入arguments[1]將是from值。

的參數陣列是特別是與功能,可以是 調用的 參數個數可變,或與 有用他們正式宣佈接受比 更多的論據。 http://www.devguru.com/Technologies/Ecmascript/Quickref/arguments.html

>>>是一個無符號的右移。它在這裏用於將潛在簽名號碼length轉換爲無符號數字。

Extract from Professional JavaScript for Web Developers

http://www.c-point.com/javascript_tutorial/jsoprurshift.htm

+0

謝謝,現在有道理。我沒有意識到長度屬性可能是任何東西,但沒有簽名,JavaScript拼圖我有時:) – 2009-09-06 14:06:54

3

/*, from */是可選參數。之後通知var from = Number(arguments[1]) || 0;。如果函數調用中傳遞了第二個參數,則該變量將設置爲它。

不確定未簽名的右移。對我沒有任何意義。

3

函數聲明中的/*, from*/只是作者的評論,說第是從開始的第二個可選參數。它是作爲註釋寫入的,因此它不是簽名的一部分(Array.prototype.indexOf.length返回1)。

而且右移可能總是得到一個整數值this.length

相關問題