/*
* 把其它类型转换为string
* + [val].toString() & String([val])
* + 原始值类型:基于引号包起来、bigint会去掉n
* + 对象类型值:
* + 调用 Symbol.toPrimitive
* + 如果不存在则继续调用 valueOf 获取原始值,有原始值则把其转换为字符串
* + 如果不是原始值,则调用toString转换为字符串
* 特殊:普通对象转换为字符串是 “[object Object]” -> Object.prototype.toString
*
* + “+”代表的字符串拼接
* + 有两边,一边是字符串,则会变为字符串拼接
* + 有两边,一边是对象,按照 Symbol.toPrimitive -> valueOf -> toString 处理,变为字符串后,就直接按照字符串拼接处理了「有特殊情况」
* + {}+10 -> 10 他认为{}是代码块,处理的只是+10这个操作
* + 只出现在左边,例如:+[val] 这是把[val]转换为数字 ++i(先累加再运算) & i++(先运算再累加)
* + ...
*/
// let result = 100 + true + 21.2 + null + undefined + "Tencent" + [] + null + 9 + false;
// // 100 + true + 21.2 + null + undefined 都是数学运算 => NaN
// // NaN + "Tencent" => "NaNTencent"
// // "NaNTencent" + [] + null + 9 + false 都是字符串拼接 => "NaNTencentnull9false"
// console.log(result);