JavaScript权威指南(第6版) --- 自学笔记(13) --- 显示类型转换

显示类型转换
(1)最简单的可以使用Boolean()、Number()、String()或者Object()函数进行转换;当不通过new运算符调用这些函数时,他们做作为类型转换函数来处理类型转换。

console.log(Number("3")); // 3
console.log(typeof(Number("3"))); // number
console.log(String(false)); // false
console.log(typeof(String(false))); // false
console.log(Boolean([])); // true
console.log(typeof(Boolean([]))); // boolean
console.log(Object(3)); // Number {3}
console.log(typeof(Object(3))); // object

注意,除了null和undefined之外的任何值都具有toString()方法,这个方法执行结果,通常与String()方法的返回结果一样。
null和undefined调用toString时,会抛出类型错误异常(TypeError)。但是使用Object()函数不会抛出异常,返回一个新创建的空对象。

console.log(Object(null)); // {}
console.log(Object(undefined)); // {}

(2)js的某些运算符会做隐式的类型转换
"+":如果运算符的一个操作数是字符串时,它会将另一个操作数也转换成字符串。例如:"x" + 0,会发生String(0)的转换
"+":当做一元操作符时,会将操作数转换成数字。例如:+x 或者 ++x,都会发生Number(x)的转换
"!":会将操作数转成布尔值并取反。例如:!x,会发生Boolean(x)的转换

(3)js提供了专门的函数和方法来更精确的进行数字和字符串之间的转换。
Number类定义了toString()方法,可以接收表示转换基数的可选参数。如果不指定这个基数参数,转换规则将基于十进制。也可以将数字转换为其他进制(范围2~36之间)。

var n = 17;
console.log(n.toString()); // 17;转换为十进制字符串
console.log(n.toString(2)); // 10001;转换为二进制字符串
console.log(n.toString(8)); // 21;转换为八进制字符串
console.log(n.toString(16)); // 11;转换为十六进制字符串

当处理财务或科学计数时,在做数字到字符串转换时,可能需要控制小数点位置和有效数字位数,或者决定是都需要指数记数法时,Number提供了3个方法:
toFixed():根据小数点后指定的位数将数字转换为字符串,不使用指数记数法;(详细参考:http://www.w3school.com.cn/jsref/jsref_tofixed.asp
toExponential():使用指数记数法,将数字转换成指数形式的字符串,其中小数点前只有一位,小数点后面位数由参数指定,这样有效数字位数比参数多一位。(详细参考:http://www.w3school.com.cn/jsref/jsref_toexponential.asp
toPrecision():根据指定的有效数字位数将数字转成字符串,如果有效数字位数小于整数部分的位数时,则转换成指数形式。
以上三种当时都会适当的进行四舍五入或者填充0。

var n = 123456.789;
console.log(n.toFixed(0)); // 123457
console.log(n.toFixed(2)); // 123456.79
console.log(n.toFixed(5)); // 123456.78900
console.log(n.toExponential(1)); // 1.2e+5
console.log(n.toExponential(2)); // 1.23e+5
console.log(n.toPrecision(2)); // 1.2e+5
console.log(n.toPrecision(6)); // 123457
console.log(n.toPrecision(10)); // 123456.7890

(4) 如果通过一个Number()转换函数传入一个字符串,他会试图将其转换成一个整数或者浮点数直接量,这个方法只能基于十进制,并且不能出现非法的尾随字符。而parseInt()函数和parseFloat函数(他们是全局函数,不从属于任何类的方法)更加灵活。
parseInt()只解析整数,parseFloat()解析整数和浮点数,如果字符串前缀是"0x"或者"0X",parseInt()会将其解析为十六进制数。
parseInt()和parseFloat()会跳过任意数量的前导空格,尽可能解析更多数字字符,并忽略后面的内容。
如果第一个非空格字符是非法的数字直接量时,最终将返回NaN。

console.log(parseInt("3 abc def")); // 3
console.log(parseInt(" 3.14 hhhh ")); // 3
console.log(parseFloat(" 3.14 hhhh ")); // 3.14
console.log(parseInt("-13.123")); // -13
console.log(parseInt("0XFF")); // 255
console.log(parseInt("0xFE")); // 254
console.log(parseFloat(".1")); // 0.1
console.log(parseInt("0.1")); // 0
console.log(parseInt(".1")); // NaN  正式不能以"."开头
console.log(parseInt("$21.13")); // NaN  正式不能以"$"开头

parseInt()可以接收第二个可选参数,这个参数表示数字转换的基数(说白了,就是几进制),合法取值范围是2~36。

console.log(parseInt("11", 2)); // 3 (1 * 2 + 1)
console.log(parseInt("11", 8)); // 9 (1 * 8 + 1)
console.log(parseInt("ff", 16)); // 255 (15 * 16 + 15)
console.log(parseInt("77", 10)); // 77 (7 * 10 + 7)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值