- 首先,会调用 valueOf 方法,如果方法的返回值是一个基本数据类型,就返回这个值,
- 如果调用 valueOf 方法之后的返回值仍旧是一个复杂数据类型,就会调用该对象的 toString 方法,
- 如果 toString 方法调用之后的返回值是一个基本数据类型,就返回这个值,
- 如果 toString 方法调用之后的返回值是一个复杂数据类型,就报一个错误。
解析:
// 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