Как разрешить TypeError: невозможно преобразовать undefined или null в объект
Я написал несколько функций, которые эффективно реплицируют JSON.stringify(), преобразуя диапазон значений в строковые версии. Когда я переношу свой код на JSBin и запускаю его на некоторых образцах, он отлично работает. Но я получаю эту ошибку в спецификаторе, предназначенном для проверки этого.
Мой код:
// five lines of comments
var stringify = function(obj) {
if (typeof obj === 'function') { return undefined;} // return undefined for function
if (typeof obj === 'undefined') { return undefined;} // return undefined for undefined
if (typeof obj === 'number') { return obj;} // number unchanged
if (obj === 'null') { return null;} // null unchanged
if (typeof obj === 'boolean') { return obj;} // boolean unchanged
if (typeof obj === 'string') { return '\"' + obj + '\"';} // string gets escaped end-quotes
if (Array.isArray(obj)) {
return obj.map(function (e) { // uses map() to create new array with stringified elements
return stringify(e);
});
} else {
var keys = Object.keys(obj); // convert object keys into an array
var container = keys.map(function (k) { // uses map() to create an array of key:(stringified)value pairs
return k + ': ' + stringify(obj[k]);
});
return '{' + container.join(', ') + '}'; // returns assembled object with curly brackets
}
};
var stringifyJSON = function(obj) {
if (typeof stringify(obj) != 'undefined') {
return "" + stringify(obj) + "";
}
};
Сообщение об ошибке, которое я получаю от тестера:
TypeError: Cannot convert undefined or null to object
at Function.keys (native)
at stringify (stringifyJSON.js:18:22)
at stringifyJSON (stringifyJSON.js:27:13)
at stringifyJSONSpec.js:7:20
at Array.forEach (native)
at Context.<anonymous> (stringifyJSONSpec.js:5:26)
at Test.Runnable.run (mocha.js:4039:32)
at Runner.runTest (mocha.js:4404:10)
at mocha.js:4450:12
at next (mocha.js:4330:14)
Кажется, что с ошибкой:
stringifyJSON (null), например
Ответы
Ответ 1
Общий ответ
Эта ошибка возникает, когда вы вызываете функцию, которая ожидает Object в качестве аргумента, но вместо этого передает undefined или null, как, например,
Object.keys(null)
Object.assign(window.UndefinedVariable, {})
Так как обычно это ошибка, решение состоит в том, чтобы проверить ваш код и исправить условие null/undefined, чтобы функция либо получала надлежащий объект, либо не вызывалась вообще.
Object.keys({'key': 'value'})
if (window.UndefinedVariable) {
Object.assign(window.UndefinedVariable, {})
}
Ответ, специфичный для рассматриваемого кода
Строка if (obj === 'null') { return null;}//null unchanged
не будет вычисляться, если задано значение null
, только если задана строка "null"
. Таким образом, если вы передадите фактическое null
значение вашему сценарию, оно будет проанализировано в части кода объекта. И Object.keys(null)
выбрасывает упомянутую TypeError
Object.keys(null)
. Чтобы исправить это, используйте if(obj === null) {return null}
- без кавычек вокруг нуля.
Ответ 2
Убедитесь, что целевой объект не пуст (null
или undefined
).
Вы можете инициализировать целевой объект с пустым объектом, как показано ниже:
var destinationObj = {};
Object.assign(destinationObj, sourceObj);
Ответ 3
У меня та же проблема с элементом в веб-форме. То, что я сделал, чтобы исправить это, было подтверждено. if (Object === 'null') сделать что-то