在字符串上使用toString方法是否有任何使用价值?

时间:2016-01-05 00:38:28

标签: javascript

我无法弄清楚toString方法在字符串上使用时可能有什么用处。字符串已经是一个字符串,就其本质而言,它返回字符串的值。

此...

console.log("Hello"); // => "Hello"
console.log(typeof "Hello"); // => string

似乎与此完全一样......

console.log("Hello".toString()); // => "Hello"
console.log(typeof "Hello".toString()); // => string

如果toString将某些内容转换为字符串并将其值作为字符串返回,并且字符串是字符串并返回字符串的值,则我只能断定此方法完全没有意义。我错过了什么吗?

注意:“JavaScript中字符串文字和String对象之间的区别是什么?”“在字符串上使用toString方法是否有任何使用价值?”显然不是同一个问题所以我不认为这应该被视为重复。

2 个答案:

答案 0 :(得分:4)

可能存在误解。

字符串是原始值,也就是说,它们不是对象。因此他们没有方法。

但是,某些原始值可以包含在类似对象中。它是布尔,数字和字符串的情况。

当您尝试将这些原始值之一用作对象时,例如在调用方法时,会发生以下情况:

  1. 创建对象包装器(在本例中为字符串对象)
  2. 在该对象中读/写属性
  3. 对该对象的引用不存储在任何地方,因此它通常是垃圾回收
  4. 因此,是的,在字符串原语上使用toString方法通常是无用的,因为它只将它转换为引擎盖下的对象字符串,并且该方法将字符串对象转换回字符串原语。

    但是,当你有一个字符串对象时,情况就不是这样,因为你可能想把它转换成一个字符串原语:

    var obj = new String('hello');
    typeof obj; // 'object'
    var str = obj.toString();
    typeof str; // 'string'
    

    在字符串原语上使用toString的情况是用自定义函数替换它时(不推荐):

    String.prototype.toString = function() { return '[' + this + ']' };
    'hello'.toString(); // "[hello]"
    

答案 1 :(得分:0)

String对象和String literal是两回事。在这里阅读更多相关信息: What is the difference between string literals and String objects in JavaScript?