在面试中我被要求实施toString()
将数字转换为字符串。
toString()
n => s
123 => "123"
除了:
123+""
toString()
功能
(123).toString()
String(123)
如何在javascript中实现toString()
?
答案 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}`);