valueOf函数详解

在类型转换中,经常用到方法valueOf()toString(),所有对象(包括基本包装类型)都拥有这两个方法。这篇文章我们先看看valueOf()方法。valueOf()方法会将对象转换为基本类型,如果无法转换为基本类型,则返回原对象。

【1】基本包装类型——Boolean型

   var obj = new Boolean(true);
   console.log(obj.valueOf());//true
   console.log(typeof obj.valueOf());//boolean
   //如果是包装类型的基本类型,则返回原基本类型值
    var a = true;
   console.log(a.valueOf());//true
   console.log(typeof a.valueOf());//boolean

如果是基本包装类型对应的基本类型,会返回原值。但这并不代表基本类型拥有valueOf()方法(基本类型不是对象,不拥有任何方法),而是在读取一个基本类型值时,后台会创建一个对应的基本包装类型的对象,从而调用一些方法。所以,基本类型“调用”valueOf()方法时,实际上是先创建了一个对应的基本包装类型,由此基本包装类型调用valueOf(),最后返回了其对应的基本类型,看起来就好像是基本类型调用了valueOf()方法而得到了原始值。

【2】基本包装类型——String型

   var obj = new String("hello");
   console.log(obj.valueOf());//hello
   console.log(typeof obj.valueOf());//string
   //如果是包装类型的基本类型,则返回原基本类型值
   var a = "hello";
   console.log(a.valueOf());//hello
   console.log(typeof a.valueOf());//string

同【1】,String基本包装类型和基本类型调用valueOf()方法都返回对应的基本类型

【3】基本包装类型——Number型

   var obj = new Number("123");
   console.log(obj.valueOf());//123
   console.log(typeof obj.valueOf());//number
   //如果是包装类型的基本类型,则返回原基本类型值
    var a = 123;
   console.log(a.valueOf());//123
   console.log(typeof a.valueOf());//number

同【1】,Number基本包装类型和基本类型调用valueOf()方法都返回对应的基本类型。
注意,如果直接用整数调用时,要加上括号,否则会报错。因为整数后面的点会识别为小数点。浮点型不会报错。

   console.log(123.valueOf());//Uncaught SyntaxError
   console.log((123).valueOf());//123
   console.log(12.3.valueOf());//12.3

【4】数组Array类型(返回原数组)

   var a = [1];
   console.log(a.valueOf());//[1]
   console.log(a === a.valueOf());//true

【5】函数Function类型(返回原函数)

   var a = function(){};
   console.log(a.valueOf());//function(){};
   console.log(a === a.valueOf());//true

【6】正则RegExp类型(返回原正则对象)

   var a = /a/g;
   console.log(a.valueOf());///a/g
   console.log(a === a.valueOf());//true

【7】对象Object类型

   var obj = {a:1};
   console.log(obj.valueOf());//Object{a:1}
   console.log(obj === obj.valueOf());//true

【8】Date类型(返回表示当前时间的数值)

   var obj = new Date();
   console.log(obj);//Wed May 10 2017 12:19:05 GMT+0800 (中国标准时间)
   console.log(obj.valueOf());//1494389910179
   console.log(obj === obj.valueOf());//false
   console.log(obj.getTime() === obj.valueOf());//true

小结:

  1. undefined和null没有此方法(基本类型肯定没有方法,String、Number和Boolean是因为有对应的基本包装类型,才可以调用方法);

  2. 基本包装类型和对应的基本类型,调用valueOf()返回对应的基本类型值;

  3. 对象类型(除Date类型)返回原对象;

  4. Date类型返回表示日期的毫秒数

参考这位博主的文章

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,270评论 0 4
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,937评论 18 139
  • 我文笔不好,第一次通过这种形式写点什么!昏暗的灯光洒在桌子上,外面的小雨淅淅沥沥!没有带伞出门的我竟藏身在KFC一...
    你微笑了吗阅读 164评论 0 0
  • 江村夜归 项斯 月落江路黑,村前人语稀。 几家深树里,一火夜漁归。 项斯,字子迁,晚唐诗人。年轻时曾筑草庐与朝阳...
    艾迪哥阅读 1,748评论 2 7
  • 我从未感觉到人生能有一天有着这样飞一样的速度。 我现在仍记得高考的那天,我低低的扎着马尾,穿着绿色格子衬衣和浅蓝色...
    辛辛辛烷阅读 943评论 8 6