Не удалось получить свойство «заменить» неопределенной или нулевой ссылкой? - PullRequest
1 голос
/ 30 июня 2019

Этот код выдает ошибку: Невозможно получить свойство 'заменить' неопределенной или нулевой ссылки

 function formatDate(dateVal) {

        var date = new Date(parseInt(dateVal.replace('/Date(', '')))
        var month = date.getMonth() + 1;
        var day = date.getDate();
        var year = date.getFullYear();
        return (day.toString().length > 1 ? day : "0" + day) + "/" + (month.toString().length > 1 ? month : "0" + month) + "/" + year;
    }

Передаваемое ему значение равно нулю и имеет формат, аналогичный /Date(-62135596800000)/.

.

Ответы [ 3 ]

0 голосов
/ 30 июня 2019

использовать параметры по умолчанию, подобные этому formatDate (dateVal = "") , позволяет устанавливать значения по умолчанию для параметров вашей функции, если значение не передано или передано значение undefined:

function formatDate(dateVal = "" ) {
  var date = new Date(parseInt(dateVal.replace('/Date(', '')))
  var month = date.getMonth() + 1;
  var day = date.getDate();
  var year = date.getFullYear();
  return (day.toString().length > 1 ? day : "0" + day) + "/" + (month.toString().length > 1 ? month : "0" + month) + "/" + year;
}
0 голосов
/ 30 июня 2019

Кажется, ваша проблема в том, что вы ожидаете строку типа "/ Date (-62135596800000) /", но получаете что-то еще. Поэтому проверяйте ввод перед вызовом строковых методов для его анализа, например,

function formatDate(dateVal) {

  // Test for string in required format
  if (!/^\/Date\([+-]?\d{1,16}\)\/$/.test(dateVal)) {
    return; // undefined
  }
  
  let date = new Date(parseInt(dateVal.replace('/Date(', '')))
  let month = date.getMonth() + 1;
  let day = date.getDate();
  let year = ('000' + date.getFullYear()).slice(-4);
  return (day > 9 ? day : "0" + day) + "/" +
         (month > 9 ? month : "0" + month) + "/" +
          year;
}

// Simple tests
['/Date(-62135596800000)/',
  null,
  NaN,
  'sweet',
  1561853541934,
  '/Date(1561853541934)/'].forEach(
    v => console.log(v + ': ' + formatDate(v))
);

Затем в вызывающей программе вы можете проверить, вернули ли вы строку (успех) или undefined , которая указывает на неверный ввод, с которым вам придется иметь дело.

0 голосов
/ 30 июня 2019

Ну, если вы передадите значение null, оно не будет иметь никаких свойств. Убедитесь, что вы передали правильное значение:

function formatDate(dateVal) {
  var date = new Date(parseInt(dateVal.replace('/Date(', '')))
  var month = date.getMonth() + 1;
  var day = date.getDate();
  var year = date.getFullYear();
  return (day.toString().length > 1 ? day : "0" + day) + "/" + (month.toString().length > 1 ? month : "0" + month) + "/" + year;
}

console.log(formatDate("/Date(-62135596800000)/"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...