JavaScript引用类型之Array数组的toString()和valueof()方法的区别

一、转换方法

1、在JavaScript中几乎所有对象都具有toLocaleString()、toString和valueof()方法,因为,所有的对象都继承自Object,而前面所说的方法都是Object的方法!

所以数组也有toString()方法,其中调用数组的toString()方法会返回由数组中每个值的字符串形式拼接而成的一个以逗号分割的字符串。代码如下:

var colors=["red","blue","green"];
alert(colors.toString()); //输出:red,blue,green
alert(colors.valueOf());  //输出:red,blue,green
alert(colors);            //输出:red,blue,green

第一行alert()显示的调用了toString()方法,以便返回数组的字符串变现形式,每个值的字符串表示拼接成了一个字符串,中间用逗号分隔!

第二行alert()调用了valueof()方法,返回的还是数组的字符串形式

第三行alert()要接收字符串参数,而第三行传给alert是一个数组,所以,alert会在后台调用toString()方法,在输出数组的字符串类型

2、toString()方法:返回对象的字符串表示。

操作

Array

将 Array 的元素转换为字符串。结果字符串由逗号分隔,且连接起来。

Boolean

如果 Boolean 值是 true,则返回 “true”。否则,返回 “false”。

Date

返回日期的文字表示法。

Error

返回一个包含相关错误消息的字符串。

Function

返回如下格式的字符串,其中 functionname 是被调用 toString 方法函数的名称: function functionname( ) { [native code] }

Number

返回数字的文字表示。

String

返回 String 对象的值。

默认

返回 “[object objectname]”,其中 objectname 是对象类型的名称。

3、valueOf()方法:返回指定对象的原始值。

返回值

Array

数组的元素被转换为字符串,这些字符串由逗号分隔,连接在一起。其操作与 Array.toString 和 Array.join方法相同。

Boolean

Boolean 值。

Date

存储的时间是从 1970 年 1 月 1 日午夜开始计的毫秒数 UTC。

Function

函数本身。

Number

数字值。

Object

对象本身。这是默认情况。

String

字符串值。

4、两者的不同点

共同点:在 JavaScript 中,toString()方法和valueOf()方法,在输出对象时会自动调用。

不同点:

(1)、二者并存的情况下,在数值运算中,优先调用了valueOf,字符串运算中,优先调用了toString。

代码如下:

var obj = {};
obj.valueOf = function()
{
    return 10;
}
obj.toString = function()
{
    return "return value";
}

var result = obj + 1; //var result = obj.valueOf() + 1;
alert(result);
alert(obj); //alert(obj.toString());

(2)返回值类型的差别:

toString一定将所有内容转为字符串

valueOf取出对象内部的值,不进行类型转换

(3)用途的差别:

valueOf专用于算数计算和关系运算

toString专用于输出字符串

(3)共同的缺点

无法获取null和undefined的值

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏闪电gogogo的专栏

Python——正则表达式特殊符号及用法

由于正则表达式的内容比较多,所以单独写成一系列文章,主要内容是根据小甲鱼所讲的内容综合一下正则表达式的笔记。 贴上小甲鱼的《Python3 如何优雅地使用正则表...

21610
来自专栏锦小年的博客

python学习笔记7.3-内建模块collections

Python的内建模块collections为我们提供了一系列的优化操作,本质上就是元组、字典、集合、列表的特殊功能版。 1. namedtuple name...

2225
来自专栏浪淘沙

实训day04--二维数组,面向对象

2018.06.07 1.方法的签名 cn.edu360.function.Demo1.add(int ,int)

1083
来自专栏数据结构与算法

16:忽略大小写的字符串比较

16:忽略大小写的字符串比较 总时间限制: 1000ms 内存限制: 65536kB描述 一般我们用strcmp可比较两个字符串的大小,比较方法为对两个字符串...

3899
来自专栏大闲人柴毛毛

稳扎稳打JavaScript(二)——图解对象内存模型

1. 什么是JS对象? 在JS中,对象是一组无序属性的集合。其中,属性可以是基本数据类型、引用类型、函数。如下面这个对象的例子: var chai={ ...

4536
来自专栏机器学习算法与Python学习

python: 函数详解

def square(x): return x**2 >>> square <function square at 0x031AA230> >>> dir(sq...

5147
来自专栏python3

python 内置函数

基本的数据操作基本都是一些数学运算(当然除了加减乘除)、逻辑操作、集合操作、基本IO操作,然后就是对于语言自身的反射操作,还有就是字符串操作。

1232
来自专栏Java帮帮-微信公众号-技术文章全总结

【选择题】Java基础测试二(15道)

【选择题】Java基础测试二(15道) 11.对于构造方法,下列叙述正确的是:(AC) A. 构造方法的方法名必须与类名相同; B. 构造方法必须用void...

41210
来自专栏Laoqi's Linux运维专列

文件类型+变量+数值字符串

2096
来自专栏机器学习和数学

[编程经验] Python正则表达式

Hello,大家好。又见面了,今天给大家介绍一下,正则表达式在Python中是如何使用的。这样说的原因是正则表达式并不是Python所独有的,而是自成体系,在很...

2704

扫码关注云+社区

领取腾讯云代金券