zoukankan      html  css  js  c++  java
  • 《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后面为整数 第二个点无效

  • 相关阅读:
    sqlhelper使用指南
    大三学长带我学习JAVA。作业1. 第1讲.Java.SE入门、JDK的下载与安装、第一个Java程序、Java程序的编译与执行 大三学长带我学习JAVA。作业1.
    pku1201 Intervals
    hdu 1364 king
    pku 3268 Silver Cow Party
    pku 3169 Layout
    hdu 2680 Choose the best route
    hdu 2983
    pku 1716 Integer Intervals
    pku 2387 Til the Cows Come Home
  • 原文地址:https://www.cnblogs.com/loveluking/p/9426988.html
Copyright © 2011-2022 走看看