consideri seguente codice:'Impossibile eliminare la proprietà' su Safari quando si cerca di eliminare l'attributo set di dati in modalità rigorosa
(function() {
'use strict';
delete document.body.dataset.state;
})();
dove il corpo dataset
è vuoto. Safari considera tutti i valori di DOMStringMap - beh, credo di sì - come ReadOnly
e i loro valori di descrittore , configurable
e writable
sono tutti impostati su false
. Ciò fa sì che TypeError: Unable to delete property
compaia nell'esempio sopra citato.
Ma in valori descrittori proprietà dataset Chrome sono impostati per true
(può essere controllato con Object.getOwnPropertyDescriptor()
), e l'eliminazione di attributo inesistente non gettare l'errore.
Quindi, quale comportamento è corretto? Le specifiche dicono di readonly dataset, ma writable DOMStringMap, quindi presumo che le proprietà del set di dati debbano essere cancellate. Mi sto perdendo qualcosa?
Senza guardarlo in profondità r, proprio come un promemoria, la specifica non è assoluta e definita fino al dettaglio, una quantità sorprendente di cose è specifica dell'implementazione. – Nit
Le specifiche non sembrano dire quale sintassi dovrebbe essere supportata per rimuovere un attributo dataset. Il consenso generale del pubblico tra gli sviluppatori che usano altri browser è quello di cancellare il valore impostandolo su una stringa vuota o di usare 'delete', ma non sembra esserci uno standard scritto su questo. La mia opinione personale è che Safari probabilmente non è corretto qui, ma è quello che è se devi far funzionare il codice con esso. – jfriend00
Trovato qualche soluzione a questo? –