为什么数学对象在javascript中不需要新关键字

Why Math Object does not need new keyword in javascript

本文关键字:不需要 关键字 javascript 对象 为什么      更新时间:2023-09-26

我知道Math是javascript中的一个Object,但在书中它说,当使用数学对象时,我们不需要使用新的关键字。例如,

var pi = Math.PI;
alert(pi);

我想知道为什么它不需要,而在其他Object中,比如Date,它需要新的关键字。

typeof Math -->    "object"
typeof Date -->    "function"

Math是一个Object,Date是构造函数。

new关键字用于使用构造函数而不是对象初始化实例。

Math实际上是ECMAScript中隐式global对象的一个属性的名称,它是一个普通的旧Javascript对象,类型为Math(通过将属性赋予此单个实例来定义,类似于JSON的工作方式)。规范中对此进行了说明:http://www.ecma-international.org/ecma-262/5.1/#sec-15.8

Math对象可以这样想:

// within the "global" context:
var Math = {
    PI: 3.14,
    sin: function(x) { ... },
    cos: function(x) { ... }
};

请注意,没有定义构造函数(也没有定义Call),因此表达式new Math()是无意义和未定义的。如果是的话,那么它会是这样的:

function Math() {
    this.PI = 3.14;
    this.sin = function(x) { ... };
    this.cos = function(x) { ... };
};
var Math = new Math();

new关键字用于处理构造函数。Math是一个已经实例化的全局对象。

当您调用new Date([optional parameter])时,您将创建Date函数的一个新实例,该实例存储特定于该实例的数据(日期和时间)。Math不需要存储任何特定于实例的数据,因为PI不会更改,并且所有Math函数,如sincosmax等,它们总是做相同的事情。这就是Math作为静态对象存在的原因(就像其他语言中的静态类一样)。不需要创建此对象的新实例,您可以在任何地方使用相同的实例。BTW Date也有静态方法,比如Date.parse()。使用此方法不需要创建新的Date。你叫它就像你叫Math.cos(x)一样,只是Date.parse('2014-11-04')