复杂数据类型如何转变为字符串
// 1;
var obj = {
valueOf: function() {
return 1;
}
};
console.log(obj + ""); //'1'
// 2;
var obj = {
valueOf: function() {
return [1, 2];
}
};
console.log(obj + ""); //'[object Object]';
// 3;
var obj = {
valueOf: function() {
return [1, 2];
},
toString: function() {
return 1;
}
};
console.log(obj + ""); //'1';
// 4;
var obj = {
valueOf: function() {
return [1, 2];
},
toString: function() {
return [1, 2, 3];
}
};
console.log(obj + "");
// 报错 Uncaught TypeError: Cannot convert object to primitive value
var arr = [new Object(), new Date(), new RegExp(), new String(),
new Number(), new Boolean(), new Function(), new Array(), Math]
for (var i = 0; i < arr.length; i++) {
arr[i].valueOf = function() {
return [1, 2, 3]
}
arr[i].toString = function() {
return 'toString'
}
console.log(arr[i] + '')
}
1、若 return [1, 2, 3]处为 return "valueof",得到的返回值是 valueof toString 7valueof 说明:其他八种复杂数据类型是先调用 valueOf 方法,时间对象是先调用 toString 方法
2、改成 return [1, 2, 3],得到的返回值是 toString 说明:执行 valueof 后都来执行 toString
来源整理自:vue3js.cn 面试官系列



