In realtà non sono sicuro di essermi imbattuto in un comportamento indesiderato in javascript o se si tratta di un comportamento intenzionale.Comportamento javascript dispari per il controllo della chiave "costruttore" nell'oggetto
il codice seguente genera in una vera dichiarazione:
var test= {"test":1}
document.write("constructor" in test);
http://jsfiddle.net/xyatxm2g/2/
Se cambio al seguente codice, restituisce false come dovrebbe:
var test= {"test":1}
document.write(test.hasOwnProperty("constructor"));
http://jsfiddle.net/fg06ovvc/2/
Quindi, se voglio per verificare la presenza di una chiave in un dizionario, dovrei sempre preferiscono usare il metodo '' 'hasOwnProperty'''? – fsociety
@barsch Sì. Ecco perché per iterare su tutte le chiavi effettive di un oggetto (se 'Object.keys (obj)' non è disponibile), fai 'for (var key in obj) {if (obj.hasOwnProperty (key)) {doSomethingWithKey (chiave); }} '. – GregL
@barsch Se si stanno mirando solo ai nuovi browser, è possibile utilizzare anche [il Tipo di mappa] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map). In futuro, utilizzando gli oggetti JavaScript standard, le mappe diventeranno probabilmente meno popolari ora che abbiamo un'opzione più specializzata. –