2015-02-08 51 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