2016-07-11 18 views
2

ich ein einfaches Programm wie:Javascript überprüfen, ob Wörterbuch

Hier Wert von a ist Wörterbuch. Ich möchte nachsehen.

Wie kann ich Javascript einchecken? Meine beiden Test gibt mir über abgehängten Wert

Ich bin neu in Javascript

+0

Javascript muss nicht Wörterbuch . Es hat ein Objekt. Object und Array haben beide einen Objekttyp, wenn Sie also zwischen ihnen unterscheiden möchten, können Sie 'Array.isArray' versuchen. Dies gibt True für Array und False für Objekte zurück – Rajesh

+0

Stack Overflow ist keine Lernprogrammseite. – gcampbell

Antwort

2

Die Struktur {'a': 1, 'b': 2} ist ein Objekt Javascript. Es kann wie ein Wörterbuch verwendet werden, aber Javascript hat keinen Wörterbuchtyp.

console.log(typeof a);   // "object" 
console.log(Array.isArray(a)); // false, because it's not an array 

Wenn Sie wissen wollen, ob etwas ein Array ist, dann verwenden:

Array.isArray(a) 

Wenn Sie wissen wollen, ob etwas ein Objekt ist, dann verwenden:

typeof a === "object" 

Aber Sie müssen vorsichtig sein, weil ein Array auch ein Objekt ist.


Wenn Sie wissen wollen, ob etwas ein einfaches Objekt ist, können Sie sehen, was jQuery hat ein einfaches Objekt zu erkennen:

isPlainObject: function(obj) { 
    // Not plain objects: 
    // - Any object or value whose internal [[Class]] property is not "[object Object]" 
    // - DOM nodes 
    // - window 
    if (jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow(obj)) { 
     return false; 
    } 

    // Support: Firefox <20 
    // The try/catch suppresses exceptions thrown when attempting to access 
    // the "constructor" property of certain host objects, ie. |window.location| 
    // https://bugzilla.mozilla.org/show_bug.cgi?id=814622 
    try { 
     if (obj.constructor && 
       !hasOwn.call(obj.constructor.prototype, "isPrototypeOf")) { 
      return false; 
     } 
    } catch (e) { 
     return false; 
    } 

    // If the function hasn't returned already, we're confident that 
    // |obj| is a plain object, created by {} or constructed with new Object 
    return true; 
}, 
4
function isDict(v) { 
    typeof v==='object' && v!==null && !(v instanceof Array) && !(v instanceof Date); 
} 
2

Um strenger zu sein Sie JSON verwenden können . Aber es ist nicht eine Leistung & speichereffiziente Lösung:

function isJsonable(v) { 
    try{ 
     return JSON.stringify(v) === JSON.stringify(JSON.parse(JSON.stringify(v))); 
    } catch(e){ 
     /*console.error("not a dict",e);*/ 
     return false; 
    } 
} 

So kann die Antwort sein: (beachten Sie, dass es sich um eine ineffiziente Methode und wird empfohlen für den Test nur purposed)

function isDict(v) { 
    return !!v && typeof v==='object' && v!==null && !(v instanceof Array) && !(v instanceof Date) && isJsonable(v); 
} 
Verwandte Themen