【问题标题】:Problems pushing in javascript (Cannot read property 'push' of null) [closed]推送 javascript 的问题(无法读取 null 的属性“推送”)[关闭]
【发布时间】:2020-04-26 14:58:59
【问题描述】:

我是 javascript 新手,在查找此程序的错误时遇到了很多麻烦:

const listaTweets = document.getElementById("lista-tweets");

//Función para agregar tweets
document.getElementById("formulario").addEventListener("submit", function(e){
   e.preventDefault;

   //Capturar mensaje
   const tweet = document.getElementById("tweet").value;
   const lista = document.createElement("li");
   lista.innerText = tweet;

   //Añadir botón "borrar"
   const botonBorrar = document.createElement("a");
   botonBorrar.innerText = "X";
   botonBorrar.classList = "borrar-tweet";

   //Añadir elementos al DOM
   lista.appendChild(botonBorrar);
   listaTweets.appendChild(lista);

   //Añadir tweet a Local Storage
   agregarTweetLocalStorage(tweet);
});

//Función para elimitar tweets
document.getElementById("lista-tweets").addEventListener("click", function(e){
   e.preventDefault();

   if(e.target.className === "borrar-tweet"){
      e.target.parentElement.remove();
   }

});

//Función para agregar tweets a Local Storage
function agregarTweetLocalStorage(tweet){
   let tweets;
    //Activar función para obtener tweets y guardar nuevos
   tweets = obtenerTweetsLocalStorage()
   tweets.push(tweet);
   //Convertir arreglo a string para que JSON lo pueda leer
   localStorage.setItem("tweets", JSON.stringify(tweets));
}

//Función para leer/obtener los tweets
function obtenerTweetsLocalStorage(){
   let tweets;
   if(localStorage.getItem("tweets") === "null"){
      tweets = [];
   }else{
      //Conversión del arreglo a JSON
      tweets = JSON.parse(localStorage.getItem("tweets"));
   }
   return tweets;
}

我正试图找出究竟是什么问题,我知道是在 push() 函数上,但我真的不知道。

你能帮帮我吗?

【问题讨论】:

  • 问题是你冲到这里来问一个问题,而你本可以只花 2 分钟来检查你的变量的值,看看什么是 NULL。

标签: javascript arrays json function ecmascript-6


【解决方案1】:

如果键不存在,localStorage.getItem 返回null 而不是"null",一个字符串。

if(localStorage.getItem("tweets") === "null"){
  tweets = [];
}

应该是

if (localStorage.getItem('tweets') === null){
  tweets = [];
}

或者只是

if (!localStorage.getItem('tweets')) {
  tweets = [];
}

上面的代码在 JavaScript 中的作用是 nullfalsy

你可以稍微重构一下代码。

function obtenerTweetsLocalStorage() {
  const tweets = localStorage.getItem('tweets')
  if (!tweets) {
    return []
  }

  return JSON.parse(tweets)
}

【讨论】:

  • 致投反对票的人:如果您能评论投反对票的原因会很有帮助。如果您对改进答案有任何建议,我将不胜感激。
猜你喜欢
  • 2014-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-19
  • 2022-01-16
  • 2016-04-22
  • 2016-06-11
  • 1970-01-01
相关资源
最近更新 更多