大家好,这里是笑颜の行方。
本篇描述的是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(非数值)了。
非数值和任何数据一起运算,都成了非数值……
这些是字符串运算中的注意事项,大家明白了吗?