2015-05-04 97 views
1

以下是我的Chrome的JavaScript控制檯的截圖:爲什麼Math是一個對象而String是一個函數?

enter image description here

爲什麼Math被視爲而StringBooleanWindow都被視爲功能的對象?

+2

你期待'Math'是一個函數嗎?這不像你可以稱'數學(參數)',並讓它做數學。 – user2357112

+0

只需在控制檯輸入'Math'。你會看到它爲'對象'。在控制檯中輸入其他人。你會看到它們作爲函數 –

+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瀏覽器不會讓您將其稱爲函數或構造函數。

0

Stringfunction,因爲您需要創建functionnew的多個實例。如果字符串是一個容器,那麼它不會是一個function

var str = new String(); 

數學是一個對象,因爲你需要一個對象,帶有實用的方法,如Math.random的一個聲明。

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

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

摘要數學是一個內置的對象,該對象具有用於 數學常數和函數的屬性和方法。不是函數對象。

說明與其他全局對象不同,Math不是 構造函數。 Math的所有屬性和方法都是靜態的。您將 指定爲Math.PI的常量pi,並將正弦函數作爲 Math.sin(x),其中x是方法的參數。常量定義爲 ,它具有JavaScript中實數的完整精度。

1

在簡單的例子中,可以看到數學對象和字符串功能之間的不同 Math是對象,其具有的命名空間的功能

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

字符串是功能並且定義爲

function String(){ 

} 
String.prototype.match = function(){ 

} 
0

數學是JavaScript中的全局對象,沒有構造函數。所有方法和屬性都是靜態的,並且您無法使用new關鍵字創建新對象。這就是爲什麼你將它看作是一個對象。

相關問題