Я всегда преобразовывал числа в строки, добавляя к ним пустую строку:
var string = 1 + '';
Однако JSLint жалуется на этот метод с помощью Expected 'String' and instead saw ''''.
, и он выглядит немного уродливым.
Есть ли лучший способ?
Я всегда преобразовывал числа в строки, добавляя к ним пустую строку:
var string = 1 + '';
Однако JSLint жалуется на этот метод с помощью Expected 'String' and instead saw ''''.
, и он выглядит немного уродливым.
Есть ли лучший способ?
Я считаю, что одобренным JSLint способом является вызов .toString()
для числа:
var stringified = 1..toString();
// Note the use of the double .. to ensure the the interpreter knows
// that we are calling the toString method on a number --
// not courting a syntax error.
// You could also theoretically call 1["toString"];
(Извините, возможно, было бы лучше сказать это как комментарий выше, но я еще не получил право оставлять комментарии, поэтому...)
Помните, что jslint не просто проверяет, будет ли ваш JavaScript фактически запущен, он пытается обеспечить стиль кодирования с целью помочь вам создать более читаемый и поддерживаемый код.
Итак 1 + ''
работает, но не обязательно является наиболее читаемым вариантом для всех, в то время как явные варианты кастинга (см. другие ответы) должны быть доступны для всех. Конечно, если никто еще не увидит ваш код, вам нужно только беспокоиться о том, сможете ли вы это понять, если вернетесь к нему в следующем месяце или в следующем году...
Не забывайте, что следующие два утверждения не дают одинакового результата:
var s1 = 1 + 3 + ''; // gives '4'
var s2 = '' + 1 + 3; // gives '13'
Я предполагаю, что 1 + ''
является просто упрощением для обсуждения, или почему не просто использовать '1'
в первую очередь?
Вы можете использовать метод .toString()
следующим образом:
var num = 1;
var str = num.toString();
Там также (по крайней мере, в Chrome): String(1)
без new
.
var n = 1, s = String(n);
Я собираюсь сказать "ошибка" или "неправильная функция"
Cole. Рассмотрим, что
var x = "foobar" + 1;
является "одобренным" jslint. В любом случае это действительный Javascript на 100%.
Счастливое кодирование.
Для комментариев:
Вот почему я предпочитаю использовать строковый литерал в качестве первого операнда, поскольку это показывает намерение - знание языка является основополагающим для использования языка.
Единственное место, где задание утка - проблемы (в данном случае), - это выражение формы a + b
, где ни один из них не является строковым литералом. В этом случае a
(или b
) может оценивать строку, в которой ожидается, что она будет оцениваться числом (это приведет к конкатенации строк против ожидаемого числового добавления). Если какой-либо из операндов является строковым литералом, намерение четко определено/описано.
Эта конкретная "проблема", однако, отсутствует в опубликованном коде; и он не будет устранен с использованием toString
над строковым литералом.
По-моему, мы должны использовать String(number)
вместо number + ''
или number.toString()
, потому что
number + ''
приведет к ошибке JSLint
number.toString()
завершится с ошибкой, если number
- null
или undefined
, и у вас будет TypeError: number undefined/null
В последнее время JSLint находился в бета-версии. Новая версия больше не жалуется на этот код:
function convert(x) {
'use strict';
// alert(typeof x);
x = x + "";
// alert(typeof x);
return x;
}
convert(3);