javascript類型系統——Math對象

来源:http://www.cnblogs.com/xiaohuochai/archive/2016/07/10/5658452.html
-Advertisement-
Play Games

[1]常量[2]函數 ...


×
目錄
[1]常量 [2]函數

前面的話

  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對象一共有三種小數舍入為整數的方法,它們是: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)];

 

絕對值

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

 

參考資料

【1】ES5/Math對象 https://www.w3.org/html/ig/zh/wiki/ES5/builtins#Math_.E5.AF.B9.E8.B1.A1
【2】阮一峰Javascript標準參考教程——標準庫——Math對象 http://javascript.ruanyifeng.com/stdlib/math.html
【3】W3School-Javascript高級教程——Math對象 http://www.w3school.com.cn/jsref/jsref_obj_math.asp
【4】《javascript權威指南(第6版)》第三部分 javascript核心參考
【5】《javascript高級程式設計(第3版)》第5章 引用類型


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 關於前端對話框、消息框的優秀插件多不勝數。造輪子是為了更好的使用輪子,並不是說自己造的輪子肯定好。所以,這個博客系統基本上都是自己實現的,包括日誌記錄、響應式佈局等等一些本可以使用插件的。好了,廢話不多時。我們來實現自己的對話框和消息框。 ...
  • jQuery 的 setter/getter 共用一個函數,通過是否傳參來表明它是何種意義。簡單說傳參它是 setter,不傳它是 getter。 一個函數具有多種意義在編程語言中並不罕見,比如函數重載:一組具有相同函數名,不同參數列表的函數,這組函數被稱為重載函數。重載的好處是減少了函數名的數量, ...
  • 文章同步自個人博客:http://www.52cik.com/2016/07/11/generator co.html 此前只是簡單使用而沒有真正的去研究 Generator,這次要好好折騰下這貨。 <! more 非同步編程 對於 jser 來說,非同步非常熟悉了吧,但是真正理解非同步的卻不多,因為大部 ...
  • 一、起因 ES6新納入了很多振奮人心的新特性,真的很讓人忍不住去嘗試一下。不過,由於現在大部分的瀏覽器對ES6的支持程度都不是很好。所以如果想要放心地使用一些新特性,還需要用一些工具,將ES6或者ES7的代碼轉為ES5的代碼。今天,就配置了一下環境,寫了一個react-router,主要是練習自己的 ...
  • 一、主類關係圖 二、類職責 2.1、observable(普通監控對象類) observable(他其是一個function)的內部實現:1.首先聲明一個名為observable的fn(這個可以說是一個類)2.增加一個ko惟一的latestValue(最新值)屬性來存儲形參傳入的值3.如果支持原生_... ...
  • 一、position:fixed 鎖定位置(相對於瀏覽器的位置),例如有些網站的右下角的彈出視窗。 示例: 二、position:absolute 絕對位置: 1.外層沒有position:absolute(或relative);那麼div相對於瀏覽器定位,如下圖中b(距離瀏覽器右邊框為50像素,距 ...
  • 博主最近在最有做一個嵌入式課程設計,要求是利用基於cortax a8的物聯網實驗箱做一個簡單的嵌入式網頁交互系統作為課程設計來驗收評分。因為本身自己是學前端的,所以網頁部分並不是重點,主要是和boa伺服器之間的通信,課程實驗給的例子是直接使用printf來列印html標簽形成新的頁面,有過前端開發經 ...
  • ***設置超鏈接的樣式示例 a:link 超鏈接被點前狀態 a:visited 超鏈接點擊後狀態 a:hover 懸停在超鏈接時 a:active 點擊超鏈接時 在定義這些狀態時,有一個順序l v h a 代碼區: 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...