阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      JavaScript number 类型

      数字类型

      数字类型包含:正数、负数、零(0/-0/+0)、小数、以及特殊的NaN;

      //正数,负数,零,NaN都是属于Number
      // ***NaN -> Not a Number不是一个数,但是属于数字类型;**
      console.log(typeof 222);
      console.log(typeof 222.22);
      console.log(typeof -10);
      console.log(typeof -10.34);
      console.log(typeof 0);
      console.log(typeof -0);
      

      Number 特性

      进制

      • 十进制(最常用)
      • 八进制(仅了解即可)
        • 第一位必须是0
        • 有效序列0-7(0后面跟着由0-7[包括0-7]之间的数字组成的序列)
        • 如果超出范围
          • 前导位0被忽略
          • 后续数值以十进制计数
      • 十六进制(仅了解即可)
        • 前两位必须0x
        • 有效序列
          • 0-9
          • A-F

      浮点数;

      • 小数点后至少一位数字
      • 可以用科学计算法
        • 小数点后带有6个0的浮点数
        • 以e为底*10的正负N次幂
      • 最高精度:17位小数
      • 缺点
        • 存在舍入误差(浮点数之间的运算也是非常不准确的,需要转成整数,然后再运算,运算后再转回对应的小数)

        • 无法测试特定浮点数值,不要直接对浮点数进行运算;

        • 在做有浮点数运算的情况下,先转成整数,然后得到结果后再转成小数;

          //浮点数直接运算,结果不一定是正确的;
          var test1=0.1+0.2;
          console.log(test1);//0.30000000000000004
          var test2=(0.1*10+0.2*10)/10;
          console.log(test2);//0.3
          

      数值范围(仅作了解)

      • 最小值 Number.MIN_VALUE
      • 最大值 Number.MAX_VALUE:
      • 超出范围
        • 正无穷
          • Infinity
          • Number.POSITIVE_INFINTY
        • 负无穷
          • -Infinity
          • Number.NEGATIVE_INFINITY
        • 缺陷
          • 无法参与下一次计算
        • 检测方法,用isFinite
          • 超出范围 false
          • 合法范围true

      NaN

      • 含义
        • Not a Number
        • 非数值,不是一个数值,但是NaN属于数值类型;
      console.log(10-"zhuanbang");//NaN   Not a Number
      var NaNVal=10-"zhuanbang";
      console.log(typeof NaNVal);//number NaN是number类型
      console.log(NaNVal==NaNVal);//false 自己和自己都不相等,因为NaN代表的是不是一个数,属于一个集合的统称;
      
      console.log((22*"aa")==(22*"bb"));//false
      console.log((22*"aa")==22);//false
      
      • 特点
        • 任何涉及NaN的操作都将返回NaN
        • NaN与人和数值都不相等包括其自身
      console.log(NaN==NaN)
      
      • 检测 isNaN

        • 可以转换为数值,为false
        • 不能转换为数值,为true
        //isNaN
        var age=25;
        var ageError=25-"男";
        console.log(isNaN(age));//false       age这个值不是一个数,对吗?      -> 不对  ->false
        console.log(isNaN(ageError));//true   ageError这个值不是一个数,对吗? -> 对    ->true
        

      数值转换的三种方法(五种方式);

      • Number() 最霸道的转换方法,只要不是纯数值类型,全部不能成功转换;

      • parseInt() 是Number的升级版本;有字符串出现也可能转换为数值;从前往后开始转,只要有一位可以转为数字都可以成功转换为数字;123sad可以转为123;(备注:会忽略浮点号;遇到第一个非数值的符号后直接退出转换,其中".“也是不合法的数值符号)

      • parseFloat() 属于parseInt的升级版本;可以转换为浮点数123.12dw可以转换为123.12;

      • -0 比如"5”-0; 这个方法也属于Number()的;但是它属于隐式调用Number方法;

      • +“52” 这种也可以转化为数字;使用单目加法运算符,也是可以将字符串转换为数字的。(运算符那节会讲,现在仅作了解即可;)

        console.log(10 + "10");
        console.log("10" + "10");
        console.log(+"10"+ + "10");
        console.log((+"10") + (+"10"));// 注:括号是非必需的
        console.log(-"10"+ 10);//了解下
        
      //number的转换方法; 别的数据类型转为数字类型;(不一定是字符串)
      /* 五种 转为数字的;
      * +"22"   字符串转为数字;
      * "22"-0
      * Number()
      * parseInt()
      * parseFloat()
      * */
      console.log("+++++++++++++++++++++++++");//隐式
      console.log(+"22");//隐式
      

      类型转转

      Number()

      数据类型的系统默认转换;

      • Boolean转换为数值的时候
        • true转为1;
        • flase转为0;
      • null转换为数值的时候 转换为0
      • undefined转换为数值的时候 转为NaN
      • string转换为数值的时候
        • 如果只包含数字
          • 转为十进制数
          • 前导0被忽略
        • 如果包含有效浮点格式
          • 浮点数值
          • 忽略前导0
        • 包含有效十六进制格式;相同大小的十六进制整数
        • 空字符串转为0;备注:""是空字符串 " "这个就不是空字符串了
        • 其他格式字符串NaN
      • Object 调用对象的valueOf()方法,然后依照前面的规则转换返回的值,如果转换的结果是NAN,则调用对应的toString方法,然后再次依照前面的规则转换返回的字符串值;
        • ValueOf()
        • ToString()
      console.log(Number("hello word"));//NaN
      console.log(Number(""));//0
      console.log(Number("000011"));//11
      console.log(Number("true"));//NaN
      console.log(Number(true));//1
      
      console.log(Number("22"));//显式 22
      console.log(Number(false));//显式  ->0
      console.log(Number(true));//显式  ->1
      console.log(Number(null));//显式 -> 0
      console.log(Number(undefined));//显式 NaN
      console.log(Number({}));//显式
      console.log(Number("22.22"));
      console.log(Number("22.22a"));//失败了 NaN
      

      parseInt()

      • parseInt特性

        • 忽略前导空格
        • 直接找到第一个非空格字符
          • 不是数字字符或负号,退出,解析不出数字 - 小数点不是有效数字
          • 如果第一个是数字字符
            • 解析所有后续字符
            • 遇到非数字字符结束
      • parseInt参数

        • 参数1、要解析的字符串
        • 参数2、转换时所使用的基数;为了消除在使用parentInt函数时可能导致的格式,第二个参数可以指定要解析的基数,16就是十六进制;一般不传第二个参数
        console.log(parseInt("AF"));//NaN,默认十进制解析的
        console.log(parseInt("AF",16));//175
        console.log(parseInt("22.22a"));//22
        

      parseFloat()

      • 从第一个字符开始解析
      • 遇到无效浮点格式后结束
      • 只有第一个小数点有效
      • 忽略前导0
      • 十六进制始终为0
      • 没有小数点或小数点后全0;转换为整数
      console.log(parseFloat("22.22a222"));//22.22
      console.log(parseFloat("22.22.22"));//22.22
      
      //num1是多少分
      var num1="564878.12415ssss";
      
      var min1=Number(num1)/60,
      	min2=parseInt(num1)/60,
      	min3=parseFloat(num1)/60;
      console.log(min1,min2,min3);
      
      var targetMin=parseInt(min2);
      console.log(targetMin);//9414秒
      

      %

      求余

      console.log(("++++++++"));
      console.log(13%10); //13/10    3   多余的3 会被输出
      console.log(5%3);//2
      
      var time=623648364569346563463;//time单位是秒;转为X分X秒;
      var minis=parseInt(time/60);//保存是分钟
      var second=time%60;//3
      var targetVal=minis+"分"+second+"秒";
      
      console.log("  minis:"+minis+"  second:"+second);
      console.log(targetVal);
      

      小练习:

      倒计时

      /*
      * var time=6236483645693;//time是怎么得到的》当前的服务器时间 - 双11 这个阶段多少秒;
      * 是多少天,多少小时,多少分钟,多少秒;
      * */
      

      说出结果以及类型,并解释原理

      console.log("***********************");
      console.log("22"-1);//"22" -> 22 -> (22-1) -> 21
      console.log("22"-0);
      
      目录
      目录