如何实现toString将数字转换为字符串?

时间:2016-09-26 19:24:29

标签: javascript string numbers tostring

在面试中我被要求实施toString()将数字转换为字符串。

toString() n => s 123 => "123"

除了:

  • 通过连接空字符串来转换数字 123+""
  • 使用原生toString()功能 (123).toString()
  • 创建一个新字符串 String(123)

如何在javascript中实现toString()

4 个答案:

答案 0 :(得分:1)

您可以将它用作对象的属性名称。

function toString(value) {
  // Coerces value to a primitive string (or symbol)
  var obj = {};
  obj[value] = true;
  return Object.getOwnPropertyNames(obj)[0];
}
console.log(toString(123));  // 123      -> "123"
console.log(toString(1.23)); // 1.23     -> "1.23"
console.log(toString(NaN));  // NaN      -> "NaN"
console.log(Infinity);       // Infinity -> "Infinity"
console.log(toString(-0));   // -0       -> "0"
console.log(toString(1e99)); // 1e99     -> "1e+99"

您还可以使用DOM属性:

var obj = document.createElement('div');
obj.setAttribute('data-toString', value);
return obj.getAttribute('data-toString');

或加入数组

return [value].join();

还有一个很大的例子。在内部使用ToString抽象操作有很多东西。

答案 1 :(得分:0)

这里的诀窍是将数字视为一系列数字。这不是数字的固有属性,因为我们使用的基数10表示是非常随意的。但是,一旦数字表示为一系列数字,就可以很容易地将每个数字单独转换为字符串,并连接所有这些字符串。

编辑:正如所指出的,这只考虑整数(这对于面试问题可能是可以接受的)。

var intToDigits = function(n) {
    var highestPow = 1;
    while (highestPow < n) highestPow *= 10;
    var div = highestPow / 10;

    // div is now the largest multiple of 10 smaller than n

    var digits = [];

    do {
        var digit = Math.floor(n / div);
        n = n - (digit * div);
        div /= 10;
        digits.push(digit);
    } while (n > 0);

    return digits;
};

var toString = function(n) {
    var digitArr = intToDigits(n);
    return digitArr.map(function(n) {
        return "0123456789"[n];
    }).join('');
};

用法:

>> toString(678)
"678"

答案 2 :(得分:0)

这适用于整数。它取模数为10并重复除以10,然后将数字加48,并使用String.fromCharCode得到数字的字符串值,然后加入所有数据。

function toString(n){
  var minus = (n < 0
      ? "-"
      : ""),
    result = [];
  n = Math.abs(n);
  while(n > 0){
    result.unshift(n % 10);
    n = Math.floor(n / 10);
  }
  return minus + (result.map(function(d){
    return String.fromCharCode(d + 48);
  })
    .join("") || "0");
}

console.log(toString(123123));
console.log(toString(999));
console.log(toString(0));
console.log(toString(-1));

答案 3 :(得分:-1)

如果您使用的是ES6,则可以使用template literals

var a = 5;
console.log(`${a}`);