Каким образом JSLint одобрил способ преобразования числа в строку? - PullRequest
28 голосов
/ 28 апреля 2011

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

var string = 1 + '';

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

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

Ответы [ 7 ]

22 голосов
/ 28 апреля 2011

Я считаю, что утвержденный 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"];
8 голосов
/ 29 апреля 2011

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

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

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

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

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

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

3 голосов
/ 28 апреля 2011

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

var n = 1, s = String(n);
3 голосов
/ 28 апреля 2011

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

var num = 1;
var str = num.toString();
2 голосов
/ 28 апреля 2011

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

Коул. Считайте, что

var x = "foobar" + 1;

- это «одобренный» jslint.В любом случае, это 100% допустимый Javascript.

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


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

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

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

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

1 голос
/ 11 августа 2015

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

  • number + '' вызовет ошибку JSLint

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

0 голосов
/ 11 июня 2015

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

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


convert(3);
...