参与运算的都是简单类型(一般就字符串和数字), 复杂类型是不参与运算的.

***当对象(非简单类型)用作键时,会先调用toString()方法把对象转化成字符串

var a = {},
     b = {key: 'b'},
     c = {key: 'c'};
a[b] = 123;
a[c] = 456;
console.log(a[b]); // 456

结果会输出456. 为什么呀。 看下控制台就知道了。因为作何对象用作key时,解析器会先把对象转化成string。

而对象{}会被转换成字符串[object Object] a[b] = 123 就相当于 a["[object Object]"] = 123;

 b = {toString:()=>{return 5}};

  a[b] = 100;

  console.log(a[5]);    // 100

***当对象(非简单类型)用作值时,会先调用valueOf()方法,把对象转化成简单类型

  b = {valueOf: ()=>{return 10}};

 console.log(b + 10);   // 20

 console.log([] == false);  // true 

 []的valueOf()就是[]的toString();

console.log([].toString() == "");   // true

如果没有valueOf()方法,或者valueOf()方法不能把对象转化成简单类型,则使用toString()返回的字符串参与运算

b = {toString: ()=>{return "aaaa"});

console.log(b + 1); // aaaa1

  

相关文章:

  • 2022-03-03
  • 2022-01-24
  • 2022-12-23
  • 2021-08-11
  • 2021-09-24
  • 2021-04-18
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-08-31
  • 2022-12-23
  • 2022-01-19
  • 2022-02-22
  • 2022-12-23
相关资源
相似解决方案