资讯专栏INFORMATION COLUMN

《javascript高级程序设计》笔记:valueOf() / toString() 对比

yzzz / 3326人阅读

摘要:中这样描述和调用方法用来把对象转换成原始类型的值数值字符串和布尔值。你很少需要自己调用此函数当遇到一种需要转换成一个原始值情况时候,会自动调用此函数。默认情况下会被每个对象继承。

MDN 中这样描述 valueOf()toString():

  JavaScript 调用 valueOf() 方法用来把对象转换成原始类型的值(数值、字符串和布尔值)。
你很少需要自己调用此函数;当遇到一种需要转换成一个原始值情况时候, JavaScript 会自动调
用此函数。

  默认情况下, valueOf() 会被每个对象Object继承。每一个内置对象都会覆盖这个方法为了返回
一个合理的值,如果对象没有原始值,valueOf() 就会返回对象自身;

  每个对象都有一个 toString() 方法,当对象被表示为文本值时或者当以期望字符串的方式引用
对象时,该方法被自动调用。默认情况下,toString() 方法被每个继承自Object的对象继承。如
果此方法在自定义对象中未被覆盖,toString() 返回 "[object type]",其中type是对象类型

简单的说:
valueOf()函数用于返回指定对象的原始值;
toString()函数用于返回指定对象的字符串;

对象 valueOf() 返回值 toString() 返回值
Number 数字值(number) 数字值(string)
String 字符串值 字符串值
Boolean 布尔值 字符串值
Object 对象本身 字符串值
Function 函数本身 字符串值
Date 以毫秒数存储的时间值(number) 标准时间输出(string)
// Number
var num = 15.26540,
    num2 = new Number(15.26540);
console.log( "valueOf", num.valueOf() === num ); // true number类型 
console.log( "toString", num.toString() === num );// false string类型
console.log( "valueOf", num2.valueOf() === num2 ); // false number类型 
console.log( "toString", num2.toString() === num2 );// false string类型
console.log( num.valueOf() === num.toString());// false
console.log( num2.valueOf() === num2.toString());// false

// String
var str = "abcd",
    str2 = new String("abcd");
console.log( "valueOf", str.valueOf() === str );// true string类型
console.log( "toString", str.toString() === str );// true string类型
console.log( "valueOf", str2.valueOf() === str2 );// false string类型
console.log( "toString", str2.toString() === str2 );// false string类型
console.log( str.valueOf() === str.toString());// true
console.log( str2.valueOf() === str2.toString());// true

// Boolean
var bool = true,
    bool2 = new Boolean(true);
console.log( "valueOf", bool.valueOf() === bool );// true string类型
console.log( "toString", bool.toString() === bool );// false string类型
console.log( "valueOf", bool2.valueOf() === bool2 );// false boolean类型
console.log( "toString", bool2.toString() === bool2 );// false string类型
console.log( bool.valueOf() === bool.toString());// false
console.log( bool2.valueOf() === bool2.toString());// false

// Object
var obj = {name: "张三", age: 18};
console.log( "valueOf", obj.valueOf() === obj );// true object类型
console.log( "toString", obj.toString() === obj );// false string类型
console.log( obj.valueOf() === obj.toString());// false

// Function
var fn = function(){},
    fn2 = new Function("x", "y", "return x+y")
console.log( "valueOf", fn.valueOf() === fn );// true object类型
console.log( "toString", fn.toString() === fn );// false string类型
console.log( "valueOf", fn2.valueOf() === fn2 );// true object类型
console.log( "toString", fn2.toString() === fn2 );// false string类型
console.log( fn.valueOf() === fn.toString());// false
console.log( fn2.valueOf() === fn2.toString());// false

// Date
var date = new Date();
console.log( "valueOf", date.valueOf() );// 1501830320383 number类型
console.log( "toString", date.toString() );// Fri Aug 04 2017 15:05:45 GMT+0800 (中国标准时间) string类型
console.log( date.valueOf() === date.toString());// false

移步:valueOf() / toString()深入分析对比

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/84658.html

相关文章

  • JavaScript高级程序设计笔记:基本概念

    摘要:一写在前面最近重读高级程序设计,总结下来,查漏补缺。但这种影响是单向的修改命名参数不会改变中对应的值。这是因为对象的长度是由传入的参数个数决定的,不是由定义函数时的命名参数的个数决定的。实际改变会同步,改变也会同步 一、写在前面 最近重读《JavaScript高级程序设计》,总结下来,查漏补缺。 二、JS简介 2.1 JS组成 ECMAscript:以ECMA-262为基础的语言,由...

    ygyooo 评论0 收藏0
  • JavaScript高级程序设计》读书笔记

    摘要:为了每个对象都能通过来检测,需要以或者的形式来调用,传递要检查的对象作为第一个参数,称为。对象都是动态的,这就意味着每次访问对象,都会运行一次查询。是语言中立的用于访问和操作和文档。 一、第三章 基本概念: 1.理解参数 1.1 可以向函数中传递任意数量的参数,并且可以通过arguments对象来访问这些参数。 1.2 arguments对象只是类似数组,它通过length来确定传进来...

    dayday_up 评论0 收藏0
  • 读书笔记(06) - 语法基础 - JavaScript高级程序设计

    摘要:写在开头本篇是小红书笔记的第六篇,也许你会奇怪第六篇笔记才写语法基础,笔者是不是穿越了。可移步笔者的文章中替换方式参考文档高级程序设计作者以乐之名本文原创,有不当的地方欢迎指出。 showImg(https://segmentfault.com/img/bVblGMc?w=600&h=400); 写在开头 本篇是小红书笔记的第六篇,也许你会奇怪第六篇笔记才写语法基础,笔者是不是穿越了。...

    iOS122 评论0 收藏0
  • JS的String()、toString()、valueOf()的一些隐秘特性

    摘要:默认情况下,方法以十进制格式返回数值的字符串表示。注意,默认的没有参数的输出值与指定基数时的输出值相同。但是,在上,他们两个表现出了截然不同的形式,在对一个对象类型进行时,直接返回原对象,而则返回。 toString()方法 要把一个值转换为一个字符串,最常用的就是,使用几乎每个值都有的toString()方法,这个方法唯一要做的就是返回相应值的字符串表现。 数值、布尔值、对象和字符串...

    姘搁『 评论0 收藏0
  • javascript高级程序设计笔记:关系运算符与相等运算符

    摘要:要比较相等性之前,不能将和转换成其他任何值。如果有一个操作数是,则相等操作符返回,而不相等操作符返回。重要提示即使两个操作数都是,相等操作符也返回因为按照规则,不等于。 关系运算符 关系运算符有小于()、小于等于(=)四种,它们都返回一个布尔值 《javascript高级程序设计》书中的规则是这样描述运算规则: (1)如果两个操作数都是数值,则执行数值比较; (2)如果两个操作数都是字...

    Blackjun 评论0 收藏0

发表评论

0条评论

yzzz

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<