Javascript valueOf 方法原理

本文将简单介绍下valueOf方法。

valueOf方法返回指定对象的原始值,如果对象存在原始值,那么返回原始值;如果对象是复合值,则返回对象本身。

1.字符串类型直接原始值返回;

'1'.valueOf(); // '1'
''.valueOf(); // ''
'abc'.valueOf(); // 'abc'

2.布尔值类型直接原始值返回;

true.valueOf(); // true
false.valueOf(); // false

3.数值类型稍微有点麻烦;

  • 对于整数来说,直接调用valueOf方法会报错,因为整数后面的点会被识别为小数点,加个括号就好。
  • 浮点数直接原值返回;
  • NaN、Infinity、-Infinity原值返回;

    0.valueOf(); // Uncaught SyntaxError: Invalid or unexpected token
    (0).valueOf(); // 0
    
    1.23.valueOf(); // 1.23
    
    NaN.valueOf(); // NaN
    Infinity.valueOf(); // Infinity
    -Infinity.valueOf(); // -Infinity

4. undefined和null;valueOf方法由Object后面的每个对象继承,所以undefined和null没有toString()方法,直接调用会报错哦。

undefined.valueOf(); // 错误
null.valueOf(); // 错误

5.复合类型的对象,返回原对象。

  • 对象Object类型;
    {}.valueOf() // 报错,Uncaught SyntaxError: Unexpected token '.'
    ({}).valueOf() // {}
  • 函数Function类型;
    // 自定义函数
    function func(){
        console.log('text');
    }
    func.valueOf(); /* function test(){
                          console.log('text');
                      }
                    */
    // 原生函数
    Object.valueOf() // Object() { [native code] }
    Function.valueOf() // Function() { [native code] }
  • 数组Array类型;
    [].valueOf(); // []
    [1, 2, 3].valueOf(); // [1, 2, 3]
    
    Array.valueOf(); //  Array() { [native code] }
  • 时间Date类型;
    Date(); // "Mon Jun 22 2020 17:51:31 GMT+0800 (中国标准时间)"
    Date().valueOf(); // "Mon Jun 22 2020 17:51:31 GMT+0800 (中国标准时间)"
    
    Date.valueOf(); // Date() { [native code] }
  • 正则RegExp类型返回原正则对象; 
    /xyz/i.valueOf(); // /xyz/i
    
    RegExp.valueOf(); // RegExp() { [native code] }
  • 错误Error类型;
    Error.valueOf(); // Error() { [native code] }

猜你喜欢

转载自blog.csdn.net/josavion/article/details/78843499