• 《JavaScript高级程序设计》读书笔记(三)基本概念第二小节 Number类型


    内容
    ---语法 上一小节
    ---数据类型 本小节 number类型
    ---流程控制语句
    ---理解函数

    number类型
    --使用IEEE754格式来表示整数和浮点数值(双精度数值)
    --规定了数值字面量格式,支持各种数值类型

    55 //整数
    070 //八进制56
    079 //无效八进制,解析为79
    08 //无效,解析为8

    --八进制第一位必须是零(0),如果字面值超出范围,前导忽略作为十进制
    --严格模式下,八进制无效,会抛出错误

    --十六进制以 0x 开头,超出格式报错
    --在算术计算时,统一用十进制数值
    --+0和-0,支持保存,但是值认为相等


    浮点数值
    --数值中必须包含小数点,并且小数点之后必须有一位数字
    --小数点之前可以没有数字,但是不推荐

    var a = 1.1;
    var b = 0.2;
    var c = .3; //有效,不推荐

    --浮点数值存储空间是整数值的两倍,因此ECMAScript会不失时机地将浮点数值转化为整数值
    --小数点后没有任何数字,本身就是整数的浮点数(1.0)都会被转化成整数值

    科学记数法
    --e表示法,前面是一个数值,中间是一个e/E,后面是10的幂中的指数

    var floatNum = 3.125e7; //31250000

    --表示极小数时,ECMAScript默认会对小数点后带有6个零以上的浮点数值转化为e表示法

    --浮点数值最高精度是17位小数,但是在进行算术计算时精度远远不如整数
    --0.1+0.2 = 0.30000000000004
    --所以不要测试某个特定的浮点数值,用于判断
    --这是IEEE754数值的通病

    数值范围
    --最小数值保存在Number.MIN_VALUE中,在大多数浏览器下是5e-324
    --最大数值保存在Number.MAX_VALUE中,在大多数浏览器下是1.7976931348623157e+308
    --计算的数值超出数值范围,这个数值将被保存为特殊值 Infinity
    --正数 Infinity, 负数 -Infinity
    --访问Number.NEGATIVE_IFINNTY和Number.POSITIVE_IFINNTY可以得到负和正Infinity的值


    NAN
    --非数值(Not a Number)是一个特殊数值
    --用于表示本来要返回数值的操作数未返回数值的情况(不会抛出错误)
    --例如 a/0 返回NaN不会影响其他代码的执行
    --涉及NaN的操作返回都是NaN
    --NaN与任何值都不相等,包括自身 NaN==NaN//false
    --isNaN()函数,用于判断是否 不是数值

    isNaN(NaN); //true
    isNaN(10); //false
    isNaN("10"); //false
    isNaN("blue");//true
    isNaN(true); //false

    --true->1,false->0,

    --isNaN()也适用于对象,
    --对象调用,会首先对用对象的valueOf()方法,判断返回值,如果不能
    --则基于这个返回值再调用toString()方法,再检测返回值

    数值转换
    --Number(),parseInt(), parseFloat()
    --Number()用于任何数据类型,后两个专门用于字符串

    Number()下
    --true->1,false->0
    --数值,简单传入和返回
    --null->0
    --undefined->NaN
    --字符串
    ----只包含数值(包括+,-)转化为十进制数(前导零会被忽略,所以没有八进制)
    ----有效浮点数(前导零会被忽略,所以没有八进制)
    ----有效十六进制,会转化为相同大小十进制
    ----空串-> 0
    ----还包含其他字符,则转化为NaN
    ----如果是对象,则先调用valueOf(),转化如果为NaN,再调用toString()
    --对字符串转换比较复杂,不合理一般用parseInt,parseFloat代替

    Number()等同于一元+操作符

    Number("11"); //11
    +("11"); //11
    -("11"); //-11
    +"11"; //11
    -"11"; //-11

    parseInt(string, radix)方法
    --返回十进制数值
    --忽略空格
    --第一个不是负号或者数字字符 返回NaN
    --直到解析完后续字符或者遇到了非数字字符
    --小数点无效
    --radix,可选(es5支持的参数)。表示要解析的数字的基数。该值介于 2 ~ 36 之间。
    --(es5)八进制无效,(es3支持八进制)
    --如果省略该参数或其值为 0,则数字将以 10 为基础来解析。
    --如果它以 “0x” 或 “0X” 开头,将以 16 为基数。
    --如果基数为16,则能识别 0x开头的 和不以0x开头的两种
    --如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。

    parseInt(" 1.1asd"); //1
    parseInt("010"); //10
    parseInt("010",6); //6
    parseInt("0xa"); //10
    parseInt("0xa",16); //10
    parseInt("a",16); //10
    parseInt("0xa",17); //0 x无法识别

    请始终保持基数radix参数的书写,防止出错

    拓展

    ["1", "2", "3"].map(parseInt)输出什么?

    ["1", "2", "3"].map(parseInt)等同于
    ["1","2","3"].map(function(ele,index){
      return parseInt(ele,index)
    })

    等于调用了三次parseInt方法:
    第一次 parseInt("1",0) //基数为0时,按照上边陈述即为10进制,返回 1
    第一次 parseInt("2",1)//基数为1,不在2-36范围内,默认输出NaN
    第一次 parseInt("3",2)//基数为2,因为字符串3大于基数不合法,解析为NaN
    答案也就是:[1, NaN, NaN]


    parseFloat(string)方法
    --与parseInt相同,从第一位置解析之末尾
    --或者遇到第一个无效浮点数字符
    --第一个小数点有效,之后的无效
    --只识别十进制

    parseFloat(" 0.1.1asd"); //0.1
    parseFloat("0.1e2.3"); //10 e后面为整数 第二个点无效

  • 相关阅读:
    贪心——poj百炼3468:电池寿命
    贪心——部分背包
    C++编程规范
    调和级数求和
    人工神经网络
    Latex各种符号
    poj1088 滑雪,dp
    数据挖掘建模过程
    Java MyEclipse:The type java.lang.CharSequence cannot be resolved. It is indirectly referen
    Java调用阿里云短信接口发送手机验证码
  • 原文地址:https://www.cnblogs.com/loveluking/p/9426988.html
Copyright © 2020-2023  润新知