2015-02-08 54 views
1

我正在學習JavaScript,並且我注意到,在調用某些對象/類的內置函數時,有時會省略引用,但在其他時間導致代碼斷開。例如在調用函數 - 何時可以省略參考對象?

document.write("<p>calling 'write' of the current document object</p>") 

你不能省略「文件」。但在

var x=window.prompt("enter a value") 
Number.isNaN(x) 

可以省略這兩個「窗口」和「號碼」,成爲

var x=prompt("enter a value") 
isNaN(x) 

爲什麼這兩種情況有什麼不同?

感謝

+0

謝謝大家的快速回復! – Ziqi 2015-02-08 15:46:05

回答

0

在JavaScript中,所有全局變量實際上都是「全局對象」的屬性。在Web瀏覽器環境中,該全局對象具有用於引用自身的屬性window。所以prompt是指全球prompt; window.prompt指的是全局window,然後是其prompt屬性,該屬性來自同一事物。因此,window.在檢索全局變量的值時是多餘的(除非全局變量已被本地或中間聲明的遮蔽)。

Number.isNaN的情況有很大的不同:從JavaScript開始通過現行規範(ES5),沒有Number.isNaN函數;它只是isNaN,這是全球性的。 ES6 adds a new, slightly different function在構造函數Number上做什麼isNaN,但是沒有首先將其參數轉換爲數字。

例子:

console.log(isNaN("foo"));  // true 
console.log(Number.isNaN("foo")); // false 

首先說true因爲獨立isNaN要挾其參數的數量在做檢查之前;由於Number("foo")NaN,該檢查返回true。 Number.isNaN說錯誤,因爲它脅迫,所以它檢查不是一個數字,所以不能是特殊的NaN數值。

1

window對象是瀏覽器中Javascript的全局範圍。 document對象不是。 (您可以直接使用document的原因是它實際上是window.documentwindow參考可以省略。)

,您可以使用isNaN有和沒有指定Number對象是有原因既是isNaN function和ECMAScript中的下一個版本一個Number.isNaN method(部分)。它們是相似的,但不完全相同。

0

document等於window.document。在瀏覽器中,全球範圍被稱爲window,因此您可以省略window

其實這是兩個不同的功能

Number.isNaN()是ES6功能,但另一個全局函數isNaN()已經存在。此功能的ES6版本提供的方式是 x是否爲NaN