JS中的toString()用法

2016年09月05日Web前端

toSting()方法,在JS中是一个十分常见的方法,因为所有的对象(除了null)都有这个方法(因为他是Object原型上的方法)。他最常用的功能就是将表达式的值转化为字符串,其实,这个方法不止是这个功能,还有其他多种多样的用法。

1.number转进制数

var num1 = 123;
num1.toString();   // '123' 转变成十进制的字符串
123.toString();    // Uncaught SyntaxError,哈哈报错了,有没有直接使用的方法呢,当然有
123..toString();   // '123'
123 .toStrimg();   // ‘123’ (有空格)

这似乎是最常见的方法。当我们需要将一个数值转换成2进制或8进制的时候怎么办?自己写个函数?其实不用。

3..toString(2)    //  '11'  二进制11
11..toString(8)   //  '13'  八进制13
12..toString(16)  //  'c'  十六进制12

这种情况下,进制转变就变得容易多了。 注:括号中的底数在2-36之间。

2.用于判断变量类型

在JS中,我们有typeof可以用来判断基本类型的变量,

typeof 123    // "number"
typeof '123'  // "string"

可是遇到以下这种情况的话,typeof方法就没有什么用武之地了,

typeof []   //  'object'
typeof {}   //  'object'
typeof new Number(11)   //  'object'  这也是为什么创建基本类型变量时,不推荐用这种方法

此时,toString()就能够胜任这个任务了。 我们可以这样采用这个方法:

Object.prototype.toString.call([])                  // "[object Array]"
Object.prototype.toString.call({})                  // "[object Object]"
Object.prototype.toString.call(new Date)            // "[object Date]"
Object.prototype.toString.call(new Number(3423))    // "[object Number]"

这种情况下,类型十分清晰,将这两种情况合成,我们可以新创一个Typeof函数,来判断所有类型的变量。

function Typeof(arg1) {
    if (typeof arg1 != 'object') {
        return typeof arg1;
    } else {
        return Object.prototype.toString.call(arg1).slice(8, -1).toLowerCase();
    }
}

使用Typeof函数,就可以检测任何类型的变量了。

3.其他

当数组使用该方法时,会打印该数组中的值。

var arr = [1, 2, 3, 4];
arr.toString()          // "1,2,3,4"

当布尔类型的调用该方法,会返回含布尔值的字符串

var bool = false;
bool.toString()         //  'false'

当undefined调用时,会有个报错

var a = undefined;
a.toString();           // Uncaught TypeError
(a + '').toString()     // 'undefined'

当null调用时也会报错

var a = null;
a.toString();           // Uncaught TypeError
(a + '').toString()     // 'null'

当函数调用时,会打印整个函数的字符串形式

var fn = function() {
    console.log();
}
fn.toString()       // "function () {
                    //  console.log();
                    // }"

当日期对象调用时,会打印当前时间

var time = new Date();
time.toString()         // "Mon Sep 05 2016 18:57:24 GMT+0800 (中国标准时间)"

综上,当null和undefined以及数字时会报错,所以兼容的方法就是

(a + '').toString()

这样的话,就不会出现报错现象了。