调用函数 - 何时可以省略引用对象?

时间:2015-02-08 15:06:55

标签: javascript function

我正在学习javascript,我注意到在某些对象/类上调用内置函数时,有时会省略引用,但在其他时候会导致代码中断。例如在

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

你不能省略“文件”。但是在

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

您可以省略“window”和“Number”以成为

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

为什么这两种情况不同?

由于

4 个答案:

答案 0 :(得分:1)

window是网络浏览器的全球范围。

MDN对此有一个很好的解释:https://developer.mozilla.org/en-US/docs/Web/API/Window.window

isNaN也可以在window之外使用,但它与Number.isNaN的功能不同。运行isNaN == Number.isNaN会产生false

答案 1 :(得分:1)

window对象是浏览器中Javascript的全局范围。 document对象不是。 (您可以直接使用document的原因是它实际上window.document并且window引用可以省略。)

您可以在指定isNaN对象时使用Number的原因是isNaN functionNumber.isNaN method(下一版本的一部分) ECMAScript中)。它们是相似的,但并不完全相同。

答案 2 :(得分:0)

在JavaScript中,所有全局变量实际上都是&#34;全局对象的属性。&#34;在Web浏览器环境中,该全局对象具有用于引用自身的属性window。因此prompt指的是全球prompt; window.prompt指的是全局window,然后是prompt属性,它指的是相同的内容。因此,window.在检索全局变量的值时是多余的(除非全局变量已被本地或中间声明遮蔽)。

Number.isNaN情况完全不同:从JavaScript的开头到当前规范(ES5),没有Number.isNaN函数;它只是isNaN,这是全球性的。 Number构造函数上的ES6 adds a new, slightly different function执行isNaN执行的操作,但没有将其参数转换为数字。

示例:

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

第一个说true,因为独立isNaN在进行检查之前强制其参数为一个数字;由于Number("foo")NaN,因此检查返回true。 Number.isNaN表示错误,因为它没有强制执行,因此它所检查的内容根本不是数字,因此无法成为特殊NaN数字值。

答案 3 :(得分:0)

document等于window.document。在浏览器中,全局范围称为window,因此您只需省略window

实际上这是两个不同的功能

Number.isNaN()是ES6函数,但已存在另一个全局函数isNaN()。此函数的ES6版本为reliably check提供了x是否为NaN

的方法