2017-02-17 91 views
3

我認識剛學編程和偶然發現了這一點,並留下我百思不得其解:請解釋此Javascript怪癖

請打開一個控制檯(瀏覽器/火狐)和類型:var name = ['what', 'the', '...?'];

我希望name到是一個字符串數組,但:的

  • typeof name顯示器string代替Array
  • 列出name個可變打印字符串而不是陣列
  • name.length13代替3
  • 寫入name = name.split(',')返回按預期的陣列["what", "the", "...?"],但name仍然是一個string,不是數組

name是唯一似乎表現這種方式的變量名稱,或者至少我找不到另一個名稱。

這僅僅是一個控制檯怪癖,一個JavaScript引擎錯誤,或者是什麼?

注意:上述情況發生在Chrome和Firefox上。 IE Edge驚人地按預期工作(typeof nameArray和所有)。未在其他瀏覽器上測試過。

+1

嘗試使用「name」以外的變量名稱。 https://developer.mozilla.org/en-US/docs/Web/API/Window/name – j08691

回答

6

window.name是一個全局的DOM,它是一個字符串。

通知您可以在一個功能範圍內聲明的變量繞過它:

(function() { 
 
    var name = ['foo', 'bar']; 
 
    console.log(typeof name); 
 
})();

至於爲什麼IE/Edge是不同的 - 它的規範的解釋和可能有多年來一直如此。現在改變它將是一個突破性的改變。

+1

那麼爲什麼在Edge中沒有發生?!! – niceman

+0

@niceman這取決於他們是否在進行鑄造。 –

+0

哇,謝謝!從來沒有想過檢查! – Mtz