美文网首页
Javascript学习笔记——3.8 类型转换

Javascript学习笔记——3.8 类型转换

作者: IFELSE | 来源:发表于2018-02-27 10:14 被阅读0次

类型转换是javascript的大坑,也是比较繁琐的一章

Javascript的类型转换非常灵活,程序根据期望可以自动转换一些值,总之全是坑

50+'hello'  //'50hello' 数字转换为字符串
'5'*'6'  //30 字符串你转换为数字

遇到转换无效的情况,系统返回NaN

10-'x'  //NaN

转换表

Javascript类型转换

  • 数字和字符串连接,数字转换为字符串
  • 转换不成功则为NaN
  • 与数字运算true转换为1 , false转换为0,true+false //=1
  • 原始值转换为对象使用String(), Number(), Boolean()构造函数,但null和undefined转换为对象会报类型错误TypeError

比较时的转换

在 == 的时候两边也会做转换

false == undefined //true
undefined == false //false
'0'==0 //true
0 == false //true false转换为数字0
'0' == false //true 都转换为数字

以上换为===判断时,结果都为false

显示类型转换

显示类型转换最简单的方法是构造函数Boolean(),Number(),String(),或Object()。
当不通过New调用以上函数时,就会作为类型转换函数。

var x = Number('123')
x //123 原始值
var y = new Number('123')
y //Number {123} 对象

运算符可以用来做类型转换

x+''  // String(x)
+x  //Number(x)
!!x //boolean(x)

数字的解析和格式化

Number在toString()时默认为10进制,也可以用参数指定进制18.toString(19)
toFixed() 指定小数位数转换为字符串,四舍五入
toExponential() 将数字转换为指数形式的字符串 小数点前只有一位,小数点后位数由参数决定,四舍五入
toPrecision() 根据参数指定的有效位数将数字转换为字符串,如果有效位数小于整数位数,则使用指数计数法,四舍五入。

Number()会将传入的字符串转换为数字直接量,
parseInt()和parseFloat()是全局函数,前者将数字解析为整数,后者将数字解析为浮点数。两者的运算都会忽略首位的空格,尽量截取前面合理的部分,但如果以非法字符开头,将返回NaN。

parseInt('3.54')  // 3
parseFloat('3')   // 3
parseFloat('3.54')  // 3.54
parseInt('  3abc  ')   // 3
parseFloat('   3.54dksd')  // 3.54
parseInt('   aa3')   // NaN
parseFloat('  aa3.54')  /NaN

parseInt可以有第二个参数:进制

parseInt('11',2) //3

对象转换为原始值

对象转换到布尔值的话全部为true,包括值为false的布尔对象。

Boolean(new Boolean(false)) //True

所有对象都有集成了两个转换方法toString()和valueOf()。

一般对象的toString()返回值是[object Object],很多特殊对象自定义了toString()使返回值更有意义,比如数组返回逗号分割的所有元素的字符串,函数返回整个函数定义,等等。

valueOf() 如果对象存在对应的原始值,则返回该原始值,否则返回该对象自身。数组、函数和正则表达式简单的继承了这一原则,而日期则返回毫秒技术(1970年1月1日以来的毫秒数)。

var a = [1,2,3]
a.toString() // '1,2,3'
var s = {name:'Mike',age:18,sex:'male'}
s.toString()  // [object Object]
s.valueOf() === s  //true
var d = new Date(2017,1,1)
d.valueOf()  //  1485878400000

对象到字符串的转换遵循以下步骤:

  • toString()
  • 没有toString()方法的话调用valueOf()
  • 抛出类型错误异常

对象到数字转换遵循以下步骤:

  • 如果valueOf()返回原始值,则把这个原始值转换为数字返回
  • 否则如果toString()返回原始值,把这个原始值转换为数字返回
  • 以上都不行,则抛出类型转换错误

相关文章

网友评论

      本文标题:Javascript学习笔记——3.8 类型转换

      本文链接:https://www.haomeiwen.com/subject/vdgrzxtx.html