以下为ChatGPT自动生成的解答,正确与否请自行判断。

BFE.devAI解答 - JavaScript 小测验
56. to primitive

输出为:

101
100
201
NaN
101
2
1001
1

解析:

  • case 1:对象 obj1 的 valueOf 方法返回数字 1,所以在执行 obj1 + 1 运算时会将 obj1 转化为数字再相加,故输出 101。而 parseInt 函数会先调用 obj1 的 toString 方法得到字符串值 '100',再将其解析成数字 100,所以输出 100。
  • case 2:因为对象 obj2 定义了 Symbol.toPrimitive 方法,所以在执行 obj2 + 1 运算时会优先调用该方法并得到返回值 200,再将其转化为数字相加,所以输出 201。parseInt 函数同 case 1 中考察的一样。
  • case 3:对象 obj3 没有定义 valueOf 方法,所以在执行 obj3 + 1 运算时会将 obj3 转化为字符串相加得到 '1001',所以输出 1001。而 + 运算符在操作时先尝试用 Number()函数将其转化为数字,因为字符串 '100' 能够被转化为数字 100,所以输出 100。parseInt 函数同 case 1 中考察的一样。
  • case 4:对象 obj4 没有定义 toString 方法,所以在执行 obj4 + 1 运算时会将 obj4 转化为数字再相加,由于其 valueOf 方法返回数字 1,所以输出 2。parseInt 函数同 case 1 中考察的一样。
  • case 5:对象 obj5 定义了 Symbol.toPrimitive 方法,当 hint 参数为 'string' 时返回字符串 '100',当 hint 参数为 'number' 或没有参数时返回数字 1。所以在执行 obj5 + 1 运算时因为参数为数字,所以会先调用 valueOf 方法,由于其没有定义 valueOf 方法,所以会再调用 Symbol.toPrimitive 方法得到返回值 1,再将其转化为数字相加,故输出 101。parseInt 函数同 case 1 中考察的一样。