zoukankan      html  css  js  c++  java
  • Number() 和ParseInt() 和 ParseFloat() 区别

    在项目开发中我们经常会用到转型方法,尤其是JS这种松散型的语言。其中比较常用的方法就是Number()方法和ParseInt()/ParseFloat()方法了,下面我们分别对这几种方法的转型机制进行详细地说明。
    
    Number()
    如果传入的参数为字符串,则遵循以下规则:
    
    如果字符串中只包含数字,则返回相应的数字值(前导的0会被忽略)
    
    如果包含浮点和负号,则返回相应的小数或负数
    
    如果是16进制数字,则返回相应的10进制数
    
    如果包含空格,则开始和结束的空格会被忽略,如果中间包含空格则会返回NaN
    
    如果是空字符串,则返回0
    
    如果包含除去以上情况的其它字符,则返回NaN
    
    如果传入的参数为true/false,则返回1/0
    
    如果传入的参数为null,则返回0
    
    如果传入的参数为undefined,则返回NaN
    
    如果是数字,则简单的返回数字值
    
    如果是对象,则调用对象的valueOf()方法,将所得值按照以上规则进行转型,如果得到NaN,再调用对象的toString()方法,将所得的值按以上规则进行转型
    
    总体来说Number()方法的转型机制比较复杂且难懂,一般我们手动调用转型方法会使用parseInt()/parseFloat()方法进行转型,下面介绍这两个方法的转型机制。
    
    parseInt()/parseFloat()
    如果传入的参数为字符串,则则从第0个位置开始,找到第一个非空格字符,如果第一个非空格字符不是数字或-号,则返回NaN,如果是数字或-号,则继续往下寻找,直到找到非数字字符,然后忽略后面的内容,返回前面找到的数字值(前导的空格会被忽略,中间的空格则会当成非数字字符处理)
    
    如果是boolean,null,undefined类型值,则返回NaN
    
    如果需要对8进制或者16进制的数进行转型,ECMAScript 3和ECMAScript 5有所不同,所以推荐传入第二个参数,即进制数
    
    如果是对象,则调用对象的toString()方法,将所得值再按照以上方法进行转型
    
    *以上只说明了parseInt()方法的机制,parseFloat()方法与其只有一个区别,即parseFloat()方法遇到第一个浮点会继续往下寻找
    
    下面举一些典型的例子,对以上机制进行验证和说明
    
    console.log(Number("12a"));      //NaN
    console.log(Number(""));         //0
    console.log(Number(null));       //0
    console.log(Number(undefined));  //NaN
    console.log(Number(true));       //1
    console.log(Number(false));      //0
    console.log(Number([]);          //0
    console.log(parseInt("-1-2a"));  //-1
    console.log(parseInt("-a2a"));   //NaN
    console.log(parseInt(" 12a"));   //12
    console.log(parseInt("1 2a"));   //1
    console.log(parseInt(""));       //NaN
    console.log(parseInt(null));     //NaN
    console.log(parseInt(undefined));//NaN
    console.log(parseInt(true));     //NaN
    console.log(parseInt(false));    //NaN
    console.log(parseInt([]));       //NaN
    以上便是所总结的Number()和parseInt()/parseFloat()方法的转型机制,特别说明:大部分规则摘自《JavaScript高级程序设计第三版》。
  • 相关阅读:
    正交相机下实现滚轮按钮拖动,滚动滚轮缩放的功能
    C#标记 [已弃用] 的方法
    JDBC-Mybatis-Hibernate
    Data Structures and Algorithm Analysis in Java
    Maven
    Java面试
    Bootstrap
    CSS3
    HTML5
    JSON
  • 原文地址:https://www.cnblogs.com/zlq92/p/12403032.html
Copyright © 2011-2022 走看看