ออบเจ็กต์ Math
การคำนวณพื้นฐานเช่น บวก, ลบ, คูณ, หาร นั้นสามารถทำได้โดยใช้ตัวดำเนินการ +, -,
*, / ง่ายๆ แต่สำหรับการคำนวณที่ซับซ้อนขึ้นไป เช่นพวกเลขยกกำลัง, ตรีโกณมิติ,
สุ่มค่า, ฯลฯ พวกนี้ต้องใช้ฟังก์ชันช่วย
ฟังก์ชันต่างๆที่เกี่ยวข้องกับทางคณิตศาสตร์นั้นได้ถูกรวบรวมเอาไว้ที่ออบเจ็กต์ที่ชื่อ
Math
Math เป็นออบเจ็กต์ตัวหนึ่ง มีหน้าที่แค่เก็บฟังก์ชันและค่าคงที่ต่างๆเท่านั้น
ไม่สามารถทำหน้าที่เป็นคอนสตรักเตอร์เพื่อสร้างออบเจ็กต์ใดๆได้
alert(typeof Math); // ได้ object
new Math() // ได้ TypeError: Math is not a constructor
ค่าคงที่
ค่าคงที่บางส่วนที่มีความหมายสำคัญทางคณิตศาสตร์ซึ่งอาจมีโอกาสได้ใช้งานบ่อยได้ถูกเตรียมไว้ในออบเจ็กต์
Math
ค่าคงที่ |
ค่า |
ความหมาย |
Math.E |
2.718281828459045 |
ค่า e |
Math.LN2 |
0.6931471805599453 |
ln(2) |
Math.LN10 |
2.302585092994046 |
ln(10) |
Math.LOG2E |
1.4426950408889634 |
1/ln(2) |
Math.LOG10E |
0.4342944819032518 |
1/ln(10) |
Math.SQRT1_2 |
0.7071067811865476 |
รากที่สองของ 1/2 |
Math.SQRT2 |
1.4142135623730951 |
รากที่สองของ 2 |
Math.PI |
3.141592653589793 |
สัดส่วนเส้นรอบวงต่อเส้นผ่านศูนย์กลาง |
ฟังก์ชันต่างๆที่ใช้ได้
ฟังก์ชันที่มีตั้งแต่ใน ES3
Math.sin (x) |
sine |
Math.cos (x) |
cosine |
Math.tan (x) |
tangent |
Math.asin (x) |
arcsine |
Math.acos (x) |
arccos |
Math.atan (x) |
arctan |
Math.atan2 (y, x) |
arctan2 |
Math.abs (x) |
หาค่าสัมบูรณ์ |
Math.round (x) |
ปัดเศษ .5 ขึ้นไปขึ้น ต่ำกว่า .5 ลง |
Math.ceil (x) |
ปัดเป็นจำนวนเต็มโดยปัดขึ้น |
Math.floor (x) |
ปัดเป็นจำนวนเต็มโดยปัดลง |
Math.exp (x) |
เอ็กซ์โพเน็นเชียล (ex) |
Math.log (x) |
ลอการิธึม logex |
Math.sqrt (x) |
รากที่สอง |
Math.pow (x, y) |
x ยกกำลัง y (xy) |
Math.max (x1, x2, ...) |
หาค่าสูงสุด |
Math.min (x1, x2, ...) |
หาค่าต่ำสุด |
Math.random () |
สร้างค่าสุ่มตั้งแต่ 0 ถึง 1 |
ฟังก์ชันที่เพิ่มเข้ามาใน ES6
Math.sinh (x) |
hyperbolic sine |
Math.cosh (x) |
hyperbolic cosine |
Math.tanh (x) |
hyperbolic tangent |
Math.asinh (x) |
inverse hyperbolic sine |
Math.acosh (x) |
inverse hyperbolic cosine |
Math.atanh (x) |
inverse hyperbolic tangent |
Math.log10 (x) |
log10(x) |
Math.log2 (x) |
log2(x) |
Math.log1p (x) |
loge(1+x) |
Math.expm1 (x) |
ex-1 |
Math.cbrt (x) |
รากที่สาม |
Math.hypot (x1, x2, ...) |
รากที่สองของผลบวกกำลังสอง |
Math.trunc (x) |
ปัดเป็นจำนวนตรงโดยปัดเศษทิ้ง |
Math.sign (x) |
หาว่าเป็นบวกหรือลบ ถ้าเป็นบวกได้ 1 ถ้าเป็นลบได้ -1 |
ปัดเศษ
เมื่อมีจำนวนทศนิยมแล้วต้องการปัดให้เป็นจำนวนเต็ม อาจใช้
- Math.ceil เมื่อต้องการปัดขึ้นเสมอ
- Math.floor เมื่อต้องการปัดลงเสมอ
- Math.round เมื่อต้องการให้ปัดขึ้นเมื่อเป็น 0.5 ขึ้นไป และปัดลงเมื่อไม่ถึง
0.5
alert(Math.ceil(11.2)); // ได้ 12
alert(Math.floor(11.51)); // ได้ 11
alert(Math.round(11.8)); // ได้ 12
alert(Math.round(11.4)); // ได้ 11
alert(Math.ceil(-11.2)); // ได้ -11
alert(Math.floor(-11.51)); // ได้ -12
alert(Math.round(-11.8)); // ได้ -12
alert(Math.round(-11.4)); // ได้ -11
ส่วน Math.trunc ที่เพิ่มมาใน ES6 นั้นจะเหมือน floor ในกรณีที่เป็นเลขบวก
และเหมือน ceil เมื่อเป็นเลขลบ
ค่าสัมบูรณ์
Math.abs ใช้หาค่าสัมบูรณ์ของตัวเลข
alert(Math.abs(-15)); // ได้ 15
alert(Math.abs("20")); // ได้ 20
เลขยกกำลัง
ฟังก์ชันที่เกี่ยวข้องกับเลขยกกำลังได้แก่
- Math.exp ใช้คำนวณเอ็กซ์โพเนนเชียล
- Math.log ใช้คำนวณลอการิธึมฐานธรรมชาติ
- Math.sqrt ใช้คำนวณค่ารากที่สอง
- Math.pow ใช้คำนวณเลขยกกำลัง
alert(Math.exp(10)); // ได้ 22026.465794806718
alert(Math.log(10)); // ได้ 2.302585092994046
alert(Math.sqrt(100)); // ได้ 10
alert(Math.pow(10, 2)); // ได้ 100
ใน ES2016 ขึ้นไปสามารถใช้ x**y แทน Math.pow(x,y) ได้
alert(10**2); // ได้ 100
ตรีโกณมิติ
ฟังก์ชันตรีโกณมิติพื้นฐานประกอบไปด้วย
- Math.sin
- Math.cos
- Math.tan
alert(Math.sin(Math.PI)); // ได้ 1.2246467991473532e-16
alert(Math.cos(3)); // ได้ -0.9899924966004454
alert(Math.tan(Math.PI / 4)); // ได้ 0.9999999999999999
และฟังก์ชันส่วนกลับ ประกอบไปด้วย
- Math.asin
- Math.acos
- Math.atan
- Math.atan2
alert((Math.asin(1) / Math.PI) * 180); // ได้ 90
alert((Math.acos(1) / Math.PI) * 180); // ได้ 0
alert((Math.atan(1) / Math.PI) * 180); // ได้ 45
alert((Math.atan2(0.5, 0.5) / Math.PI) * 180); // ได้ 45
alert((Math.atan2(0.5, -0.5) / Math.PI) * 180); // ได้ 135
alert((Math.atan2(-0.5, -0.5) / Math.PI) * 180); // ได้ -135
alert((Math.atan2(-0.5, 0.5) / Math.PI) * 180); // ได้ -45
และใน ES6 ยังมีพวกไฮเพอร์โบลิกเพิ่มเข้ามาอีกด้วย
ค่าสูงสุดต่ำสุด
Math.min
เป็นฟังก์ชันที่ใช้หาค่าต่ำสุดในบรรดาข้อมูลทั้งหมดที่ใส่เข้าไปเป็นอาร์กิวเมนต์
ส่วนฟังก์ชันที่ใช้หาค่าสูงสุดคือ Math.max
alert(Math.max(1,Math.PI,5)); // ได้ 5
alert(Math.min(2,3,5)); // ได้ 2
หากข้อมูลที่ใส่เข้าไปมีที่ไม่ใช่ตัวเลขก็จะถูกแปลงเป็นตัวเลขโดยอัตโนมัติก่อนเทียบ
แต่ถ้าตัวใดตัวหนึ่งแปลงไม่ได้จะได้ NaN
alert(Math.max("a", 1, 2)); // ได้ NaN
alert(Math.min("2", 1.5, 4)); // ได้ 1.5
การสร้างค่าสุ่ม
หากต้องการค่าสุ่มตั้งแต่ 0 ถึง 1 สามารถใช้ Math.random
var ar = [];
var i = 1;
while (i < 9) {
ar.push("ครั้งที่ " + i + ": " + Math.random());
i++;
}
alert(ar.join("\n"));
ได้
ครั้งที่ 1: 0.6290472603371913
ครั้งที่ 2: 0.9779730139377725
ครั้งที่ 3: 0.41997857970286534
ครั้งที่ 4: 0.1898982006892228
ครั้งที่ 5: 0.5984295533679661
ครั้งที่ 6: 0.8441898470520106
ครั้งที่ 7: 0.054433221098181606
ครั้งที่ 8: 0.881529245966359
จะได้ค่าสุ่มที่ไม่ซ้ำกันในแต่ละครั้ง
หากต้องการเลขสุ่มเป็นจำนวนเต็มในช่วงที่กำหนด อาจใช้ร่วมกับ Math.floor เช่น
var f = function(a, b) {
return Math.floor(a + Math.random() * (b - a));
};
var ar1 = [];
var ar2 = [];
var i = 0;
while (i < 20) {
ar1.push(f(5, 10)); // สุ่มเลขตั้งแต่ 5 ถึง 9
ar2.push(f(10, 15)); // สุ่มเลขตั้งแต่ 10 ถึง 14
i++;
}
alert(ar1); // ได้ 9,9,9,7,9,7,9,5,8,8,9,7,5,7,9,9,5,8,6,7
alert(ar2); // ได้ 10,13,14,14,11,10,14,10,13,10,14,12,13,14,14,12,13,12,13,10