我正在学习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)
为什么这两种情况不同?
由于
答案 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
function和Number.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
的方法