无法获取未定义或空引用的属性“替换”?

时间:2019-06-29 22:26:56

标签: javascript jquery json date

此代码引发错误: 无法获取未定义或空引用的属性“替换”

 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;
    }

传递给它的值是null,格式为/ Date(-62135596800000)/。

3 个答案:

答案 0 :(得分:0)

好吧,如果您传递一个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)/"));

答案 1 :(得分:0)

使用像这样的默认参数 formatDate(dateVal =“”),它允许您在不传递任何值或未传递未定义的情况下为函数参数设置默认值:

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;
}

答案 2 :(得分:0)

您的问题似乎是您期待的字符串是“ / 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 ,这表明您需要处理无效的输入。