11 Jahre alte Frage hier ist meine ordentliche Lösung, offen für Randfall-Vorschläge; Schritte -> suche nur nach Objekten und vergleiche dann Eigenschaften -> Objektliterale haben keine Länge, Prototyp und für den Randfall stringifizieren Eigenschaften.
versucht im Test für JSON und Object.create(Object.create({cool: "joes"})).
"use strict"
let isObjectL = a => {
if (typeof a !=='object' || ['Number','String','Boolean', 'Symbol'].includes(a.constructor.name)) return false;
let props = Object.getOwnPropertyNames(a);
if ( !props.includes('length') && !props.includes('prototype') || !props.includes('stringify')) return true;
};
let A={type:"Fiat", model:"500", color:"white"};
let B= new Object();
let C = { "name":"John", "age":30, "city":"New York"};
let D= '{ "name":"John", "age":30, "city":"New York"}';
let E = JSON.parse(D);
let F = new Boolean();
let G = new Number();
console.log(isObjectL(A));
console.log(isObjectL(B));
console.log(isObjectL(C));
console.log(isObjectL(D));
console.log(isObjectL(E));
console.log(isObjectL(JSON));
console.log(isObjectL(F));
console.log(isObjectL(G));
console.log(isObjectL(
Object.create(Object.create({cool: "joes"}))));
console.log(isObjectL());
Andere Variante, die das innere Arbeiten zeigt
isObject=function(a) {
let exclude = ['Number','String','Boolean', 'Symbol'];
let types = typeof a;
let props = Object.getOwnPropertyNames(a);
console.log((types ==='object' && !exclude.includes(a.constructor.name) &&
( !props.includes('length') && !props.includes('prototype') && !props.includes('stringify'))));
return `type: ${types} props: ${props}
----------------`}
A={type:"Fiat", model:"500", color:"white"};
B= new Object();
C = { "name":"John", "age":30, "city":"New York"};
D= '{ "name":"John", "age":30, "city":"New York"}';
E = JSON.parse(D);
F = new Boolean();
G = new Number();
console.log(isObject(A));
console.log(isObject(B));
console.log(isObject(C));
console.log(isObject(D));
console.log(isObject(E));
console.log(isObject(JSON));
console.log(isObject(F));
console.log(isObject(G));
console.log(isObject(
Object.create(Object.create({cool: "joes"}))));
0 Stimmen
Jeresig hat mich gebeten, eine Funktion zu implementieren, die genau das für ihn tun würde.
0 Stimmen
Ein Objekt ist niemals ein Objektliteral, also kannst du die Frage umformulieren?
0 Stimmen
Und übrigens, was war dein liebstes Commodore 64 Magazin?
0 Stimmen
@Nosredna Ich glaube, ich war damals zu jung dafür, ich habe meinen ersten C64 mit 3 Jahren bekommen. Alles, was ich wusste, war das ganze: load "*", 8, 1 Ding, damit ich meine Spiele laden konnte zu diesem Zeitpunkt.