1.对象遇运算符

转化规律是:

1)先调用自身的valueOf()方法,是原始数据, 返回,否则2);

2)再调用自身的toString()方法,如果不是原始数据,Uncaught TypeError;

有一个特例:Date对象相反,先调用toString(),后调用valueOf()。

var obj = {
    valueOf(){ return 5; },
    toString() { return 'hello'; }
}
1 + obj; //  6;
"1" + obj; //  "15"

2. 原始数据遇运算符

转化规律:

1)如果运算符要求是数值,调用valueOf();

2) 如果运算符要求是字符串,调用toString();

3) 如果既可以是字符串也可以是数值,优先调用valueOf();

// 布尔值的示例
(true).valueOf(); // 1
(true).toString(); // "true"

1+true; // 2
"1" + true; // 1true

3. String()工具函数遇对象

转化规律:

1)先调用toString(),判断是否返回原始数据;如果是,结束,否则2)

2)调用valueOf()

var obj = {
    valueOf(){ return 5; },
    toString() { return 'hello'; }
};
String(obj); // "hello"

4. Number()工具函数遇对象

转化规律:

1)先调用valueOf()方法,如果返回原始数据,结束;否则2)

2)调用toString()方法

var obj = {
    valueOf(){ return 5; },
    toString() { return 'hello'; }
};
Number(obj); // 5
02-14 02:44