整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          ES6新增數值的擴展

          ES6新增數值的擴展

          .Number.isFinite(), Number.isNaN()

          ES6在Number對象上,新提供了Number.isFinite()和Number.isNaN()兩個方法

          Number.isFinite()用來檢查一個數值是否為有限的(finite),即不是Infinity;

          Number.isFinite(12) // true
          Number.isFinite(0.8) // true
          Number.isFinite(NaN); // false
          Number.isFinite(Infinity); // false
          Number.isFinite(-Infinity); // false
          Number.isFinite('foo'); // false
          Number.isFinite(true); // false
          

          只要參數類型不是數字,則Number.isFinite一律返回false;

          Number.isNaN()用來檢查一個值是否為NaN

          	Number.isNaN(NaN) // true
          	Number.isNaN(15) // false
          	Number.isNaN(9/NaN) // true
          	Number.isNaN('true' / 0) // true
          	Number.isNaN('true' / 'true') // true
          

          如果參數類型不是NaN,Number.isNaN一律返回false

          2.Number.parseInt(), Number.parseFloat()

          ES6將全局方法parseInt()和parseFloat(),移植到Number對象上面,行為完全保持一致

          // ES5的寫法
          parseInt('12.34') // 12
          parseFloat('123.45#') // 123.45
          // ES6的寫法
          Number.parseInt('12.34') // 12
          Number.parseFloat('123.45#') // 123.45
          

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

          3. Number.isInterger()

          Number.isInterger()用來判斷一個數值是否為整數

          Number.isInteger(25) // true
          Number.isInteger(25.1) // false
          Number.isInteger(25.0) // true
          

          JavaScript 內部,整數和浮點數采用的是同樣的儲存方法,所以 25 和 25.0 被視為同一個值

          如果參數不是整數值,Number.isInterger()返回false

          4.Math.trunc()

          Math.trunc()方法用于去除一個數的小鼠部分,返回整數部分

          	Math.trunc(4.1) // 4
          	Math.trunc(4.9) // 4
          	Math.trunc(-4.1) // -4
          	Math.trunc(-4.9) // -4
          	Math.trunc(-0.1234) // -0
          

          對于非數值,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
          

          5.Math.sign()

          Math…sign()方法用來判斷一個數到底是正數、負數、還是零。對于非數值,會先將其轉換為數值。

          Math.sign()方法返回五種值

          -| 參數為正數,返回 +1

          -| 參數為負數,返回 -1

          -| 參數為0,返回 0

          -| 參數為-0,返回 -0

          -| 參數為其他值,返回 NaN

          Math.sign(-5) // -1
          Math.sign(5) // +1
          Math.sign(0) // +0
          Math.sign(-0) // -0
          Math.sign(NaN) // NaN
          

          如果是非數值,會自動轉為數值,對于無法轉化為數值的值,會返回NaN。

          Math.sign('') // 0
          Math.sign(true) // +1
          Math.sign(false) // 0
          Math.sign(null) // 0
          Math.sign('9') // +1
          Math.sign('foo') // NaN
          Math.sign() // NaN
          Math.sign(undefined) // NaN
          

          6.Math.cbrt()

          Math.cbrt()方法用于計算一個數的立方根。

          Math.cbrt(-1) // -1
          Math.cbrt(0) // 0
          Math.cbrt(1) // 1
          Math.cbrt(2) // 1.2599210498948734
          

          7.指數運算符

          ES2016中新增了一個指數運算符(**)

          2 ** 2==> 2 * 2 // 4
          2 ** 3==> 2 * 2 * 2 // 8
          

          類似ES5中的 Math.pow()方法,但是二者在進行特別大的運算時,兩者結果會有細微的差距。

          Number和Math都屬于JavaScript中的內置對象,Number數字類型作為基礎數據類型,我們在開發過程中會經常用到,包括數字精度的格式化,還有字符串轉換成數字等操作。

          Number數字

          自帶屬性值

          
          Number.EPSILON 兩個可表示(representable)數之間的最小間隔。
          
          Number.MAX_SAFE_INTEGER JavaScript 中最大的安全整數 (2^53 - 1)。
          
          Number.MAX_VALUE 能表示的最大正數。最小的負數是 -MAX_VALUE。
          
          Number.MIN_SAFE_INTEGER JavaScript 中最小的安全整數 (-(2^53 - 1)).
          
          Number.MIN_VALUE 能表示的最小正數即最接近 0 的正數 (實際上不會變成 0)。最大的負數是 -MIN_VALUE。
           
          Number.NaN 特殊的“非數字”值。
           
          Number.NEGATIVE_INFINITY 特殊的負無窮大值,在溢出時返回該值。
          
          Number.POSITIVE_INFINITY 特殊的正無窮大值,在溢出時返回該值。
          
          

          基礎使用

          new Number實例化數字對象和Number強轉數字字符串,兩個值的并不相等

          var value1=new Number("123");
          this.value1=value1;
          console.log(`value1===123 is ${value1===123}`); // value1===123 is false
          
          var value2=Number("123");
          this.value2=value2;
          console.log(`value2===123 is ${value2===123}`); // value2===123 is true
          
          
          
          
          // 判斷Number類型
          console.log(value1 instanceof Number);
          console.log(value2 instanceof Number);
          
          

          Number將轉換字符串為數字

          
          Number("123"); // 123
          Number("12.3"); // 12.3
          Number("12.00"); // 12
          Number("123e-1"); // 12.3
          Number(""); // 0
          Number(null); // 0
          Number("0x11"); // 17
          Number("0b11"); // 3
          Number("0o11"); // 9
          Number("foo"); // NaN
          Number("100a"); // NaN
          Number("-Infinity"); //-Infinity
          
          

          Number判斷數字是否是NAN

          
          let number1=new Number("123");
          let number2=123;
          let number3="string";
          let number4=null;
          console.log(Number.isNaN(number1)); //  false
          console.log(Number.isNaN(number2)); //  false
          console.log(Number.isNaN(number3)); //  false
          console.log(Number.isNaN(number4)); //  false
          console.log(Number.isNaN(NaN)); //  true
          
          

          Number.isFinite 是否是一個有窮數

          console.log(Number.isFinite(1 / 0));
          // false
          console.log(Number.isFinite(10 / 5));
          // true
          console.log(Number.isFinite(0 / 0));
          // false
          
          

          Number.isInteger 判斷給定的參數是否為整數

          
          function checkInteger(x, y) {
            if (Number.isInteger(y / x)) {
              return "整數";
            }
            return "非整數";
          }
          console.log(checkInteger(5, 10));
          // "整數"
          console.log(checkInteger(5, 11));
          // "非整數"
          
          

          Number.isSafeInteger 判斷傳入的參數值是否是一個“安全整數”(safe integer)

          備注:

          Number.isSafeInteger() 方法用來判斷傳入的參數值是否是一個“安全整數”(safe integer)。
          一個安全整數是一個符合下面條件的整數:
          可以準確地表示為一個IEEE-754雙精度數字,
          其IEEE-754表示不能是舍入任何其他整數以適應IEEE-754表示的結果。.
          比如,2^53 - 1 是一個安全整數,它能被精確表示,在任何 IEEE-754 舍入模式(rounding mode)下,沒有其他整數舍入結果為該整數。作為對比,2^53 就不是一個安全整數,它* 能夠使用 IEEE-754 表示,但是 2^53 + 1 不能使用 IEEE-754 直接表示,在就近舍入(round-to-nearest)和向零舍入中,會被舍入為 2^53。
          安全整數范圍為 -(2^53 - 1)到 2^53 - 1 之間的整數,包含 -(2^53 - 1)和 2^53 - 1。

          Number.isSafeInteger(3); // true
          Number.isSafeInteger(Math.pow(2, 53)); // false
          Number.isSafeInteger(Math.pow(2, 53) - 1); // true
          Number.isSafeInteger(NaN); // false
          Number.isSafeInteger(Infinity); // false
          Number.isSafeInteger("3"); // false
          Number.isSafeInteger(3.1); // false
          Number.isSafeInteger(3.0); // true
          
          

          Number.parseFloat 將字符串數字轉成數字類型

          備注:

          • 方法可以把一個字符串解析成浮點數。該方法與全局的 parseFloat() 函數相同,并且處于 ECMAScript 6 規范中(用于全局變量的模塊化)。
          • 給定值被解析成浮點數,如果無法被解析成浮點數,則返回NaN
          
          function checkFloat(r) {
            return parseFloat(r);
          }
          console.log(checkFloat(4.567));
          // 4.567
          console.log(checkFloat("4.567abcdefgh"));
          // 4.567
          console.log(checkFloat("abcdefgh"));
          // NaN
          
          
          

          Number.parseInt 將數字字符串轉成整數

          /**
           *
           * Number.parseInt()
           * 方法依據指定基數 [ 參數 radix 的值],把字符串 [ 參數 string 的值] 解析成整數。
           * @params string:要解析的值。 如果此參數不是字符串,則使用ToString抽象操作將其轉換為字符串。忽略此參數中的前導空格。
           * @params radix:一個介于2到36之間的整數,代表字符串的基數(數學數字系統中的基)。小心-這并不是默認為10。
           * 從給定字符串中解析的整數。如果基數小于11,且第一個非空白字符不能轉換為數字,則返回NaN。
           *
           * */
           
          function checkInt(x, base) {
            const parsed=parseInt(x, base);
            if (isNaN(parsed)) {
              return 0;
            }
            return parsed * 100;
          }
          console.log(checkInt(" 0xF", 16));
          // 1500
          console.log(checkInt("321", 2));
          // 0
          
          

          Number.prototype.toFixed() 把數字轉換為字符串,返回小數點后有指定位數的數字

          
          var numObj=5.123456;
          var n=numObj.toFixed(2); // 5.12
          
          
          

          Number.prototype.toPrecision() 以指定的精度返回該數值對象的字符串表示

          
          var numObj=5.123456;
          console.log("numObj.toPrecision()  is " + numObj.toPrecision()); // 輸出 5.123456
          console.log("numObj.toPrecision(5) is " + numObj.toPrecision(5)); // 輸出 5.1235
          console.log("numObj.toPrecision(2) is " + numObj.toPrecision(2)); // 輸出 5.1
          console.log("numObj.toPrecision(1) is " + numObj.toPrecision(1)); // 輸出 5
          // 注意:在某些情況下會以指數表示法返回
          console.log((1234.5).toPrecision(2)); // "1.2e+3"
          
          

          Number 轉換 Date 對象

          
          var d=new Date("December 17, 1995 03:24:00");
          console.log(Number(d));
          
          

          結尾

          在Number數字類型中,使用最多的應該是:

          • isNaN判斷數字是否是非數字NAN
          • parseFloat將數字字符串轉成數字類型
          • parseInt 解析字符串轉成整數
          • toPrecision作為數字的方法,返回該數值的指定精度,包含小數位
          • toFixed 返回指定小數點精度的數字,需要注意和toPrecision區分開來

          源碼地址

          • 碼云https://gitee.com/lewyon/vue-note
          • githuphttps://github.com/akari16/vue-note

          文章來自https://www.cnblogs.com/akari16/p/16201678.html

          天給大家分享的是在Javascript中,獲取到數字超出長度問題。

          實戰背景

          剛剛收尾的一個移動端商城項目中搭建用戶體系的時候,DB設計的User用戶表主鍵ID為bigint(20) 為了達到不重復的問題 Java生成了16-20位不重復的Long類型數字串(具體生成方式也是非常復雜的)。

          但是在和web前端API對接的時候發現獲取到的ID和生成的不一致,導致操作用戶數據的時候一直有問題,最后定位到是ID后端數據類型和Javascript中的數據類型不一致。

          問題原因

          JavaScript中所有的數字,無論是整數還是小數,其類型均為Number。在程序內部,Number類型的實質是一個64位的浮點數,這與Java中double類型的浮點數是一致的;因此,JavaScript中所有的數都是浮點數。遵循IEEE 754標準(浮點數算術標準),JavaScript所能表示的數值范圍為正負1.7976931348623157乘以10的308次方,其最小所能表示的小數為正負5乘以10的負324次方,這兩個邊界值可以分別通過訪問Number對象的MAX_VALUE屬性和MIN_VALUE屬性來獲取。

          對于整數,根據ECMAScript標準的要求(http://ecma262-5.com/ELS5_HTML.htm#Section_8.5),JavaScript能表示并進行精確算術運算的整數范圍為:正負2的53次方,也即從最小值-9007199254740992到最大值+9007199254740992之間的范圍;對于超過這個范圍的整數,JavaScript依舊可以進行運算,但卻不保證運算結果的精度。值得注意的是,對于整數的位運算(比如移位等操作),JavaScript僅支持32位整型數,也即從-2147483648到+2147483647之間的整數。

          我們可以瀏覽器中測試一下,如下操作

          如上圖所示 是正常的,那么我們再 +1 試試

          看到了吧? 都變了!!!!

          解決方案1

          數據庫設計的時候用varchar(20),那么會映射為String類型,就不會出現這種問題

          解決方案2

          如果項目已經成型并且修改數據庫會造成不可預料的問題那么可以在User對象中再增加一個String類型id映射字段,如下 private Long userId;

          private String userIdStr; public String getUserIdStr() { returnthis.userId+"";

          } publicvoidsetUserIdStr(String userIdStr) { this.userIdStr=userIdStr;

          }

          那么和前端交互的時候可以使用userIdStr字段 因為是String 類型的,規避掉這個問題。

          以后在設計的時候記得不要再犯這樣的問題哦!

          更多精彩內容請關注“IT實戰聯盟”哦~~~


          主站蜘蛛池模板: 精品无码人妻一区二区三区品| 亚洲AV无码一区二区三区牛牛 | 99精品国产高清一区二区三区| 日韩av片无码一区二区三区不卡| 日本一区高清视频| 精品无码人妻一区二区三区18 | 无码一区二区三区老色鬼| 精品无码一区二区三区电影| 亚洲变态另类一区二区三区| 美女AV一区二区三区| 国产精品女同一区二区| 风间由美在线亚洲一区| 亚洲av鲁丝一区二区三区| 国产一区二区三区免费视频| 少妇精品无码一区二区三区| 国产激情一区二区三区 | 亚洲欧洲专线一区| 成人国产精品一区二区网站| 蜜桃无码AV一区二区| 99久久精品费精品国产一区二区| 亚洲国产欧美国产综合一区| 亚洲一区精品无码| 东京热无码av一区二区| 无码午夜人妻一区二区不卡视频 | 国产成人精品一区二区三区无码| 精品成人一区二区三区四区| 激情综合丝袜美女一区二区| 日本一区二区三区不卡视频 | 合区精品久久久中文字幕一区| 精品人妻少妇一区二区三区不卡 | 国产综合一区二区在线观看| 一区二区三区伦理高清| www.亚洲一区| 国产在线无码视频一区二区三区 | 一区二区三区日本电影| 波多野结衣的AV一区二区三区| 国产精品乱码一区二区三区| 亚洲欧洲∨国产一区二区三区| 国产一区二区内射最近更新| 在线视频一区二区三区| 国产麻豆精品一区二区三区|