全局范围中的JavaScript编号构造方法。他们为什么工作?

时间:2018-02-16 18:53:19

标签: javascript constructor scope numbers

我试图理解javaScript语言的结构。

有人可以告诉我:

我知道isNaN()是Number构造函数的一个方法。

那么,以下两个例子是如何工作的呢?

console.log(isNaN(3));

if(isNaN(3)) {
    console.log(`3 is *not* a number`);
} else {
    console.log(`3 is a number`);
}

窗口上有 isNaN()函数 - >即window.isNaN()不存在。

你不是在写3.isNaN()或Number.isNaN(3)

如何单独编写isNaN()函数(或任何其他Number方法),您是否能够访问Number构造函数?

对比:

实现String方法时,将其从实际字符串中删除,因此String方法由此字符串方法继承。例如:

let littleString = 'I am a string'.toLowerCase();

你不能写:

toLowerCase('I am a little string');

或者你会收到错误:

ReferenceError: Can't find variable: toLowerCase

那么,为什么你能用数字做这个呢?

谢谢!

2 个答案:

答案 0 :(得分:3)

  

我了解isNaN()Number构造函数的一种方法,isNaN()

上没有window函数

没有。实际上有两个isNaN函数(甚至它们的工作方式不同):

答案 1 :(得分:2)

  

全局函数 - 全局调用而不是对象调用的函数 - 直接将其结果返回给调用者。

{ type: 'morning', name: 'some person', id: 'person db index', } 是一个全局函数,但isNaN不是。

请参阅global functions

toLowerCase

由于eval() uneval() // not standardized isFinite() isNaN() parseFloat() parseInt() decodeURI() decodeURIComponent() encodeURI() encodeURIComponent() escape() // deprecated unescape() // deprecated toLowerCase()构造函数的原型,因此需要在字符串上调用此方法。

实际上,String是全局定义的(继承自window对象),也是Number构造函数。