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