这篇先只讨论基础类型的转换, Object类型的转换在之后讨论
字符串类型转换
当我们需要字符串时, 就会自动进行转换, 也可以显式的调用 String(v)
转换
let v=true;
console.log(String(v)) // 由 true 变为了字符串 "true"
console.log(String(null)) // 由 null 变为了字符串 "null"
数字类型转换
在算术函数和表达式中,会自动进行 number 类型转换。
比如,用除法时 /
:
console.log("6" / "2"); //3
//string 类型的值被自动转换成 number 类型后进行计算
也可以用 Number()
显示转换
let str = "123";
console.log(Number(str)); // 123
// 字符串 "123" 变成数字 123
如果该字符串不是数字, 会返回 NaN
:
let age = Number("Not a Number");
alert(age); // NaN,转换失败
转换规则:
值 | 转换结果 |
---|---|
undefined | NaN |
null | 0 |
true 或 false | 1 或 0 |
string | 去掉首尾空格后的纯数字字符串中含有的数字。如果剩余字符串为空,则转换结果为 0。否则,将会从剩余字符串中“读取”数字。当类型转换出现 error 时返回 NaN 。 |
注意 null
和 undefined
在这有点不同: null
变成数字 0
, undefined
变成 NaN
布尔类型转换
- 直观上为“空”的值(如
0
、空字符串(""
)、null
、undefined
和NaN
)将变为false
- 其他值变为
true
注意, "0"
字符串也是true, 有点容易掉坑, 但记住只要是非空的字符串都是true就行
tips
两个提醒:
- 四则运算 会自动将值转换成number类型。
- 加号,可以作为四则运算的加法运算符,也可以作为“连字符”,加号会优先选择连字符。
练习一下
//有字符串的加法,先将1转成"1"
"" + 1 + 0 = "10"
// 减法 使 "" 转成 0
"" - 1 + 0 = -1
// true 转成 1 , false 转成 0
true + false = 1
// 除法 "3" 转成 3
6 / "3" = 2
// 从左往右计算 先计算 4+5>>9 然后遇到后面的字符串 9转为 "9" 拼接成 "9px"
4 + 5 + "px" = "9px"
// "$4" + 5
"$" + 4 + 5 = "$45"
"4px" - 2 = NaN
// 虽然可以转为-9 但它仍是字符串, 字符串相加
" -9 " + 5 = " -9 5"
// 转为数字, 会忽略前后空格
" -9 " - 5 = -14
// null 转数字为0
null + 1 = 1
// undefined 转数字为NaN
undefined + 1 = NaN
//"\t \n"作为特殊字符,在这里也被当做了空格处理 最后被转换 只剩下空字符串被转为0
" \t \n" - 2 = -2 // (7)
1 条评论
111