数据类型转换

192 阅读2分钟

1.数字类型转换

image.png

alert( Number("   123   ") ); // 123
alert( Number("123z") );      // NaN(从字符串“读取”数字,读到 "z" 时出现错误)
alert( Number(true) );        // 1
alert( Number(false) );       // 0
如果通过 Number 转换函数传入一个字符串,它会试图将其转换成一个整数或浮点数,而且会忽略所有前导的 0,如果有一个字符不是数字,结果都会返回 NaN

运行

  1. parseInt 只解析整数,parseFloat 则可以解析整数和浮点数
  2. 如果字符串前缀是 "0x" 或者"0X",parseInt 将其解释为十六进制数
  3. parseInt 和 parseFloat 都会跳过任意数量的前导空格,尽可能解析更多数值字符,并忽略后面的内容
  4. 果第一个非空格字符是非法的数字直接量,将最终返回 NaN

2.布尔类型转换

image.png

  1. 直观上为'空'的值都转为false(null, undefind,'',0,false,NAN)
  2. 其他值为true
console.log(Boolean()) // false
console.log(Boolean(false)) // false
console.log(Boolean(undefined)) // false
console.log(Boolean(null)) // false
console.log(Boolean(+0)) // false
console.log(Boolean(-0)) // false
console.log(Boolean(NaN)) // false
console.log(Boolean("")) // false
alert( Boolean("0") ); // true 
alert( Boolean(" ") ); // 空白,也是 true(任何非空字符串都是 true)

3.对象转数字和字符串

任何对象除了null和undefined都有toString方法

({a: 1}).toString === Object.prototype.toString

JavaScript 下的很多类根据各自的特点,定义了更多版本的 toString 方法。

  1. 数组的 toString 方法将每个数组元素转换成一个字符串,并在元素之间添加逗号后合并成结果字符串
  2. 函数toString返回该函数的字符串
  3. 日期对象的toString返回日期字符串valueOf方法返回时间戳
  4. RegExp toString返回表示该正则的变量字符串
console.log(({}).toString()) // [object Object]
console.log([].toString()) // ""
console.log([0].toString()) // 0
console.log([1, 2, 3].toString()) // 1,2,3
console.log((function(){var a = 1;}).toString()) // function (){var a = 1;}
console.log((/\d+/g).toString()) // /\d+/g
console.log((new Date(2010, 0, 1)).toString()) // Fri Jan 01 2010 00:00:00 GMT+0800 (CST)

valueOf,表示对象的原始值。默认的 valueOf 方法返回这个对象本身,数组、函数、正则简单的继承了这个默认方法,也会返回对象本身。日期是一个例外,它会返回它的一个内容表示: 1970 年 1 月 1 日以来的毫秒数。

对象转字符串
  1. 对象有toString方法,调用toString返回原始值,将值转为字符串返回
  2. 对象没有toString或者返回的不是原始值,调用valueOf方法,若返回原始值则将原始值转为字符串返回
  3. 否则抛出错误
对象转数字
  1. 如果对象具有 valueOf 方法,且返回一个原始值,则 JavaScript 将这个原始值转换为数字并返回这个数字
  2. 否则,如果对象具有 toString 方法,且返回一个原始值,则 JavaScript 将其转换并返回。
  3. 否则,JavaScript 抛出一个类型错误异常。