отличается между пустой переменной и инициализированной переменной - PullRequest
1 голос
/ 27 октября 2019

Я думаю, что мой вопрос неправильный или не имеет смысла, как то, что я получаю лучший способ задать вопрос, подходя к делу ...

Я изучаю функции обратного вызова в javascript

const posts = [
    {title: 'A', body: 'This is Body Of A'},
    {title: 'B', body: 'This is Body Of B'},
    {title: 'C', body: 'This is Body Of C'},
]

и я создаю эти сообщения: -

function createPosts(post){
    setTimeout(function(){
        posts.push(post);
    },2000);
}

получаю их и отображаю на html:

function getPosts(){
    setTimeout(function(){
        let output = ''
        posts.forEach(function(post){
            output += `<li>${post.title}</li>`
        });
        document.body.innerHTML = output;
    }, 1000);
}

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

function getPosts(){
    setTimeout(function(){
        let output;
        posts.forEach(function(post){
            output = `<li>${post.title}</li>`
        });
        document.body.innerHTML = output;
    }, 1000);
}

Так в чем же разница между созданием пустой переменной и переменной инициализации.

Спасибо

Ответы [ 2 ]

1 голос
/ 27 октября 2019

Разница заключается в конкатенации строк +=: см. Раздел String operators здесь

Следующая строка добавит новый элемент li к output

output += `<li>${post.title}</li>`

В другом примере вы используете оператор присваивания =:
Это назначит элемент li для output - все, что было сохранено в output до потери, будет:

output = `<li>${post.title}</li>`
0 голосов
/ 27 октября 2019

Поскольку вы предполагали, что будущими значениями являются Строки, поэтому всегда лучше использовать пустую строку в качестве начального значения, в вашем коде, чем вам не нужно проверять перед применением любого из метода, связанного со строкой , в противном случае вам необходимодобавляйте проверку каждый раз, когда вы используете строковый метод для переменной

let str = ''

console.log(str.replace(/.*/g , 'Hello'))

let noStr;

console.log(noStr.replace(/.*/g , 'Hello'))
...