首先,String()和toString()方法都是将其它类型的变量转换为字符串的方法。但两者存在一定的区别:
x.toString(): 无法转换null和undefined:
来看下面的小例子:
var a=123;
var b=true;
var c;
var d=null;
console.log(a.toString());
console.log(b.toString());
console.log(c.toString());
console.log(d.toString());
运行上面的代码我们得到下面的结果:
123
1
Uncaught TypeError: Cannot read property 'toString' of undefined(…)
Uncaught TypeError: Cannot read property 'toString' of null(…)
通过上面的答案我们不难看出第一行和第二行都是有输出结果的分别为"123"和"1",如果不能确定该结果是否为string类型的我们可以使用typeof()方法来查看数据的类型,该方法返回值为数据类型的关键字。
var b=123;
typeof(b.toString());//返回结果为"string"
第三行的运行结果报错了,Uncaught TypeError: Cannot read property 'toString' of undefined(…)这句话的意思为:未捕获:无法读取属性的toString定义,也就是说我们对于c这个变量没有赋值,不能找到该值,所以不能转换。
同样的第四行代码也是出错的,Uncaught TypeError: Cannot read property 'toString' of null这句话的意思未捕获TypeError:无法读取属性的toString null,意思为类型为null的变量不能应用该方法。
为了解决上面的为题我们自己重写toString()方法,代码如下:
function String(x){
if(x===undefined){
return "undefined";
}else if(x===null){
return "null";
}else{
return x.toString();
}
}
通过上面的代码我们很好的规避了刚才发生错误的两个地方。
下面我们来看String()方法:
var a=123;
var b=true;
var c;
var d=null;
console.log(String(a));
console.log(String(b));
console.log(String(c));
console.log(String(d));
运行上面代码我们不难得到下面的四个值:
123
true
undefined
null
通过相同代码的比较,我们可以得出String()方法较toString()方法应用范围上要更加广泛。