parseInt

103 阅读2分钟

供参考链接:www.jianshu.com/p/8fcfabb09…

面试题引入

面试题1

['1','2','3'].map(parseInt)结果是什么?

结果:[1, NaN, NaN]

面试题2

['1','2','3'].map(parseInt)等价于

    let newArray = ['1', '2', '3'].map((item, index) => {
      return parseInt(item, index)
    })
    console.log(newArray) // [1, NaN, NaN]

这道面试题 考的是radix的取值范围。

  • radix取值在2~36之间,在这边可以理解为(3~36)区间,都可以转换 number类型。
  • 特殊:radix值是 0 或者 undefined ,也可以转换成 number类型。
  • 不在区间内,都返回NaN
  • 这边的radix为2时,都返回NaN

定义和用法

  • parseInt() 函数可解析一个字符串,并返回一个整数。
  • 当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。
  • 当忽略参数 radix , JavaScript 默认数字的基数如下:
    • 如果 string 以 "0x" 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。
    • 如果 string 以 0 开头,那么 ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。
    • 如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。

语法

parseInt(string, radix)
  • string:必须。要被解析的字符串
  • radix:可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。

第一个参数:无论是小数、字符串都可以强制转换成 number类型。

第二个参数:默认值 radix 值为 0

注意点

  • 只有字符串中的第一个数字会被返回。
  • 开头和结尾的空格是允许的。
  • 如果字符串的第一个字符不能被转换为数字,那么 parseInt() 会返回 NaN。
  • 在字符串以"0"为开始时旧的浏览器默认使用八进制基数。ECMAScript 5,默认的是十进制的基数。

eg:

parseInt("10")  //10
parseInt("10.33")  //10
parseInt("34 45 66")  //34
parseInt(" 60 ") //60
parseInt("40 years")  //40
parseInt("He was 40")  //NaN

parseInt("10",10)  //10
parseInt("010")  //10
parseInt("10",8) //8
parseInt("0x10")  //16
parseInt("10",16)  //1
parseInt('10', 0) // 10
parseInt('10', null) // 10
parseInt('10', undefined) // 10
parseInt('10', 37) // NaN
parseInt('10', 1) // NaN



parseInt("011",2)      //3
parseInt("011",10)     //11
parseInt("011",16)     //17

// 若*string*不是字符串,则将其转换为字符串再解析
parseInt(11,2)       //3
parseInt(011,2)      //NaN  011转换成string是9,而9对于二进制是非法字符
parseInt(011)        //9
parseInt(1.11,10)    //1