let a = true let b = 2 let c = null let d = undefined let e = NaN let f = {} let g = []
toString() 吗? 不行
// 1.toString() console.log(a.toString()); // 字符串 true console.log(b.toString()); // 字符串 2 // console.log(c.toString()); 这会报错 // console.log(d.toString()); 这会报错 console.log(e.toString()); // 字符串 NaN console.log(f.toString()); // [object Object] console.log(g.toString()); // 输出空白
String() 吗?不行
// 2.String() console.log(String(a)); // 字符串 true console.log(String(b)); // 字符串 2 console.log(String(c));// 字符串 null console.log(String(d));// 字符串 undefined console.log(String(e));// 字符串 NaN console.log(String(f));// [object Object] console.log(String(g));// 输出空白
拼接空字符串?不行
// 3.拼接空字符串 console.log(a + '');// 字符串 true console.log(b + '');// 字符串 2 console.log(c + '');// 字符串 null console.log(d + '');// 字符串 undefined console.log(e + '');// 字符串 NaN console.log(f + '');// [object Object] console.log(g + '');// 输出空白
JSON.stringify() 吗?不行
// 4.JSON.stringify() console.log(JSON.stringify(a));// 字符串 true console.log(JSON.stringify(b));// 字符串 2 console.log(JSON.stringify(c));// 字符串 null console.log(JSON.stringify(d));// undefined 这个不是字符串 console.log(JSON.stringify(e));// 字符串 NaN console.log(JSON.stringify(f));// 字符串 {} console.log(JSON.stringify(g));// 字符串 []
用下面这个方法才可以
let toString = (a) => a === undefined ? String(undefined) : JSON.stringify(a) console.log(toString(a)); // 字符串 true console.log(toString(b));// 字符串 2 console.log(toString(c));// 字符串 null console.log(toString(d));// 字符串 undefined console.log(toString(e));// 字符串 NaN console.log(toString(f));// 字符串 {} console.log(toString(g));// 字符串 []
但是实际开发,null和undefined往往都需要转换为空字符串而不是'null' 或‘undefined’
那么就用vue源码里面的一个方法
// 如果null和undefined需要转换成空字符串,那么就用下面的方法【vue源码里面有的】 let a = true let b = 2 let c = null let d = undefined let e = NaN let f = {} let g = [] function isPlainObject(obj) { return Object.prototype.toString.call(obj) === "[object Object]"; } function toString(val) { if (val === null || val === undefined) return ""; if (Array.isArray(val)) return JSON.stringify(val); if (isPlainObject(val) && val.toString === Object.prototype.toString) return JSON.stringify(val); return String(val); } console.log(toString(a)); // 字符串true console.log(toString(b)); // 字符串2 console.log(toString(c)); // 空字符串 console.log(toString(d)); // 空字符串 console.log(toString(e)); // 字符串NaN console.log(toString(f)); // 字符串 {} console.log(toString(g)); // 字符串 []
其实,也可以自己写一个
let a = true let b = 2 let c = null let d = undefined let e = NaN let f = {} let g = [] // let toString = (a) => a === undefined ? String(undefined) : JSON.stringify(a) let valIsNaN = v => { if (v!==v){ return true } return false } let toString = (a) => { if( a===undefined || a === null )return '' else if(valIsNaN(a))return 'NaN' else return JSON.stringify(a) } console.log(toString(a)); // 字符串true console.log(toString(b)); // 字符串2 console.log(toString(c)); // 空字符串 console.log(toString(d)); // 空字符串 console.log(toString(e)); // 字符串NaN console.log(toString(f)); // 字符串 {} console.log(toString(g)); // 字符串 []