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

类型转换是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()返回原始值,把这个原始值转换为数字返回
  • 以上都不行,则抛出类型转换错误
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,686评论 0 13
  •   引用类型的值(对象)是引用类型的一个实例。   在 ECMAscript 中,引用类型是一种数据结构,用于将数...
    霜天晓阅读 1,266评论 0 1
  • sogou拼音输入法是deb格式的,在linux系统上,这种格式类似于Windows上的.exe格式,可直接双击进...
    Moscow1147阅读 1,166评论 0 0
  • 在去年高考以前,我从来都没有想过复读这两个字会与我有什么关系,从小到大,上学于我而言谈不上一帆风顺,倒也顺遂。 其...
    霂沐莯阅读 261评论 4 2
  • 网络中四 谢芳 10月6日 持续分享 第86天 很高兴,一大早就接收到了杨老师和罗老师的邀约。真正被两位老师的...
    xfsunshine阅读 396评论 0 3

友情链接更多精彩内容