toString()方法

要把一个值转换为一个字符串,最常用的就是,使用几乎每个值都有的toString()方法,这个方法唯一要做的就是返回相应值的字符串表现。

数值、布尔值、对象和字符串值(没错,每个字符串也都有一个toString()方法,该方法返回字符串的一个副本)都有toString()方法。但nullundefined值没有这个方法。因此在对一个变量进行了toString()后,如果变量为null或者undefined的时候就会报错。

多数情况下,调用toString()方法不必传递参数。但是,在调用数值的toString()方法时,可以传递一个参数:输出数值的基数。默认情况下,toString()方法以十进制格式返回数值的字符串表示。而通过传递基数,toString()可以输出以二进制、八进制、十六进制,乃至其他任意有效进制格式表示的字符串值。

var num = 10;
// "10"
alert(num.toString());
// "1010"
alert(num.toString(2));
// "12"
alert(num.toString(8));
// "10"
alert(num.toString(10));
// "a"
alert(num.toString(16));

通过这个例子可以看出,通过指定基数,toString()方法会改变输出的值。而数值10根据基数的不同,可以在输出时被转换为不同的数值格式。注意,默认的(没有参数的)输出值与指定基数10时的输出值相同。

valueOf()方法

说实话这个方法存在感很低,在JS中对数据进行字符串转型,通常都用toString()方法,或者直接在变量后面加上空字符串。valueOf()方法的返回值通常与toString()都是一样的。但是,在Object上,他们两个表现出了截然不同的形式,在对一个对象类型(Object、Array)进行valueOf()时,valueOf()直接返回原对象,而toString()则返回[object Object]在《JavaScript高级程序设计(第三版)》中,作者说valueOf()返回与toString()相同的值,即对Array调用valueOf()返回字符串表现形式,我在多个现代浏览器中(Chrome、Egde)和IE8文档模式下测试均返回原数组对象。所以看到这里的读者要注意了,书中部分内容到现在可能并不准确了。

var a = { "a":"123", "b": "456" };
// Object {a: "123", b: "456"}
a.valueOf()
// [object object]
a.toString()

对于数组也一样

var b = [1,2,3,45,6];
// (5) [1, 2, 3, 45, 6]
b.valueOf()
// 1,2,3,45,6
b.toString()

String()方法

在不知道要转换的值是不是nullundefined的情况下,还可以使用转型函数String(),这个函数能够将任何类型的值转换为字符串。String()函数遵循下列转换规则:

  • 如果值有toString()方法,则调用该方法(没有参数)并返回相应的结果;

  • 如果值是null,则返回"null";

  • 如果值是undefined,则返回"undefined"。

toString()与String()的区别就在于String()还能转换nullundefined值,可以说是toString()的增强版。在开发中直接使用String()似乎更好,这样能避免潜在的转换风险。

文章首发于我的微信公众号,关注可获得每次最新推送


《JavaScript高级程序设计》笔记之一

JS的String()、toString()、valueOf()的一些隐秘特性的更多相关文章

  1. JS中 toString() & valueOf()

    数据的转换 所有对象继承了两个转换方法: 第一个是toString(),它的作用是返回一个反映这个对象的字符串 第二个是valueOf(),它的作用是返回它相应的原始值 toString() toSt ...

  2. js中的toString和valueOf

    数据的转换 基本上,所有JS数据类型都拥有valueOf和toString这两个方法,null除外.它们俩解决javascript值运算与显示的问题 所有对象继承了两个转换方法: 第一个是toStri ...

  3. js函数--关于toString和valueOf

    js函数--关于toString和valueOf 标签(空格分隔): JavaScript 今天看到一个试题,实现如下语法的功能: var a = add(2)(3)(4); //9 这个就是一个高阶 ...

  4. 原生JS:String对象详解

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  5. JS中令人发指的valueOf方法介绍

    彭老湿近期月报里提到了valueOf方法,兴致来了翻了下ECMA5里关于valueOf方法的介绍,如下: 15.2.4.4 Object.prototype.valueOf ( ) When the ...

  6. 关于toLocaleString(), toString(), valueOf()方法的使用

    所有对象都是具有toLocalString(), toString(), valueOf()三种方法的,此篇博客主要是讲述其在Array引用类型上的使用. 基本使用 调用valueOf()返回的是数组 ...

  7. js实现String.Fomat

    引言 拼接字符串用习惯了C#的String.Format.今天看别人的代码在js中也封装了一个js的String.Format,用来拼接字符串和DOM. js实现和调用String.Format St ...

  8. js中的tostring()方法

    http://blog.sina.com.cn/s/blog_85c1dc100101bxgg.html js中的tostring()方法 (2013-11-12 11:07:43) 转载▼ 标签: ...

  9. JavaScript基础13——js的string对象

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

随机推荐

  1. Linux - ubuntu下Vim安装失败,报The following packages have unmet dependencies: vim : Depends: vim-common

    错误命令行 root@ubuntu:/etc/apt# apt install vim Reading package lists... Done Building dependency tree R ...

  2. find的基本查询命令《一》

    一. find的基本查询命令 find命令最常用的是查找某个文件,如: find ./ -name "abc.txt" 则会在当前目录及子目录下查找abc.txt文件 更常用的是查 ...

  3. spring官方为什么放弃spring social项目及替代方案

    spring social 1.6之后官方不在维护该项目, spring boot 2.x之后也不在提供spring social的 Autoconfiguration. 原因: https://sp ...

  4. JQUERY滚动加载

    $(document).height():整个网页的高度$(window).height():浏览器可视窗口的高度$(window).scrollTop():浏览器可视窗口顶端距离网页顶端的高度(垂直 ...

  5. C++语言实现链式栈

    在之前写的C语言实现链式栈篇博文中,我已经给大家大概介绍了关于链式栈的意义以及相关操作,我会在下面给大家分享百度百科对链式栈的定义,以及给大家介绍利用C++实现链式栈的基本操作. 百度百科链式栈 链式 ...

  6. STC15F2K60S2串口通信的应用。

    前言:由于不可抗拒因素,初始的STC12C5A60S2芯片由于无法进行烧录(...因为没带有锁紧座的开发板),暂且使用STC15F2K60S2芯片.. 一 串行通信概述: 串口通信有SPI IIC U ...

  7. 钩子函数 Function类

    Function 为 com.google.common.base包下接口类: public interface Function<F, T> { @Nullable T apply(@N ...

  8. shell命令(一)

    什么是shell? Shell是一个应用程序,它连接了用户和Linux内核,让用户能够更加高效.安全.低成本地使用Linux内核,这就是Shell的本质. shell与Linux系统关系图 shell ...

  9. lambda表达式,及lambda简化过程

    lambda表达式(jdk8特性) 1.为什么要用lambda表达式 原因:因为我们有时候需要用到很多类,但是,这些类我们只用一次或者两次,所以我们用匿名内部类,但是匿名内部类多了还是很麻烦,所以用l ...

  10. PHP代码审计(初级篇)

    一.常见的PHP框架 1.zendframwork: (ZF)是Zend公司推出的一套PHP开发框架 功能非常的强大,是一个重量级的框架,ZF 用 100%面向对象编码实现. ZF 的组件结构独一无二 ...