zoukankan      html  css  js  c++  java
  • 对基本数据类型number的详细讲解

    前言

    本文将详细又简练的带你把基本数据类型之一的number进行讲解,有不对之处欢迎指正

    正文

    number类型可以是十进制,八进制,十六进制,八进制第一位必须是0,然后是八进制数字序列(0-7),如果字面中的数值超出了范围,前导0会被忽略,后面的数字会被当做十进制解析。十六进制的前两位是以0x开头,后面跟十六进制数字(0-9以及A-F)

    1.浮点数值

    浮点数值就是我们平时说的小数,在js中,1.10.1.1都是允许的,但是.1不推荐(会解析为0.1),在内存中浮点数所占用的内存是整数的两倍,所以解析器会把1.或者1.0这样的数解析为1整数。浮点数的最高精确位数是17位。

    2.数值范围

    由于内存的限制,number有最大值和最小值,其中最大值保存在Number.MAX_VALUE中,最小值保存在Number.MIN_VALUE中。

    3.NaN(重点)

    NaN即非数值,这个数值表示一个本来要返回数值的操作数未返回数值的情况,就比如用一个数字去除以一个字符串就会返回NaN。

    ①任何涉及NaN的操作都会返回NaN,但是用typeof检测NaN的类型是返回number,因为他本身就是特殊的number类型嘛

    ②NaN与NaN不相等,其实还是第一条

    还有一个isNaN()函数,用来检测接受的参数是否是非数字,isNaN还可以用来检测对象,当检测对象时首先会调用对象的valueOf()方法,确定是否可以转换为数值,如果不能,就基于这个返回值调用toString()方法,在测试返回值。

    4.数值转换(重点)

    可以使用三个函数把非数值转换为数值,分别是Number()、parseInt()、parseFloat()。

    ①Number()

    Number()可以转换任何数据类型,记住这里指的是任何数据类型,既包括基本数据类型也包括引用类型,对应的转换规则如下:

    1. boolean类型,true转换为1,false转换为0
    2. number类型,输入什么输出什么,NaN类型还是NaN
    3. null类型,转换为0
    4. UNdefined类型,返回NaN
    5. 如果是字符串:
      1. 只包含数字,十进制,如'123',转换为123,八进制的前导零会被忽略转换为十进制,例如'055',转换为55
      2. 如果是有效的小数,转换为相应的小数,前导零还是会被忽略
      3. 如果是十六进制,转换为对应的十进制
      4. 字符串为一个空字符串转换为0
      5. 字符串是其他格式全部转换为NaN,例如'asbdy123','12458adbej'
      6. 如果是对象,类似于isNaN()参数为对象的情况,首先调用对象的valueOf()方法,根据返回值按照前面的规则进行转换,如果结果是NaN则调用对象的toString()方法,注意与isNaN不同的是这次调用的不是valueOf()的返回值了
    ②parseInt()

    这个方法专门用于把字符串转换成数值,无法转换对象

    parseInt()会忽略字符串前面的空格,直到找到第一个非空字符

    1. 'abc123'会被转换成NaN
    2. ' 123.14.15abc'会被转换为 123
    3. ' '转换为NaN

    另外,parseInt()在处理八进制时存在分歧ES3会正确解析八进制而ES5会忽略前导零,因此这个方法还接受第二个参数,转换时使用的基数(即多少进制)

    var num1 = parseInt('af',16); // 175
    var num2 = parseInt('af'); // NaN
    var num3 = parseInt('010',8); //8
    
    ③parseFloat()

    这个方法用来解析字符串格式的浮点数

    这个方法也是从第一个字符开始解析,而且也会忽略最开始的空格,直至解析到一个非空字符,方法会一直解析到字符串末尾。或者解析到遇见一个无效的浮点数字字符为止,就是说第一个小数点有效,后面的小数点就是无效的。

    parseFloat()始终会忽略前导零而且不能传第二个参数即使用什么进制,所以十六进制始终会转换成0,因为是0x开头,所以这个方法只用来解析十进制。

    5.基本包装数据类型Number

    这里我们补充一下基本包装数据类型Number(是一个对象,已经不是基本数据类型),详细对基本包装数据类型对象的介绍可以查看我的另一篇博文https://www.cnblogs.com/jojo-star/p/13446501.html

    Number是与数字值对应的引用类型。要创建Number对象,可以在调用Number构造函数时向其中传递相应的数值。与Boolean类型一样,Number类型也重写了valueOf()、toLocaleString()和toString()方法。重写后的valueOf()方法返回对象表示的基本类型的数值,另外两个方法则返回字符串形式的数值。虽然重写了但是与之前的用法并无什么区别,可以为toString()方法传递一个表示基数的参数,告诉它返回几进制数值的字符串形式,如下面的例子所示。

    var num = 10;
    console.log(num.toString()); // "10"
    console.log(num.toString(2)); // 二进制表示的字符串"1010"
    console.log(num.toString(8)); // "12"
    console.log(num.toString(10)); // "10"
    console.log(num.toString(16)); // "a"
    

    除了继承的方法之外,Number类型还提供了一些用于将数值格式化为字符串的方法。

    ①toFixed(),会按照指定的小数位返回数值的字符串表示(最大20位),如果数值本身包含的小数位比指定的还多,那么接近指定的最大小数位的值就会舍入(不同浏览器会有不同,对于四舍五入)

    var num = 10;
    console.log(num.toFixed(2)); // "10.00"
    var num1 = 10.005
    console.log(num1.toFixed(2)); // '10.01',小于小数位数,就会四舍五入
    
    

    ②toExponential(),该方法返回以指数表示法(也称e表示法)表示的数值的字符串形式。与toFixed()一样,toExponential()也接收一个参数,而且该参数同样也是指定输出结果中的小数位数

     var num = 10;
     console.log(num.toExponential(2)); // "1.00e+1" ,十这个数值很小其实是没有必要使用指数表示的
     var num1 = 1005.12345
     console.log(num1.toExponential(2)); // '1.01e+3'
    
    

    ③toPrecision()方法,如果你想得到表示某个数值的最合适的格式,就应该使用toPrecision()方法。

    对于一个数值来说,toPrecision()方法可能会返回固定大小(fixed)格式,也可能返回指数(exponential)格式;具体规则是看哪种格式最合适。这个方法接收一个参数,即表示数值的所有数字的位数(不包括指数部分)

  • 相关阅读:
    ES基础知识
    ES工具使用
    ES环境部署
    C# 新特性
    自动化测试工程师--面试
    python 报错 pip安装三方库不成功:WARNING: You are using pip version 20.2.3; however, version 20.2.4 is available
    jmeter 测试调用https接口
    JDK升级操作
    Jmeter之post上传文件
    弱网测试—Network-Emulator-Toolkit(一)
  • 原文地址:https://www.cnblogs.com/jojo-star/p/13407869.html
Copyright © 2011-2022 走看看