为了结果不报错,JavaScript的调包功夫可谓出神入化。

大家好,这里是笑颜の行方。
本篇描述的是JavaScript中诡异的隐式转换。

字符串相加会怎样?

var a = "Hello";
var b = "World";
console.log(a + b); // "HelloWorld"

很正常,拼接在一起。
那么,把减乘除用在字符串上呢?

var a = "Hello";
var b = "World";
console.log(a - b); // NaN
console.log(a * b); // NaN
console.log(a / b); // NaN

结果都是NaN,即非数值
非数值?如果不用数值,减乘除的运算其实可以这么用。
我们先看看加法。

console.log("2" + "1"); // "21"
console.log("2" + 1); // "21"
console.log(2 + "1"); // "21"
console.log(2 + 1); // 3

嗯……第一行是两个加数是数字字符串,加在一起肯定是个字符串。
第二和第三行的两个加数,只要有一个是字符串,那么最后出来的结果都是字符串。
只有第四行,两个加数都是数字类型,出来的结果才是数字。

接下来的算术,就有点诡异了。

console.log("8" - "4"); // 4
console.log("8" * "4"); // 32
console.log("8" / "4"); // 2

嗯?这怎么回事?
数字字符串用加法只会得到字符串,减乘除用在数字字符串上,输出的结果居然是数字……

这其实涉及到数据的隐式转换问题。
之前,对非数字符串使用减乘除,非数字符串会试着转化成数字类型。
结果运算符一看,不是纯数字,就只能转化成NaN(非数值)了。
非数值和任何数据一起运算,都成了非数值……

这些是字符串运算中的注意事项,大家明白了吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值