JS 中的数据类型有两种转换方式:显示转换
和隐式转换
。
主要是 number
,string
,boolean
这三种类型的转换。
转换为字符串,主要用 String()
方法
String(null); // "null"String(1); // "1"String(true); // "true"String(undefined); // "undefined"
String() 方法和 .toString()
方法效果一致。
String(true); // truetrue.toString(); // true
这里注意:不是所有类型都有 .toString() 方法,null 和 undefined 没有!
除此之外,number 对象调用 toString() 会报错:
123.toString(); // SyntaxError// 正确用法123..toString(); // '123', 注意是两个点!(123).toString(); // '123'
数组和对象不能通过 toString() 转为字符串:
({ name: 'ruims' }.toString() // "[object Object]"[(1, 2)].toString()); // "1,2"
上面代码可见:[].toString()
== [].join()
那数组和对象如何装换字符串呢?
当然是 JSON.stringify()
啦!
转换为数字,主要用 Number()
方法
Number('3.14'); // 返回 3.14Number(' '); // 返回 0Number(''); // 返回 0Number(false); // 返回 0Number(true); // 返回 1Number(['5']); // 返回 5。首先会变成 '5', 然后再变成数字 5Number('其他'); // 返回 NaN
其他方法:
这里重点说一下 一元运算符 + 号:
语法:+n == Number(n)
+'5' + // 5true + // 1new Date(); // 1614868133693Number(new Date()); // 1614868133693
转换失败的结果是 NaN
,且 NaN != NaN
空数组:
Array.isArray([]) && ![].join();
空对象:
JSON.stringify({}) === '{}';Object.prototype.toString.call({}) == '[object Object]' && Object.keys({}).length === 0;
来一张经典图片
加法两边自动转换字符串:num + ''
6 + '' // 6[] + 1 // 1
减法、乘法、除法,取余,两边自动转换数字:str - 0
'6' - 1; // 5'2' - true; // 1'3' * true; // 3'7' * false; // 0
记住几条规则:
严格等于,比较类型,避免了隐式转换的问题。
这篇写的不错:这里