js-number

数值范围

为什么会有数值范围

由于内存的限制,es所存储的数字也有范围,这个范围是

Number.MIN_VALUE ~ Number.MAX_VALUE

正无穷和负无穷

如果计算结果超过了这个范围,这个数值会被转换成一个特殊的数值,Infinity值。即无穷大。其中分为正无穷和负无穷。 在Number数据类型中有两个属性表示这两个无穷大的值,分别是

Number.NEGATIVE_INFINITY ~ Number.POSITIVE_INFINITY

判断一个值是不是INFINITY可以使用函数 isFinite

js数值转换

转换方式:

  1. Number()
  2. parseInt()
  3. parseFloat()

Number()

特点:
  1. 可以用于任何的数据类型。
  2. 如果是Boolen值,true=1,false=0.
  3. 如果是数字,只是简单的传入和返回。
  4. 如果是null,返回0。
  5. 如果是undefined,返回NaN。
  6. 如果是字符串
    1. 如果字符串中都是数字,将其转换成十进制的数值。可以带正负号。
    2. 如果字符中是浮点数值,转换成对应的浮点数值。
    3. 如果字符串中是有效的16进制数值,转换成十进制数值。
    4. 如果字符串是空的,即什么都没有。转换成0.
    5. 如果字符串中包含除了上述之外其他的字符串,转换成NaN。
  7. 如果是对象,则调用对象的valueOf方法。然后依照前面的规则进行转换。如果转换成了NaN,则调用对象的toString方法,然后继续按照之前的规则进行转换。
补充:

⚠️ + 操作符的转换规则和Number相同。

parseInt()

由于Number函数在转换的时候比较复杂,所以一般情况使用parseInt进行转换。

特点:
  1. 忽略字符串中前面的空格。
  2. 如果第一个非空格字符不是数字或者负号,直接返回NaN。
  3. 空字符返回NaN
  4. parseInt(“123abs”) = 123
  5. 可以进行八进制=>十进制的转换

     ⚠️如果直接作为第一个参数传入 在es5是不支持的。
    
  6. 可以进行十六进制=>十进制的转换

     在函数的第二个参数中填入第一个参数的进 例如: 
        
     parseInt(0x12,16);//16=>10 可以不加0x
     parseInt(072,8);//8=>10 可以不加0
    

parseFloat()

特点:
  1. 整体上跟parseInt差不多
  2. 字符串中的第一个小数点是可以被识别的。
  3. 只解析十进制的数。如果传入一个十六进制的数,返回0

js浮点

浮点类型数值

==++浮点类型数值的最高精度是17位小数++==

  1. 浮点类型的数值,数值中必须有一个小数点。并且小数点后面必须有一位数字,这样的数值才能称为浮点类型的数值。

     ⚠️var a = .1;
     用这种方法声明的数字也是浮点数,
     但是不推荐这么声明。
    
  2. js中存储浮点类型数值会比存储整形数值要花费更多的内存空间(是两倍的大小)所以es会在合适的时机把浮点转换成整形存储。

     A:  比如这种形式的声明
         var a = 1.;
         声明的时候是想声明一个浮点数1.0,
         但是在实际存储的时候存的则是整数1
            
     B:  如果一个浮点数表示的本身就是一个整数,
         那么该数值也会被转换成整数。
         var a = 1.0;
         那么这个浮点类型的数,
         在实际存储的时候是以整数形式存储的。
    
  3. 科学计数法:

    在编程语言中,对于存储极大或者极小的数的时候,往往使用的是科学计数法。

    “e”这个字符代表10的多少次方

    1.2e2代表:

         1.2*10^2=120
    

    1.2e-2代表:

         1.2*10^{-2}=0.012
    

    在默认情况下,es会把小数点带6个0以上的浮点数转换成科学计数法。

4.关于舍入误差:

==永远不要测试某个特定浮点数值==。

在js中,0.1+0.2=0.30000000000000004,而不是人类常识中的0.3!

⚠️这是基于ieee754标准计算的通病。

js的Number

Number

什么是Number

number是javascript中5大基本数据类型中的其中之一,用于存储和数字相关的数据。

创建方式
//常见方式:
var num = 10;
//其他方式1:
var num = new Number(10);  
//其他方式2:
var num = Number(10);
常见特性
  1. 自动进行进制转换

     `var num = 0x12;//自动转换成16进制      
     var num = 07;//自动转换成8进制
     var num = 08;//这个是错误的8进制,所以自动转换成整数8.
     ⚠️八进制字面量在严格模式下是无效的,会导致js引擎抛出错误。
    
  2. 所有 JavaScript 数字均为 64 位

    JavaScript 不是类型语言。与许多其他编程语言不同,JavaScript 不定义不同类型的数字,比如整数、短、长、浮点 等等。 JavaScript 中的所有数字都存储为根为 10 的 64 位(8 比特),浮点数。

  3. 精度

    精度整数(不使用小数点或指数计数法)最多为 15 位。小数的最大位数是 17,但是浮点运算并不总是 100% 准确。

属性:
  1. MAX_VALUE

    可表示的最大的数。

  2. MIN_VALUE

    可表示的最小的数。

  3. NEGATIVE_INFINITY

    表示小于Number.MIN_VALUE的值。即负无穷。

  4. POSITIVE_INFINITIVE

    表示大于Number.MAX_VALUE的值。即正无穷。

  5. NaN

    代表非数字的特殊值,该属性用于指示某个值不是数字.

  6. prototype
  7. constructor
函数
  1. toString() 把数字转换成字符串,使用指定的进制。
  2. toLocaleString() 不知道是啥,跟上面的返回值一样。
  3. toFixed() 保留小数。
  4. toExponential() 转换为指数计数法。
  5. toPrecision() 什么鬼
  6. valueOf() 返回数。

NaN 是什么

什么是NaN

NaN代表非数值,是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数但是没有返回数值的情况。

为什么需要NaN

因为在其他的编程语言中,任何数除0都会报错,从而终止代码执行,但是在es中则不会报错,它会返回NaN,因此不会影响其他代码的执行。

NaN的特点

  1. 任何涉及NaN的操作,都会返回NaN.
  2. NaN与任何的值都不相等。包括NaN本身。

函数isNaN

它会把传入的参数转换成数字,如果不能转换成数字,就返回true。

上篇node杂谈
下篇undefined && null