var num = 1 + true; console.log(num) /* 1+1 = 2 */ var num = 1 + false; console.log(num) /* 1+0 = 1 */ var num = 1 + NaN; console.log(num) /* 1+NaN = NaN */ var num = 1 + "aaa"; console.log(num) /* "1"+"aaa" = "aaa" */ var num = "aaa" + false; console.log(num) /* "aaa"+"false" = "aaafalse" */ var num = "aaa" + NaN; console.log(num) /* "aaa"+"NaN" = "aaaNaN" */
我们可以发现:
任何数字在与非字符串类型的值进行运算(相加、相减、相乘、相除、模除)时,会先将不是 number 类型的值转换为 number 类型再进行计算。
字符串类型的值在和其他值进行相加运算时,会将先将不是 string 类型的值转换为 string 类型再进行拼接,可以利用这一点对某变量进行类型转换:
var num = 10; num = num + "" console.log(num) /* "10"+"" = "10" */ console.log(typeof num) /* string */
这就是数据类型的隐式转换!当然,既然是运算,那么必然遵守运算法则:
var res = 10 + 15 + "25"; console.log(res) /* "2525" */ var res = "80" + 20 + 10; console.log(res) /* "802010" */
如上代码:遵循加法运算法则,从左到右依次计算:
10+15 = 25 => 25+“25” = “2525” 。
“80”+20 =“8020” => “8020”+10 = “802010”
需要注意的是:当字符串与任意类型的变量进行减法、乘法、除法、模除运算时,会先将所有变量转换为 number 再进行计算。
var res = "100" - Object; console.log(res) /* 100 - NaN = NaN */ var res = "100" - true; console.log(res) /* 100 - 1 = 99 */ var res = "100" - "10"; console.log(res) /* 100 - 10 = 90 */ var res = "100" - NaN; console.log(res) /* 100 - NaN = NaN */ var res = "100" - null; console.log(res) /* 100 - 0 = 100 */ var res = "100" - undefined; console.log(res) /* 100 - NaN = NaN */ var res = "was" - "sss"; console.log(res) /* NaN - NaN = NaN */
利用这一特性:
var res = "100000" - "0"; console.log(res) /* 100000 - 0 = 100000 */
可以通过 -、*、/ 、% 将纯数字的字符串隐式转换为Number
原文:https://www.cnblogs.com/a-coder-L/p/14624101.html