Я пытаюсь объединить две строки в TypeScript следующим образом:
let string1 = new String("IdNumber: " + this.IdNumber);
let string2 = new String(this.notes);
this.notes = string1.concat(string2.toString());
В выводе, который я вижу для this.notes в строке 3, отсутствует исходный текст из this.notes в строке 2. Вот что я вижу в devTools для this.notes в строке 3 при отладке:
"IdNumber: 524242
"
при наведении курсора на this.notes в строке 2 в devTools это выглядит так:
"testing
testing 2
testing 3"
Я надеялся, что this.notes в строке 3 будет выглядеть так:
"IdNumber: 524242
testing
testing 2
testing 3"
Что я делаю не так?
Пожалуйста, предоставьте автономный минимальный воспроизводимый пример, который демонстрирует вашу проблему при вставке в автономную IDE. Прямо сейчас контекст this
отсутствует, поэтому трудно понять, что происходит. Я согласен с тем, что new String(...)
почти наверняка не то, что вы хотите сделать; вместо этого вы можете использовать просто String(...)
. Но без возможности воспроизвести проблему, это всего лишь догадки.
Было бы полезно, если бы вы могли объяснить, что вы пытаетесь получить, чего "IdNumber: " + this.IdNumber + this.notes
вам не даст.
Этот код может быть не очень хорошим, но я только что понял, что допустил ошибку и установил this.notes в отдельном месте, которое перезаписывало то, что было установлено здесь. По-прежнему было очень полезно увидеть, как использовать литералы шаблонов вместо объектов String.
Я думаю, что более эргономичным (если не идиоматичным) подходом было бы использование шаблонных литералов, например:
const example = {
IdNumber: 524242,
notes: 'testing\n\ntesting 2\n\ntesting 3',
update () {
this.notes = `IdNumber: ${this.IdNumber}\n\n${this.notes}`;
},
};
console.info(example.notes); // "testing\n\ntesting 2\n\ntesting 3"
example.update();
console.info(example.notes); // "IdNumber: 524242\n\ntesting\n\ntesting 2\n\ntesting 3"
Для конкатенации строк рекомендуется* использовать шаблонные литералы
let string1 = `IdNumber: ${this.IdNumber}`;
let string2 = `${this.notes}`;
this.notes = `${string1}${string2}`
Строковые объекты в JavaScript очень редко бывают полезными. Они не совпадают со строковыми примитивными значениями.