Подтвердить что ты не робот

Что такое одобренный JSLint способ преобразования числа в строку?

Я всегда преобразовывал числа в строки, добавляя к ним пустую строку:

var string = 1 + '';

Однако JSLint жалуется на этот метод с помощью Expected 'String' and instead saw ''''., и он выглядит немного уродливым.

Есть ли лучший способ?

4b9b3361

Ответ 1

Я считаю, что одобренным 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"];

Ответ 2

(Извините, возможно, было бы лучше сказать это как комментарий выше, но я еще не получил право оставлять комментарии, поэтому...)

Помните, что jslint не просто проверяет, будет ли ваш JavaScript фактически запущен, он пытается обеспечить стиль кодирования с целью помочь вам создать более читаемый и поддерживаемый код.

Итак 1 + '' работает, но не обязательно является наиболее читаемым вариантом для всех, в то время как явные варианты кастинга (см. другие ответы) должны быть доступны для всех. Конечно, если никто еще не увидит ваш код, вам нужно только беспокоиться о том, сможете ли вы это понять, если вернетесь к нему в следующем месяце или в следующем году...

Не забывайте, что следующие два утверждения не дают одинакового результата:

var s1 = 1 + 3 + ''; // gives '4'
var s2 = '' + 1 + 3; // gives '13'

Я предполагаю, что 1 + '' является просто упрощением для обсуждения, или почему не просто использовать '1' в первую очередь?

Ответ 3

Вы можете использовать метод .toString() следующим образом:

var num = 1;
var str = num.toString();

Ответ 4

Там также (по крайней мере, в Chrome): String(1) без new.

var n = 1, s = String(n);

Ответ 5

Я собираюсь сказать "ошибка" или "неправильная функция"

Cole. Рассмотрим, что

var x = "foobar" + 1;

является "одобренным" jslint. В любом случае это действительный Javascript на 100%.

Счастливое кодирование.


Для комментариев:

Вот почему я предпочитаю использовать строковый литерал в качестве первого операнда, поскольку это показывает намерение - знание языка является основополагающим для использования языка.

Единственное место, где задание утка - проблемы (в данном случае), - это выражение формы a + b, где ни один из них не является строковым литералом. В этом случае a (или b) может оценивать строку, в которой ожидается, что она будет оцениваться числом (это приведет к конкатенации строк против ожидаемого числового добавления). Если какой-либо из операндов является строковым литералом, намерение четко определено/описано.

Эта конкретная "проблема", однако, отсутствует в опубликованном коде; и он не будет устранен с использованием toString над строковым литералом.

Ответ 6

По-моему, мы должны использовать String(number) вместо number + '' или number.toString(), потому что

  • number + '' приведет к ошибке JSLint

  • number.toString() завершится с ошибкой, если number - null или undefined, и у вас будет TypeError: number undefined/null

Ответ 7

В последнее время JSLint находился в бета-версии. Новая версия больше не жалуется на этот код:

function convert(x) {
    'use strict';
    // alert(typeof x);
    x = x + "";
    // alert(typeof x);
    return x;
}


convert(3);