Единственное действительное решение для почти всех возможных существующих и будущих случаев (входные данные являются числом, нулем, неопределенным, символом, чем-либо еще) - String(x)
. Не используйте 3 способа для простой операции, основываясь на предположениях типа значения, таких как «здесь я определенно преобразую число в строку и здесь определенно логическое значение в строку».
Пояснение:
String(x)
обрабатывает нули, неопределенные символы, [что угодно] и вызывает .toString()
для объектов.
'' + x
вызовы .valueOf()
на x (приведение к номеру), броски на символы, могут обеспечить результаты, зависящие от реализации.
x.toString()
бросает в ноль и неопределенный.
Примечание: String(x)
по-прежнему не будет работать на объектах без прототипов, таких как Object.create(null)
.
Если вам не нравятся строки типа «Hello, undefined» или вы хотите поддерживать объекты без прототипов, используйте следующую функцию преобразования типов:
/**
* Safely casts any value to string. Null and undefined are converted to ''.
* @param {*} value
* @return {string}
*/
function string (str) {
return value == null ? '' : (typeof value === 'object' && !value.toString ? '[object]' : String(value));
}