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

89

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

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

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

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

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

user366312
источник
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>
Artlung
источник
Есть ли конкретная причина, по которой вы помещаете это в теги сценария?
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>

Jpsousa
источник
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; 
Singhkumarhemant
источник