javascript之彻底理解valueOf, toString

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

***当对象(非简单类型)用作键时,会先调用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

  

原文地址:https://www.cnblogs.com/honghong87/p/6010689.html