ES6之數值的擴展

  • 1. 數值的擴展
    • 1.1. 二進制和八進制字面量表示:
    • 1.2. 數值判斷方法:
      • 1.2.1. Number.isFinite() 檢查一個值是否為有限的數值。
      • 1.2.2. Number.isNaN() 更準確地檢測NaN值。
      • 1.2.3. 傳統的全局方法 isFinite() 和 isNaN() 的區別
    • 1.3. 數值轉換方法:
    • 1.4. 整數檢查與精度:
      • 1.4.1. Number.isInteger() 判斷一個值是否為整數。
      • 1.4.2. Number.EPSILON 提供了一個極小的常量,用于比較浮點數時的誤差容限。
      • 1.4.3. Number.isSafeInteger() 檢查一個值是否為安全的整數(在 -(2^53) 到 2^53 之間)。
    • 1.5. 數值分隔符:
    • 1.6. Math對象的擴展:
      • 1.6.1. Math.trunc() 移除一個數的小數部分,返回整數部分。
      • 1.6.2. Math.sign():
      • 1.6.3. Math.cbrt():
      • 1.6.4. Math.hypot():
      • 1.6.5. 對數方法:
      • 1.6.6. Math.clz32():

1. 數值的擴展

ECMAScript 6 (ES6) 對數值的擴展引入了一些新的特性和方法,旨在提高數值處理的便利性和精確度。

以下是一些關鍵的擴展點及其示例:

1.1. 二進制和八進制字面量表示:

  • ES6 引入了新的字面量表示法來直接表示二進制和八進制數。
    • 二進制前綴為 0b0B
    • 八進制前綴為 0o0O
let binary = 0b1010; // 二進制表示10,十進制為10
let octal = 0o12;    // 八進制表示12,十進制為10
  • 如果要將 0b 和 0o 前綴的字符串數值轉為十進制,要使用 Number 方法。
Number('0b111') // 7
Number('0o10') // 8

1.2. 數值判斷方法:

1.2.1. Number.isFinite() 檢查一個值是否為有限的數值。
console.log(Number.isFinite(15)); // true
console.log(Number.isFinite(Infinity)); // falseNumber.isFinite(15); // true
Number.isFinite(0.8); // true
Number.isFinite(NaN); // false
Number.isFinite(Infinity); // false
Number.isFinite(-Infinity); // false
Number.isFinite('foo'); // false
Number.isFinite('15'); // false
Number.isFinite(true); // false
1.2.2. Number.isNaN() 更準確地檢測NaN值。
console.log(Number.isNaN(NaN)); // true
console.log(Number.isNaN("Hello")); // falseNumber.isNaN(NaN) // true
Number.isNaN(15) // false
Number.isNaN('15') // false
Number.isNaN(true) // false
Number.isNaN(9/NaN) // true
Number.isNaN('true'/0) // true
Number.isNaN('true'/'true') // true
1.2.3. 傳統的全局方法 isFinite() 和 isNaN() 的區別
  • 傳統方法先調用 Number() 將非數值的值轉為數值,再進行判斷,
  • 而這兩個新方法只對數值有效, Number.isFinite() 對于非數值一律返回 false , Number.isNaN() 只有對于 NaN 才返回 true ,非 NaN 一律返回 false 。
isFinite(25) // true
isFinite("25") // true
Number.isFinite(25) // true
Number.isFinite("25") // false
isNaN(NaN) // true
isNaN("NaN") // true
Number.isNaN(NaN) // true
Number.isNaN("NaN") // false
Number.isNaN(1) // false

1.3. 數值轉換方法:

  • Number.parseInt()Number.parseFloat() 作為全局函數的嚴格版本,直接綁定在 Number 對象上。
console.log(Number.parseInt("123px")); // 123
console.log(Number.parseFloat("123.45em")); // 123.45

這樣做的目的,是逐步減少全局性方法,使得語言逐步模塊化

Number.parseInt === parseInt // true
Number.parseFloat === parseFloat // true

1.4. 整數檢查與精度:

1.4.1. Number.isInteger() 判斷一個值是否為整數。
console.log(Number.isInteger(42)); // true
console.log(Number.isInteger(42.1)); // false

需要注意的是,在JavaScript 內部,整數和浮點數是同樣的儲存方法,所以3和3.0被視為同一個值

Number.isInteger(25) // true
Number.isInteger(25.0) // true
Number.isInteger(25.1) // false
Number.isInteger("15") // false
Number.isInteger(true) // false
1.4.2. Number.EPSILON 提供了一個極小的常量,用于比較浮點數時的誤差容限。

根據規格,它表示1與大于1的最小浮點數之間的差。

let num = 0.1 + 0.2;
console.log(Math.abs(num - 0.3) < Number.EPSILON); // true,判斷浮點運算的誤差

Number.EPSILON 實際上是 JavaScript 能夠表示的最小精度。誤差如果小于這個值,就可以認為已經沒有意義了,即不存在誤差了。

引入一個這么小的量的目的,在于為浮點數計算,設置一個誤差范圍。我們知道浮點數計算是不精確的。

Number.EPSILON 可以用來設置“能夠接受的誤差范圍”。

比如,誤差范圍設為2的-50次方(即 Number.EPSILON * Math.pow(2, 2) ),即如果兩個浮點數的差小于這個值,我們就認為這兩個浮點數相等。

5.551115123125783e-17 < Number.EPSILON * Math.pow(2, 2) // true
1.4.3. Number.isSafeInteger() 檢查一個值是否為安全的整數(在 -(2^53) 到 2^53 之間)。

超過這個范圍,無法精確表示這個值。

Math.pow(2, 53) // 9007199254740992
9007199254740992 // 9007199254740992
9007199254740993 // 9007199254740992
Math.pow(2, 53) === Math.pow(2, 53) + 1 // true  

上面代碼中,超出2的53次方之后,一個數就不精確了。
ES6引入 了 Number.MAX_SAFE_INTEGERNumber.MIN_SAFE_INTEGER 這兩個
常量,用來表示這個范圍的上下限。

Number.MAX_SAFE_INTEGER === Math.pow(2, 53) - 1
// true
Number.MAX_SAFE_INTEGER === 9007199254740991
// true
Number.MIN_SAFE_INTEGER === -Number.MAX_SAFE_INTEGER
// true
Number.MIN_SAFE_INTEGER === -9007199254740991
// true

Number.isSafeInteger() 則是用來判斷一個整數是否落在這個范圍之內。

Number.isSafeInteger('a') // false
Number.isSafeInteger(null) // false
Number.isSafeInteger(NaN) // false
Number.isSafeInteger(Infinity) // false
Number.isSafeInteger(-Infinity) // false
Number.isSafeInteger(3) // true
Number.isSafeInteger(1.2) // false
Number.isSafeInteger(9007199254740990) // true
Number.isSafeInteger(9007199254740992) // false
Number.isSafeInteger(Number.MIN_SAFE_INTEGER - 1) // false
Number.isSafeInteger(Number.MIN_SAFE_INTEGER) // true
Number.isSafeInteger(Number.MAX_SAFE_INTEGER) // true
Number.isSafeInteger(Number.MAX_SAFE_INTEGER + 1) // false

1.5. 數值分隔符:

  • 數值字面量中可以使用下劃線 _ 作為視覺上的千位分隔符,提高可讀性。
let million = 1_000_000; // 等同于1000000

1.6. Math對象的擴展:

ES6對Math對象進行了擴展,增加了一系列新的方法來提供更強大的數學運算功能。以下是一些主要的擴展方法及其使用示例:

1.6.1. Math.trunc() 移除一個數的小數部分,返回整數部分。
console.log(Math.trunc(3.14)); // 3

對于非數值, Math.trunc 內部使用 Number 方法將其先轉為數值。

Math.trunc('123.456') // 123
Math.trunc(true) //1
Math.trunc(false) // 0
Math.trunc(null) // 0

對于空值和無法截取整數的值,返回 NaN 。

Math.trunc(NaN); // NaN
Math.trunc('foo'); // NaN
Math.trunc(); // NaN
Math.trunc(undefined) // NaN
1.6.2. Math.sign():

用來判斷一個數的符號,返回五種可能的值:1(正數)、0(零)、-1(負數)、-0(負零)、NaN(非數字)。

console.log(Math.sign(23));   // 輸出: 1
console.log(Math.sign(-23));  // 輸出: -1
console.log(Math.sign(0));    // 輸出: 0
console.log(Math.sign(-0));   // 輸出: -0
console.log(Math.sign('a'));  // 輸出: NaN
1.6.3. Math.cbrt():

計算一個數的立方根。

console.log(Math.cbrt(27)); // 輸出: 3
1.6.4. Math.hypot():

返回所有參數的平方和的平方根,常用于計算直角三角形的斜邊長度。

console.log(Math.hypot(3, 4)); // 輸出: 5
1.6.5. 對數方法:
  • Math.expm1(x) 返回 e^x - 1
  • Math.log1p(x) 返回 1 + x 的自然對數。
  • Math.log10(x) 返回以10為底x的對數。
  • Math.log2(x) 返回以2為底x的對數。
console.log(Math.expm1(1));  // 輸出:約等于 1.71828
console.log(Math.log1p(1));  // 輸出: 0.6931471805599453
console.log(Math.log10(100)); // 輸出: 2
console.log(Math.log2(8));    // 輸出: 3
1.6.6. Math.clz32():

返回一個數的32位無符號整數形式的前導零的個數。

console.log(Math.clz32(0b00000000000000000000000000001010)); // 輸出: 26

這些方法豐富了JavaScript的數學運算能力,使得處理數學問題更加高效和便捷。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/14600.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/14600.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/14600.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

防火墻技術基礎篇:解析防火墻的網絡隔離機制

防火墻技術基礎篇&#xff1a;解析防火墻的網絡隔離機制 網絡安全在現代社會中扮演著重要的角色&#xff0c;保護網絡系統、用戶和數據免受未經授權的訪問、破壞和竊取。個人、企業和國家都需要加強網絡安全意識&#xff0c;采取有效措施保護自身的網絡安全。隨著網絡攻擊手段…

【QT八股文】系列之篇章2 | QT的信號與槽機制及通訊流程

【QT八股文】系列之篇章2 | QT的信號與槽機制及通訊流程 前言2. 信號與槽信號與槽機制介紹/本質/原理&#xff0c;什么是Qt信號與槽機制&#xff1f;如何在Qt中使用&#xff1f;信號與槽機制原理&#xff0c;解析流程Qt信號槽的調用流程信號與槽機制的優缺點信號與槽機制需要注…

深入分析 Android Activity (三)

深入分析 Android Activity (三) 1. Activity 的配置變化處理 當設備配置&#xff08;如屏幕方向、語言、屏幕大小等&#xff09;發生變化時&#xff0c;默認情況下&#xff0c;Android 會銷毀并重新創建當前的 Activity。這種行為確保了新配置能夠正確應用&#xff0c;但在某…

HTML5 性能優化和計算機硬件使用

目錄 啟用硬件加速圖像與媒體優化資源加載與緩存CSS與布局優化JavaScript性能優化瀏覽器兼容性與特性檢測啟用硬件加速 Canvas繪圖 <canvas> 元素支持硬件加速,可以顯著提升圖形繪制和動畫的性能。確保在支持的瀏覽器中啟用硬件加速,如使用translate3d(0, 0, 0) hack…

解鎖Android高效數據傳輸的秘鑰 - Parcelable剖析

作為Android開發者&#xff0c;我們經常需要在不同的組件(Activity、Service等)之間傳輸數據。這里的"傳輸"往往不僅僅是簡單的數據復制&#xff0c;還可能涉及跨進程的內存復制操作。當傳輸的數據量較大時&#xff0c;這種操作可能會帶來嚴重的性能問題。而Android系…

web自動化之PO模式

PO模式 1、為什么需要PO思想&#xff1f; 首先我們觀察和思考一下&#xff0c;目前我們寫的作業腳本的問題&#xff1a; 元素定位和操作動 作寫到一起了&#xff0c;這就就會用導致一個問題&#xff1a; UI的頁面元素比較容易變化的&#xff0c;所以元素定位和腳本操作寫到一…

如何將照片從 iPhone 傳輸到閃存驅動器【無質量損壞】

概括 人們喜歡用 iPhone 拍照&#xff0c;因為照片通常都很漂亮&#xff0c;這都要歸功于 iPhone 令人驚嘆的技術。但照片更新后會占用更多空間&#xff0c;并且您可能會開始收到沒有存儲空間的通知。因此&#xff0c;您可以將照片傳輸到 USB 驅動器&#xff0c;然后從 iPhone…

Spring Boot構建mvc項目

好的,以下是一個簡單的Java MVC(Model-View-Controller)項目示例,使用Spring Boot框架和MySQL數據庫。這個項目包括基本的CRUD操作。 項目結構 src/ └── main/├── java/│ └── com/│ └── example/│ └── demo/│ ├──…

springboot-阿里羚羊 服務端埋點

官方文檔 集成Java SDK 手動引入jar包「quickaplus-log-collector-java-sdk-1.0.1-SNAPSHOT.jar」 <dependency><groupId>com.alibaba.lingyang</groupId><artifactId>quickaplus-log-collector-java-sdk</artifactId><version>1.0.1&l…

應用案例 | 如何實時監測和管理冷鏈倉庫溫濕度?

一、項目背景 冷鏈倉庫溫濕度管理的重要性在于確保倉庫內產品的質量和安全。通過遵循相關法規和標準&#xff0c;滿足客戶對產品質量的需求&#xff0c;同時實施有效的溫濕度管理措施&#xff0c;可以降低成本并提高倉庫作業效率。該項目的實施旨在幫助客戶保證產品的新鮮度&a…

Java - AbstractQueuedSynchronizer

AQS簡介 AQS全稱AbstractQueuedSynchronizer&#xff0c;抽象隊列同步器&#xff0c;是一個實現同步組件的基礎框架。AQS使用一個int類型的成員變量state維護同步狀態&#xff0c;通過內置的同步隊列&#xff08;CLH鎖、FIFO&#xff09;完成線程的排隊工作&#xff0c;底層主…

echarts 散點圖修改散點圖中圖形形狀顏色大小

話不多說&#xff0c;直接上代碼 let option {color:[xxx, xxx, xxx, xxx], //直接設置color可修改圖形顏色title: {text: 散點圖圖形,},tooltip: {trigger: axis,axisPointer: {type: cross}},legend: {top: 2,right:2,itemWidth: 10,itemHeight: 10,textStyle:{fontSize:14}…

shell腳本條件語句和循環語句

文章目錄 一、條件語句測試比較整數數值字符串比較邏輯運算雙中括號&#xff08; &#xff09;{ }if語句結構case語句 二、循環語句基礎知識for循環whileuntil雙重循環及跳出循環 一、條件語句 測試 條件測試&#xff1a;判斷某需求是否滿足&#xff0c;需要由測試機制來實現…

視頻分類——C3D使用

整體比較分散&#xff0c;可能很多源碼都需要修改&#xff0c;需要有耐心。 一、數據準備 PS 調研后&#xff0c;上手容易代碼比較簡潔的是&#xff1a;https://github.com/Niki173/C3D/tree/main 因為源碼很多參數都寫死到了源碼中&#xff0c;沒有解耦&#xff0c;并且默…

CCF-CSP認證 2024年3月 4.化學方程式配平

題解&#xff1a;首先完成數據的讀入&#xff0c;然后高斯消元求秩按題意解即可 #pragma GCC optimize(2, 3, "Ofast", "inline") #include <bits/stdc.h> using namespace std; const int maxn 100;using matrix double[maxn][maxn]; using vect…

5.20Git

版本控制工具Git&#xff0c;其他的工具還有SVN 共享代碼&#xff0c;追溯記錄&#xff0c;存儲.c文件 Git實現的功能&#xff1a;回溯&#xff08;以前某個時間節點的數據情況&#xff09;共享&#xff08;大家共享修改&#xff09; Git&#xff1a;80% SVN&#xff…

QT tableWidget詳細分析

一.定義 QTableWidget是一個用于顯示表格數據的Qt控件&#xff0c;它是一個基于Qt Model/View框架的視圖組件。QTableWidget提供了一種簡單的方式來展示和編輯表格數據&#xff0c;用戶可以通過添加行、列和單元格來構建一個完整的數據表格。 下面是一些QTableWidget的主要特點…

The Missing Semester of Your CS Education(計算機教育中缺失的一課)

Shell 工具和腳本(Shell Tools and Scripting) 一、shell腳本 1.1、變量賦值 在bash中為變量賦值的語法是foobar&#xff0c;訪問變量中存儲的數值&#xff0c;其語法為 $foo。 需要注意的是&#xff0c;foo bar &#xff08;使用空格隔開&#xff09;是不能正確工作的&…

網工內推 | 香港移動,10年以上數通經驗,CCIE,5W-6W

01 香港移動招聘 &#x1f537;招聘崗位&#xff1a;網絡工程師 &#x1f537;崗位要求&#xff1a; 需要有10年及以上數通經驗&#xff0c;有CCIE 證書&#xff0c;懂技術管理&#xff0c;溝通暢通 &#x1f537;語言要求&#xff1a; 粵語英語 &#x1f537;薪資&#xff1…

基于灰狼優化算法優化RBF(GWO-RBF)的數據回歸預測(多輸入多輸出)

代碼原理及流程 基于灰狼優化算法優化多輸入多輸出&#xff08;MIMO&#xff09;的RBF神經網絡的數據回歸預測&#xff0c;可以采取以下步驟&#xff1a; 1. 數據準備&#xff1a;準備包含多個輸入特征和多個輸出目標的數據集&#xff0c;確保數據已經經過預處理和歸一化。 …