Ich habe ein paar Funktionen geschrieben, die effektiv JSON.stringify() replizieren, um einen Bereich von Werten in stringifizierte Versionen zu konvertieren. Wenn ich meinen Code zu JSBin übergebe und ihn für einige Beispielwerte benutze, funktioniert es gut. Aber ich bekomme diesen Fehler in einem Spezifikationsrunner, der entworfen ist, um das zu prüfen.So beheben Sie TypeError: Kann nicht undefiniert oder null in Objekt
Mein Code:
// 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's 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) + "";
}
};
Die Fehlermeldung von dem Tester Ich erhalte ist:
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)
Es scheint zum Scheitern verurteilt: stringifyJSON (null) zum Beispiel
Bitte geben Sie die Eingabe an, für die Sie einen Fehler erhalten, da sie für stringifyJSON arbeitet ({a: 'b', c: 'd'}) – vinayakj
Abgesehen vom Fehler 'stringifyJSON ([1,2,3]) 'return' 1,2,3' und 'stringifyJSON ({foo: 'bar'})' returns '{foo:" bar "}', beide sind keine gültigen JSONs. –
Meine Vermutung wäre diese Zeile 'if (obj === 'null') {return null;} // null unverändert', - das wird nicht übergeben wenn'null' gegeben wird, nur wenn die string' "null" gegeben wird '. Wenn Sie also den eigentlichen Wert 'null' an Ihr Skript übergeben, wird es im Objekt-Teil des Codes analysiert. Und 'Object.keys (null)' löst den erwähnten 'TypeError' aus. Um es zu beheben, benutze 'if (obj === null) {return null}' - ohne die qoutes um 'null'. – veproza