为什么Math是一个对象而String是一个函数?

时间:2015-05-04 05:41:39

标签: javascript

以下是我的Chrome javascript控制台的屏幕截图:

enter image description here

为什么Math被视为对象,而StringBooleanWindow都被视为功能?

5 个答案:

答案 0 :(得分:7)

StringBoolean是用于显式创建该类型对象的构造函数,可用作:

var s = new String("hello");
var t = new Boolean(true);

通常不需要像这样直接使用这些构造函数,但是如果由于某种原因需要完整的字符串或布尔对象而不是基元,它们就在那里。

Math是一个用作命名空间的对象,用作容纳一堆数学函数的容器,如Math.min()Math.max()Math.random()等。它不是构造函数,也不会自己创建其他对象。您可以查看Math对象here on MDN的详细说明。

根据该描述:

  

Math是一个内置对象,具有属性和方法   数学常数和函数。不是功能对象。

     

与其他全局对象不同,Math不是构造函数。所有   数学的属性和方法是静态的。你指的是常数   pi作为Math.PI,你将正弦函数称为Math.sin(x),其中x   是方法的论点。常量定义为完整   JavaScript中实数的精确度。

出于不同的目的,它们是不同的东西。

Window是一个不同的野兽。它可能与主机对象window有关,但虽然它报告为function背后有本机代码,但Chrome浏览器不会让您将其称为功能或作为构造者。

答案 1 :(得分:1)

在简单示例中,您可以看到Math对象和String函数之间的不同 Math是对象,具有命名空间函数

var Math = {
  min : function(arg){
     //code here
   }
}

String是function并定义为

function String(){

}
String.prototype.match = function(){

}

答案 2 :(得分:0)

Stringfunction,因为您需要使用function创建new的多个实例。如果string是一个容器,那么它就不会是function

var str = new String();

Math是一个对象,因为你需要一个带有Math.random等实用方法的对象的声明。

// You cannot do that, so error.
var math = new Math();

答案 3 :(得分:0)

来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math

  

Summary Math是一个内置对象,具有属性和方法   数学常数和函数。不是功能对象。

     

描述与其他全局对象不同,Math不是   构造函数。 Math的所有属性和方法都是静态的。你提到   以常数pi作为Math.PI,并将正弦函数称为   Math.sin(x),其中x是方法的参数。定义了常量   在JavaScript中完全精确的实数。

答案 4 :(得分:0)

Math是JavaScript中的全局对象,没有构造函数。所有方法和属性都是静态的,您无法使用new关键字创建新对象。这就是你将它视为一个对象的原因。