版权声明:转载-复用,请联系博主微信:qiang510939237 https://blog.csdn.net/qiang510939237/article/details/88131019
// 对象在参与运算及比较的时候,js引擎会自动的帮我们去调用这两个方法.
// 调用规则:
// 1. 默认先调用valueOf方法(valueOf 来源于 Object的原型),尝试把对象转成简单数据类型,
2. 如果没有得到简单数据类型,再继续去调用toString方法
// 作用: 将对象转成原始值(简单数据类型),但是Object原型上的valueOf达不到目的, 把对象自身给返回了
/* var arr = [1,2,3];
console.log(arr + 1); // 1,2,31
// arr.valueOf() ==> arr
// arr.toString() ==> "1,2,3"
// "1,2,3" + 1 ==> "1,2,31"
console.log(arr - 0); // NaN
// "1,2,3" - 0
console.log(arr + "6班学习好努力"); // 1,2,36班学习好努力*/
// var obj = {
// name: "lw"
// };
// console.log(obj * 1); // NaN
// obj.valueOf() ==> obj
// obj.toString() ==> "[object Object]"
// "[object Object]" * 1
// console.log(obj + "1"); // [object Object]1
// console.log([] == ![]); // true
// [] == false ==> 都转数值进行比较
// [].valueOf() ==> []
// [].toString() ==> ""
// +"" ==> 0
// console.log({} == !{});
// {} == false ==> 都转数值进行比较
// {}.valueOf() ==> {}
// {}.toString() ==> "[object Object]"
// +"[object Object]" ==> NaN (字符串转成数值 ===> NaN, 不是一个数字)
例1:
// var obj = {};
// console.log(obj.toString()); // "[objectObject]"
例2:
// var a = {},
// b = { key: 'b' };
// c = { key: 'c' };
// a[b] = 123;
// a[c] = 456;
// console.log(a[b]); //456
// 给如果对象的属性类型不是一个字符串时,就会去转换.
// js会自动让对象去调用这两个方法,默认先valueOf(),如果没有得到简单数据类型,再去调用toString()
// 其中对象a中的属性 b ==> "[object,Object]" ,等同于 给对象a,使用[]语法,去添加属性并赋值
// 再看对象a中的属性 c ==> "[object,Object]" ,等同于 修改同一个属性的属性值,所以最终的到的结果是456