作用

toString()的作用是返回一个反映这个对象的字符串;

valueOf()的作用是返回它相应的原始值;

异同点

共同点:在 JavaScript 中,toString()方法和valueOf()方法,在输出对象时会自动调用
不同点:二者并存的情况下,在数值运算中,优先调用了valueOf,字符串运算中,优先调用了toString。

js中的Date, Array, Number, Boolean, Function等访问实例的toSting方法和valueOf方法,都会返回不同的东西。自己可以试一试哦,毕竟实践才是检验真理的唯一标准!

刚突发奇想,想到一个日期方面的应用。

let today = new Date();
console.log(today); // Mon Jul 15 2019 11:34:56 GMT+0800 (中国标准时间)
console.log(today.getTime()); //
console.log(today * 1); //

直接输出today,调用的是toString方法,返回了一个字符串。today * 1调用的是valueOf方法,可以发现利用这一点可以代替getTime方法,写起来更方便了。下面是一个验证

console.log(today.toString()); // Mon Jul 15 2019 11:34:56 GMT+0800 (中国标准时间)
console.log(today.valueOf()); //
console.log("Mon Jul 15 2019 11:34:56 GMT+0800 (中国标准时间)" * 1); // NaN

在日常生活中,现金中的应用。计算的时候是数字,显示的时候是特定的格式

class Cash{
constructor(val){
this.val = val;
}
static add(num1, num2){
return Cash.getVal(num1 + num2);
}
add(num){
return Cash.getVal(this.val + num);
}
static getVal(num){
let yuan = parseInt(num / 100);
let jiao = parseInt((num % 100) / 10);
let fen = num % 10;
return `${yuan}元${jiao}角${fen}分`;
}
// toString的作用是返回一个反映这个对象的字符串;
toString(){
return Cash.getVal(this.val);
}
// valueOf的作用是返回它相应的原始值;
valueOf(){
return this.val;
}
} const c1 = new Cash(105);
const c2 = new Cash(66);
const c3 = c1.add(c2);
const c4 = Cash.add(c1, c2);
const c5 = new Cash(c1 + c2);
console.log(`${c3}, ${c4}, ${c5}`);// 1元7角1分, 1元7角1分, 1元7角1

在这个例子中,Cash的实例是实例化的一个对象,但是却进行了加法运算(c1+c2),输出的时候却显示的是圆角分的格式。

希望看了这篇文章对你理解toString和valueOf有所理解。

toString和valueOf使得对象访问时显示一个特定格式的字符串,但是可以进行数字运算的更多相关文章

  1. 【转载】vue-cli搭建的环境,用nginx做代理服务器,访问时显示:Invalid Host header

    来源:https://blog.csdn.net/Cookysurongbin/article/details/86077241 vue-cli搭建的环境,用nginx做代理服务器,访问时显示:Inv ...

  2. 页面进行ajax时 显示一个中间浮动loading

    先发效果图,加载东西的时候如果没有设计或者其它提示会降低用户体验,所以写了个简单的loading弹层. 适用于触屏和pc页面. /* 页面进行ajax时 显示一个中间浮动loading @auther ...

  3. QT:窗口最小化时显示一个小浮标

    有些窗口在自身最小化时要在桌面上显示一个小浮标,让用户利用这个小浮标进行各种操作(例如迅雷的悬浮窗一样),我试着用QT实现一下这个功能. PS:本来以为这个功能很简单,却搞了我两个晚上,泪奔... 思 ...

  4. web页面过一段时间再次访问时显示数据库连接错误

    这个问题是我之前遇到的,过了很久才想着去解决它,因为这也没多大影响,无非就是再访问一次的问题,后来有一次观察网站的运行情况时,发现这个问题还挺严重,如果一直用,就不会出现问题,如果中间歇一会,再用就会 ...

  5. listview 没数据内容时显示一个提示文本

    listview和textview 1:1.listview无内容的时候本身是不显示的,所以textview会显示 getlistview获取系统定义的listview

  6. QC9.2登陆时显示一个X号

    这个是因为浏览器安全设置的问题,具体解决步骤如下: 进入“工具-Internet选项”设置窗口,进入“高级”选项卡,将“安全”设置中的“启用内存保护减少联机攻击”选项的勾选去掉,然后应用并确定.重启浏 ...

  7. v关于使用Glide加载图片失败时显示自己特定的图片

    Glide是Android加载图片的一个框架. 常用加载图片到imageView:Glide.with(this).load(url).into(ImageView imageview). 当加载失败 ...

  8. 显示器如何显示一个YUV422格式的图形

    记录在开发过程中对知识点的一些理解: 在开发渲染程序的过程中,需要对视屏文件进行解码解码后特效文件的叠加,使用的技术是(FFmpeg+DirectX) 解码出来的视屏数据格式是YUYV,使用Direc ...

  9. 一日一练-JS toString 和valueOf 方法的联系与区别

    子曰:类型转换中toString 和valueOf 的联系与区别分析 首先是看看ES5 的规范是如何进行说明的 在这里有几个基础知识点需要了解一下: [[Class]] [[Class]] 属于Obj ...

随机推荐

  1. LINUX设置SUID,SGID,Stick bit

    前面介绍过SUID与SGID的功能,那么,如何打开文件使其成为具有SUID与SGID的权限呢?这就需要使用数字更改权限了.现在应该知道,使用数字 更改权限的方式为“3个数字”的组合,那么,如果在这3个 ...

  2. JavaScript实现继承的方式和各自的优缺点

    ECMAscript只支持实现继承,主要是依靠原型链来实现的. JavaScript实现继承的方式: 类式继承 构造函数继承 组合继承 寄生组合式继承 1.类式继承 //类式继承 //声明父类 fun ...

  3. poj 1654 Area(求多边形面积 && 处理误差)

    Area Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 16894   Accepted: 4698 Description ...

  4. VMWare 下 Ubuntu 18.04 的文件共享

    突然某天发现 /mnt/hgfs 下共享的文件夹没了... apt-get install open-vm-tools mkdir /mnt/hgfs vmhgfs-fuse .host:/ /mnt ...

  5. JS倒计时-毫秒

    <!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" ...

  6. [jnhs]教训之jsp页面无法用jstl取值的坑.真他妈的奇葩,实体类的属性名不能用大写

    结果页面永远都是空 调试发现,数据正常的塞进去了 问题解决: https://zhidao.baidu.com/question/570584436.html 实体类的属性名,首字母不能大写,改成小写 ...

  7. update当根据条件不同时 更新同一个字段的方法 或多表插入

    1.通过存储过程 循环 传值 create or replace procedure p_u isbegin for rs in (select distinct (rks) from rkbz)lo ...

  8. 洛谷P1072 [NOIP2009] Hankson 的趣味题

    P1072 Hankson 的趣味题 题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现在,刚刚放学回家的 Hankson 正在思考一 ...

  9. TP5.1 首页路由

    把自带的return 删了

  10. JZOJ 平衡的子集

    Description 夏令营有N个人,每个人的力气为M(i).请大家从这N个人中选出若干人,如果这些人可以分成两组且两组力气之和完全相等,则称为一个合法的选法,问有多少种合法的选法? Input 第 ...