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

作用

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()); // 1563161696274
console.log(today * 1); // 1563161696274

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

console.log(today.toString()); // Mon Jul 15 2019 11:34:56 GMT+0800 (中国标准时间)
console.log(today.valueOf()); // 1563161696274
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有所理解。

原文地址:https://www.cnblogs.com/zhaodesheng/p/11187992.html

时间: 2024-11-05 02:21:59

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

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

先发效果图,加载东西的时候如果没有设计或者其它提示会降低用户体验,所以写了个简单的loading弹层. 适用于触屏和pc页面. /* 页面进行ajax时 显示一个中间浮动loading @auther: LM @date: 2015-6-10 @rely: html5触屏 @fun: LM_loading.show(); //显示 @fun: LM_loading.hide(); //隐藏 */ (function(window){ var LM_loading = { Timmer:null,

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

listview和textview 1:1.listview无内容的时候本身是不显示的,所以textview会显示 getlistview获取系统定义的listview 原文地址:https://www.cnblogs.com/znsongshu/p/9344620.html

显示器如何显示一个YUV420格式的图形

记录在开发过程中对知识点的一些理解: 在开发渲染程序的过程中,需要对视屏文件进行解码解码后特效文件的叠加,使用的技术是(FFmpeg+DirectX) 解码出来的视屏数据格式是YUYV(YUV420),使用DirectX的创建的纹理格式为RGBA, (1):视屏的宽高分别为Width和Height,则视屏最后在显卡中显示为RGBA的缓存大小:Width*4*Height. (2):FFmpeg解码为YUYV格式的缓存大小为:Width*2*Height,因为每个像素采样一个Y,每两个像素采样一个

对【面向对象的类访问和对象访问的区别【this以及类访问】、静态成员的访问区别、类常量等、继承和重写、访问修饰限定符、冒泡排序】的总结

面向对象的总结1.首先面向对象的编程使用的都是使用对象作为处理对象而言[例如继承等情形,继承的本质来说,依旧针对的是对象]但是只有针对类的访问.静态成员以及访问修饰限定符时,针对的是类的概念 2.类内定义时,只有五种情形:类常量[const关键字定义并且使用类来调用]属性[这些属性和方法是针对该类实例的对象来调用]方法[在这种情形下使用$this进行指代作用环境(调用该方法的对象),只有继承中,子类实例的对象会向下传递到静态调用里]静态属性[用来作为实例该类的所有对象之间共享的数据.保存在类中]

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

子曰:类型转换中toString 和valueOf 的联系与区别分析 首先是看看ES5 的规范是如何进行说明的 在这里有几个基础知识点需要了解一下: [[Class]] [[Class]] 属于Object 的内部属性,值的类型返回为String,其作用是,说明规范定义的对象分类的一个字符串值. ES5 规范的每种内置对象都定义了[[Class]] 内部属性值.宿主对象的[[Class]] 内部属性值可以是除了"Arguments". "Array". "

asp.net中ashx生成验证码代码放在Linux(centos)主机上访问时无法显示问题

最近有个项目加入了验证码功能,就从自己博客以前的代码中找到直接使用,直接访问验证码页面报错如下: 源代码:asp.net中使用一般处理程序生成验证码 Application Exception System.ArgumentException The requested FontFamily could not be found [GDI+ status: FontFamilyNotFound] Description: HTTP 500.Error processing request. De

绑定网关IP和MAC地址时显示“ARP项添加失败:拒绝访问”的处理方法

绑定网关IP和MAC地址时显示"ARP项添加失败:拒绝访问" Win7系统,用arp -s命令在绑定网关IP和MAC地址时,总是提示 ARP 项添加失败: 拒绝访问.( 用管理员身份运行cmd也无效.)未找到原因. 后来google找到了另一个命令,搞定! 具体操作如下: 1.CMD中输入: netsh i i show in 然后找到本地连接对应 我的是Win7系统,今天用arp -s命令在绑定网关IP和MAC地址时,总是提示"ARP 项添加失败: 拒绝访问."(

js对象tostring和valueof方法

所有对象继承了Object.prototype的两个转换方法: 第一个是toString(),它的作用是返回一个反映这个对象的字符串; 第二个是valueOf(),它的作用是返回它相应的原始值; 但一些内置对象重写了这两个方法,下面展示了一些内置对象调用这两个方法的返回情况. 类型 toString valueOf Object 返回"[object ObjectName]",其中 ObjectName 是对象类型的名称. 对象本身.这是默认情况. String 返回 String 对

Code First迁移数据库时发现在的问题“由于一个或多个对象访问此列”

在执行Update-Database 提示 ClientConnectionId:f7a284b8-411c-406c-98aa-abaacd37eb88 对象'DF__BaiKe_Tit__IsDel__7720AD13' 依赖于 列'IsDelete'. 由于一个或多个对象访问此列,ALTER TABLE ALTER COLUMN IsDelete 失败. 解决方法有两种 第一种:在MSSMS里面找到该表直接删除约束即可 第二种: alter table TableName drop con