1. 程式人生 > >javascript型別系統——Math物件

javascript型別系統——Math物件

前面的話

  javascript使用算術運算子實現基本的算術運算,如果要實現更加複雜的算術運算,需要通過Math物件定義的常量和函式來實現。和其他物件不同,Math只是一個靜態物件,並沒有Math()建構函式。實際上,Math只是一個由javascript設定的物件名稱空間,用於儲存數學常量和函式。本文將詳細介紹Math物件

new Math();//Uncaught TypeError: Math is not a constructor

常量

  Math物件一共有8個常量,主要包括對數、派值和平方根三類

對數

Math.E             自然對數的底數,即常量e的值(約等於2.71828
) Math.LN2 2的自然對數(約等於0.693) Math.LN10 10的自然對數(約等於2.303) Math.LOG2E 以2為底e的對數(約等於1.443) Math.LOG10E 以10為底e的對數(約等於0.434)
console.log(Math.E);//2.718281828459045
console.log(Math.LN2);//0.6931471805599453    
console.log(Math.LN10);//2.302585092994046
console.log(Math.LOG2E);//1.4426950408889634
console.log(Math.LOG10E);//0.4342944819032518

派值

Math.PI            派的值(約等於3.14)
console.log(Math.PI);//3.141592653589793

平方根

Math.SQRT2         2的平方根(約等於1.414)
Math.SQRT1_2       1/2的平方根,即2的平方根的倒數(約等於0.707)
console.log(Math.SQRT2);//1.4142135623730951
console.log(Math.SQRT1_2);//0.7071067811865476

函式

  Math物件一共有18個靜態函式,主要包括最值、舍入、隨機數、絕對值、三角函式及乘方開方6類

  [注意]這些函式都涉及到Number()隱式型別轉換。若超出範圍,將返回NaN

最值

  Math物件的min()和max()方法用於確定一組數值中的最小和最大值,這兩個方法都可以接收任意個數值引數

Math.max()

  返回引數中最大值。如果沒有引數則返回-Infinity。如果任意一個引數是NaN或不可轉換為數字,則返回NaN

Math.min()

  返回引數中最小值。如果沒有引數則返回Infinity。如果任意一個引數是NaN或不可轉換為數字,則返回NaN

console.log(Math.min(1,2,3));//1
console.log(Math.max(1,2,3));//3
console.log(Math.min());//Infinity
console.log(Math.max());//-Infinity
console.log(Math.min(1,2,'3px'));//NaN
console.log(Math.max(1,2,'3px'));//NaN

【tips】找到陣列中的最大或最小值

var values = [1,2,3,4,5,6,7,8];
var maxValue = Math.max.apply(Math,values);//8
var minValue = Math.min.apply(Math,values);//1

  當我們在一個表單中需要一個合法的月份值時,可以使用下列程式碼

Math.min(Math.max(1,input),12);

舍入

  Math物件一共有三種小數舍入為整數的方法,它們是:Math.ceil()、Math.floor()和Math.round()

Math.ceil()

  執行向上取整運算,也就是說,它返回大於等於函式引數的最接近的整數

  [注意]Math.ceil()不會將負數變成絕對值更大的負數,而是將它們向0的方向取整

Math.floor() 

  執行向下取整運算,也就是說,它返回小於等於函式引數的最接近的整數

  [注意]Math.floor()對負數也向下取整,即數字將更小

Math.round()

  執行四捨五入取整運算

  [注意]Math.round(x) + Math.round(-x) == 0;//true,當x為數字時

console.log(Math.ceil(12.6));//13
console.log(Math.floor(12.6));//12
console.log(Math.round(12.6));//13
console.log(Math.ceil(-12.6));//-12
console.log(Math.floor(-12.6));//-13
console.log(Math.round(-12.6));//-13

隨機數

Math.random()

  該方法返回大於等於0小於1的一個隨機數

console.log(Math.random());//0.590752829178167

  套用下面的公式可以利用Math.random()從某個整數範圍內隨機選擇一個值

值 = Math.floor(Math.random() * 可能值的總數 + 第一個可能的值)
//返回一個1-10之間的整數值
var num = Math.floor(Math.random() * 10 + 1)

  多數情況下,已知條件是首尾值

var num = Math.floor(Math.random()*(upperValue - lowerValue + 1) + lowerValue);
//從陣列中隨機取出一項
var colors = [1,2,3,4,5,6];
var color = colors[Math.floor(Math.random()*colors.length)];

01值

  如果想取得隨機的01值,可使用下面程式碼

Math.round(Math.random())

 長度一致的隨機數

var random = Math.random();
var random = random + '0000000000';
var random = random.slice(0,10);
console.log(random);

絕對值

Math.abs()

  該方法返回任意數值的絕對值

console.log(Math.abs(-1));//1
console.log(Math.abs('1px'));//NaN
console.log(Math.abs(1,2,3));//1

三角函式

  Math物件共有7個涉及到三角函式的函式,分別是正弦、餘弦、正切、反正弦、反餘弦、反正切及y/x的反正切值

Math.sin(x)

   返回x的正弦值,返回值介於-1到1之間

Math.cos(x)

   返回x的餘弦值,返回值介於-1到1之間

Math.tan(x)

   返回x的正切值

  [注意]x是一個以弧度制度量的角度,如果想將角度制轉為弧度制,可以將角度制的值乘以0.017(2派/360)

Math.asin(x)

   返回x的反正弦值,返回值介於-派/2到派/2弧度之間(x必須是-1到1之間的數)

Math.acos(x)

   返回x的反餘弦值,返回值介於0到派弧度之間(x必須是-1到1之間的數)

Math.atan(x)

   返回x的反正切值,返回值介於-派/2到派/2弧度之間

Math.atan2(y,x)

   返回y/x的反正切值,返回值介於-派到派可以將y看做一個點的y座標,x看做點的x座標

  [注意]y座標在x座標前面

console.log(Math.sin(30*Math.PI/180));//0.49999999999999994    
console.log(Math.cos(60*Math.PI/180));//0.5000000000000001
console.log(Math.tan(45*Math.PI/180));//0.9999999999999999    
console.log(Math.asin(1)*180/Math.PI);//90
console.log(Math.acos(1)*180/Math.PI);//0
console.log(Math.atan(1)*180/Math.PI);//45
console.log(Math.atan2(1,1)*180/Math.PI);//45

乘方開方

  Math物件涉及到乘方開方的函式共有4個

Math.exp(num)

  返回Math.E的num次冪,即enum

console.log(Math.exp(0));//1
console.log(Math.exp(1));//2.718281828459045

Math.log(num)

  返回num的自然對數,logenum(num必須是大於等於0的數)

log10x = 1og10e * logex 
log2x = log2e * logex
function log10(x){
    return Math.LOG10E * Math.log(x);
}
function log2(x){
    return Math.LOG2E * Math.log(X);
}
console.log(Math.log(1));//0
console.log(Math.log(Math.E));//1

Math.sqrt(num)

  返回num的平方根(x必須是大於等於0的數)

console.log(Math.sqrt(100));//10
console.log(Math.sqrt(1));//1

Math.pow(num,power)

  返回num的power次冪

console.log(Math.pow(10,2));//100
console.log(Math.pow(100,1/2));//10

參考資料