JavaScript 是一种弱语言,这意味着变量的类型并不是强制要求的,或者说 JavaScript 并没有变量类型,变量并不需要预先定义类型,可随时随地任意位置申明变量,然后直接使用,极大的方便了我们开发应用,不过这也带来了一些问题,比如我们想连接一个字符串,但是有时候却是加减运算,这就尴尬了。
JavaScript 连接字符串使用的是加号,同时某些情况下也是四则运算,只有我们清楚 JavaScript 中的运算规则,我们才能准确的编写代码,得到我们想要的结果。
两个变量相加,其中一个是Number类型,一个是字符串类型,不管字符串是否能完全转换为数字,最终的结果一定是字符串。
console.log('12' + '34')//'1234'console.log('12' + 34 )//'1234'console.log(12 + '34')//'1234'console.log(12 + 34 )//46
前置加号可以看做是将字符串转换为数字,也就是 Number 类型的变量。
console.log(+'12' + '34')//'1234'console.log(+'12' + 34 )//46console.log(+12 + '34')//'1234'console.log(+12 + 34 )//46
同理,前置减号可以看做是将字符串转换为数字,而且先于后面的计算优先级。
console.log(-'12' + '34')//'-1234'console.log(-'12' + 34)//22console.log(-12 + '34')//'-1234'console.log(-12 + 34)//22
减法会强制转换变量为 Number ,如果其中一个不能转换为数字,就会得到 NaN,不是一个数字。
console.log('12' - '34')//-22console.log('12' - 34)//-22console.log(12 - '34')//-22console.log(12 - 34)//-22
console.log(+'12' - '34')//-22console.log(+'12' - 34)//-22console.log(+12 - '34')//-22console.log(+12 - 34)//-22
console.log(-'12' - '34')//-22console.log(-'12' - 34)//-22console.log(-12 - '34')//-22console.log(-12 - 34)//-22
最后 Boolean 类型的变量会被转换为数字,True 为 1,False 为0,可参与四则运算。
alert(true + 1);//2, true 被转化为 1,false转化为 0alert(true + "1");//true1, true 被转化为字符串 “true”