Преобразование строк и чисел в JavaScript


89

Как я могу сделать следующее в JavaScript?

  1. Объединить «1», «2», «3» в «123»

  2. Преобразовать «123» в 123

  3. Складываем 123 + 100 = 223

  4. Преобразовать 223 в "223"


42
Почти все книги по JavaScript, которые я прочитал, посвящены этим вопросам. Но это нормально. Ответы на вопросы - вот что такое StackOverflow. @Shadi Almosri - У SO есть правило "не будь злым". Я не вижу смысла принижать людей, которые задают здесь вопросы, раз уж в этом суть места.
Nosredna 09

4
@Nosredna: я полностью понимаю, что задавать вопросы, мне больше всего нравится отвечать на них, но я думаю, что демонстрация того, что вы пробовали, - это лучший этикет, чем просто ожидание ответа, а также лучше для личного опыта обучения. Просто мое мнение, не хочу показаться злым! :)
Шади Алмосри

1
@Shadi, так как должен был быть задан вопрос? С заявлением о том, что уже искали ответ?
Nosredna 09

1
Когда я впервые увидел это, мне показалось, что это своего рода домашнее задание, но когда я перечитал его, я подумал, что нет, похоже, что кто-то экспериментирует с JavaScript, получает неожиданные результаты и хочет их исправить. Тем не менее, мне интересно, может ли stackoverflow.com/faq включать что-то вроде кодекса чести для студентов. Мы здесь своего рода глобальный университет, и я не думаю, что это безумие пытаться выяснить, какой набор этических норм может быть для этого места. А может это безумие. :-)
artlung 09

6
@Shadi, с положительной стороны, вопрос и ответ находятся в StackOverflow, и, надеюсь, поможет другим людям. Я постоянно вижу, как люди зацикливаются на этом материале, особенно когда они приходят с таких языков, как Java. Люди не зря спрашивают об этом снова и снова - они ДУМАЮТ, что знают, как работают выражения в JavaScript, но это не так. Они делают предположения, основываясь на опыте вне JS. Вот почему так полезно сесть и попробовать несколько простых тестов с добавлением строк и чисел, а также с унарными плюсами и минусами.
Nosredna 09

Ответы:


120

Вы хотите познакомиться с parseInt()и toString().

В вашем наборе инструментов будет полезно посмотреть на переменную, чтобы узнать, какой она тип typeof:

<script type="text/javascript">
    /**
     * print out the value and the type of the variable passed in
     */

    function printWithType(val) {
        document.write('<pre>');
        document.write(val);
        document.write(' ');
        document.writeln(typeof val);
        document.write('</pre>');
    }

    var a = "1", b = "2", c = "3", result;

    // Step (1) Concatenate "1", "2", "3" into "123"
    // - concatenation operator is just "+", as long
    //   as all the items are strings, this works
    result = a + b + c;
    printWithType(result); //123 string

    // - If they were not strings you could do
    result = a.toString() + b.toString() + c.toString();
    printWithType(result); // 123 string

    // Step (2) Convert "123" into 123
    result = parseInt(result,10);
    printWithType(result); // 123 number

    // Step (3) Add 123 + 100 = 223
    result = result + 100;
    printWithType(result); // 223 number

    // Step (4) Convert 223 into "223"
    result = result.toString(); //
    printWithType(result); // 223 string

    // If you concatenate a number with a 
    // blank string, you get a string    
    result = result + "";
    printWithType(result); //223 string
</script>

Есть ли конкретная причина, по которой вы помещаете это в теги сценария?
Julix

@Julix Для новичков в 2009 году: погрузиться в HTML-файл, чтобы изучить базовую концепцию. Если бы я отвечал на этот свежий сегодня, я мог бы сделать это по-другому, но, может быть, нет.
artlung

53

Шаг (1) Объедините «1», «2», «3» в «123»

 "1" + "2" + "3"

или

 ["1", "2", "3"].join("")

Метод соединения объединяет элементы массива в строку, помещая указанный разделитель между элементами. В этом случае «разделитель» - это пустая строка ( "").


Шаг (2) Преобразуйте «123» в 123

 parseInt("123")

До ECMAScript 5 необходимо было передавать основание системы счисления 10:parseInt("123", 10)


Шаг (3) Складываем 123 + 100 = 223

 123 + 100


Шаг (4) Преобразование 223 в "223"

 (223).toString() 


Положите все в тогтер

 (parseInt("1" + "2" + "3") + 100).toString()

или

 (parseInt(["1", "2", "3"].join("")) + 100).toString()

4
Хороший, наглядный пример. Кроме того, спасибо за хорошую форму - вы всегда должны указывать систему счисления для parseIntфункции .
hotshot309 03

Включение системы счисления смутило меня, и я перешел к другому ответу, где он был объяснен. Отредактировано в кратком объяснении, чтобы быть правым в недоумении.
ArtOfWarfare

@ArtOfWarfare Спасибо, хорошее редактирование. Во время этого ответа была необходима система счисления. В наши дни я могу привести аргумент, чтобы не упомянуть его. Начиная с ES5, который поддерживают все «современные» браузеры и Node.js, parseInt (<a строка только с 0-9>) всегда использует базу 10.
Патрик

забавный факт ... в оригинальном JavaScript Netscape (примерно 1995 г.) основание по умолчанию для parseInt было 8 (если строка не содержала и 8 или 9)
Джастин Ом

27
r = ("1"+"2"+"3")           // step1 | build string ==> "123"
r = +r                      // step2 | to number    ==> 123
r = r+100                   // step3 | +100         ==> 223
r = ""+r                    // step4 | to string    ==> "223"

//in one line
r = ""+(+("1"+"2"+"3")+100);

Спасибо за быстрое преобразование строки в> числа
mcont

Если вы проверите, что это число или нет, используйте parseInt (). Например, parseInt ("") равно NaN, а + "" равно 0!
Greene

15

Эти вопросы возникают постоянно из-за системы набора текста в JavaScript. Люди думают, что получают число, когда получают строку числа.

Вот некоторые вещи, которые вы можете увидеть, используя то, как JavaScript работает со строками и числами. Лично мне хотелось бы, чтобы в JavaScript для конкатенации строк использовался какой-то другой символ, кроме + .

Шаг (1) Объедините «1», «2», «3» в «123»

result = "1" + "2" + "3";

Шаг (2) Преобразуйте «123» в 123

result = +"123";

Шаг (3) Складываем 123 + 100 = 223

result = 123 + 100;

Шаг (4) Преобразование 223 в "223"

result = "" + 223;

Если вы знаете, ПОЧЕМУ это работает, у вас меньше шансов столкнуться с проблемами с выражениями JavaScript.


3
На самом деле я считаю, что это крайне плохая практика, потому что она довольно непрозрачна в отношении того, что происходит. Знание того, что определенные операции влияют на неявное приведение, - это уловка, и ее полезно знать, но это совсем не читается. Общение - это все.
annakata

1
Я думаю, что важно знать эти вещи ТОЧНО, чтобы вы знали, что происходит, когда вы читаете код. Большая часть JavaScript является кратким, потому что он передается как исходный код, а небольшой код может означать снижение стоимости сервера.
Nosredna 09

6
Однако вы должны достичь этого с помощью инструментов сжатия, в этой форме это оптимизация с очень реальной стоимостью обслуживания.
annakata

6
Тем не менее, знание этих вещей поможет в первую очередь предотвратить вопрос, который заключался в отсутствии знаний о том, как JavaScript работает со строками и числами. Это вопрос интеллектуального любопытства. Что происходит, когда я добавляю число к строке? Как работает унарный плюс? Если вы не знаете ответов, значит, вы действительно не знаете JavaScript, и возникнут вопросы такого рода.
Nosredna 09

11

Сделать это можно так:

// step 1 
var one = "1" + "2" + "3"; // string value "123"

// step 2
var two = parseInt(one); // integer value 123

// step 3
var three = 123 + 100; // integer value 223

// step 4
var four = three.toString(); // string value "223"

16
Лучше всего добавить параметр radix к функции parseInt (). Итак, parseInt (one, 10) гарантирует, что все, что вы ему бросите, не будет преобразовано неправильно.
artlung

3
Согласовано. В противном случае значения, начинающиеся с, 0будут отображаться как восьмеричные числа (с основанием 8) .
hotshot309 03

1
Еще более неожиданным является то, что значения, начинающиеся с, 0а затем содержащие 8или не 9будут выполнены, что приведет к возврату 0. Например,, parseInt('034') = 28и parseInt('09') = 0.
Роберт Мартин

9

Чтобы преобразовать строку в число, вычтите 0. Чтобы преобразовать число в строку, добавьте «» (пустая строка).

5 + 1 даст вам 6

(5 + "") + 1 даст вам "51"

("5" - 0) +1 даст вам 6


1
Использование подобных уловок, основанных на языковых причудах, может привести к реальной неизвестности. например, «5» -0 действительно дает число 5, но «5» +0 дает строку «50». (Да, я знаю, что прошло много лет, и мне, наверное, немного грустно, что я даже это читал.)
Ник Райс,

6

parseInt ошибочен, как scanf:

parseInt ("12 обезьян", 10) - число со значением '12'
+ «12 обезьян» - это число со значением «NaN»
Число («12 обезьян») - это число со значением «NaN».


1

Ниже приведен очень раздражающий пример того, как JavaScript может доставить вам неприятности:

Если вы просто попытаетесь использовать parseInt()для преобразования в число, а затем добавить еще одно число к результату, он объединит две строки.

Однако вы можете решить проблему, заключив выражение суммы в круглые скобки, как показано в примере ниже.

Результат: Их возрастная сумма: 98; Их возрастная сумма НЕ: 5048

<!DOCTYPE html>
<html>
<body>

<p id="demo"></p>

<script>
function Person(first, last, age, eye) {
    this.firstName = first;
    this.lastName = last;
    this.age = age;
    this.eyeColor = eye;
}

var myFather = new Person("John", "Doe", "50", "blue");
var myMother = new Person("Sally", "Rally", 48, "green");

document.getElementById("demo").innerHTML = "Their age sum is: "+
 (parseInt(myFather.age)+myMother.age)+"; Their age sum is NOT: " +
 parseInt(myFather.age)+myMother.age; 
</script>

</body>
</html>


0

Самый простой - это когда вы хотите сделать целое число строкой

var a,b, c;
a = 1;
b = a.toString(); // This will give you string

Теперь из переменной b типа string мы можем получить целое число

c = b *1; //This will give you integer value of number :-)

Если вы хотите проверить, это число. Если вы не уверены, что b содержит целое число, вы можете использовать

if(isNaN(c*1)) {
  //NOt a number
}
else //number

0

Мы можем сделать это, используя унарный оператор плюс, чтобы сначала преобразовать их в числа и просто сложить. увидеть ниже:-

var a = "4";
var b = "7";
var sum = +a + +b; 
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.