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

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

问题描述:

以下是我的Chrome的JavaScript控制台的截图:为什么Math是一个对象而String是一个函数?

enter image description here

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

+2

你期待'Math'是一个函数吗?这不像你可以称'数学(参数)',并让它做数学。 – user2357112

+0

只需在控制台输入'Math'。你会看到它为'对象'。在控制台中输入其他人。你会看到它们作为函数 –

+0

对我来说很有意思的是它是一个空的节点 –

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浏览器不会让您将其称为函数或构造函数。

Stringfunction,因为您需要创建functionnew的多个实例。如果字符串是一个容器,那么它不会是一个function

var str = new String(); 

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

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

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

摘要数学是一个内置的对象,该对象具有用于 数学常数和函数的属性和方法。不是函数对象。

说明与其他全局对象不同,Math不是 构造函数。 Math的所有属性和方法都是静态的。您将 指定为Math.PI的常量pi,并将正弦函数作为 Math.sin(x),其中x是方法的参数。常量定义为 ,它具有JavaScript中实数的完整精度。

在简单的例子中,可以看到数学对象和字符串功能之间的不同 Math是对象,其具有的命名空间的功能

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

字符串是功能并且定义为

function String(){ 

} 
String.prototype.match = function(){ 

} 

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