转换规则
@1 拿字符串包起来
@2 特殊:Object.prototype.toString
出现情况
@1 String([val]) 遇到对象有三个步骤
- 先调用对象的Symbol.toPrimitive方法,如果不存在这个方法
- 再调用对象的valueOf()获取原始值,如果获取的不是原始值(基本数据类型)
- 再调用对象的toString()方法,将其转变为字符串
@2 [val].toString():arr.toString() -> ''(空串) obj.toString()->'[object Object]',但是
Object.prototype.toString.call([])->'[object Array]'
@3 '+'除数学运算,还可能代表字符串拼接
- 有两边,一边是字符串或是对象,会以字符串拼接的规则处理(对象需要转字符串String([val]))
- 有两边,不是字符串或者对象,则转数字后处理(Number([val]))
- 只出现在左边:代表数学运算,将val转为number(Number([val]))
...
// 100 + 1 + 21.2 + 0 + NaN = NaN 之后进行字符串拼接
// 'NaN' + 'Tencent' + '' + 'null' + '9' + 'false' + '[object Object]'
let res = 100 + true + 21.2 + null + undefined + 'Tencent' + [] + null + 9 + false + {}
console.log(res); // 'NaNTencentnull9false[object Object]'
let num = '-1'
num = +num
console.log(typeof num, num); // 'number' -1