Esiste comunque la possibilità di verificare se la modalità rigorosa 'use strict' è applicata e si desidera eseguire codice diverso per la modalità strict e l'altro codice per la modalità non strict. ricerca di funzione come isStrictMode();//boolean
Esiste un modo per verificare se viene applicata la modalità rigorosa?
risposta
Il fatto che this
dentro una funzione chiamata nel contesto globale non punterà all'oggetto globale può essere utilizzato per rilevare modalità rigorosa:
var isStrict = (function() { return !this; })();
Dimostrazione:
> echo '"use strict"; var isStrict = (function() { return !this; })(); console.log(isStrict);' | node
true
> echo 'var isStrict = (function() { return !this; })(); console.log(isStrict);' | node
false
Sì, this
è 'undefined'
all'interno di un metodo globale quando si è in modalità rigorosa.
function isStrictMode() {
return (typeof this == 'undefined');
}
function isStrictMode() {
try{var o={p:1,p:2};}catch(E){return true;}
return false;
}
Sembra che tu abbia già una risposta. Ma ho già scritto del codice. Così qui
Questo è migliore della risposta di Mehdi poiché funzionerà ovunque, non solo in un ambito globale. Alzato. :) – mgol
Ciò si traduce in un errore di sintassi, che si verifica prima dell'esecuzione del codice, quindi non può essere rilevato ... – skerit
Questo non funzionerà in ES6 o come il controllo viene rimosso per consentire i nomi delle proprietà calcolate. –
preferisco qualcosa che non fa uso di eccezioni e funziona in qualsiasi contesto, non solo globale uno:
var mode = (eval("var __temp = null"), (typeof __temp === "undefined")) ?
"strict":
"non-strict";
usa il fatto che il in modalità rigorosa eval
non introduce una nuova variabile in il contesto esterno.
Solo per curiosità, quanto è a prova di proiettile questo nel 2015, ora che ES6 è qui? –
Verifico che funzioni in ES6 sugli ultimi chrome e nodejs. –
Elegante e funzionante, grazie! – rudyryk
modo più elegante: se "questo" è oggetto, convertirlo in vero
"use strict"
var strict = (function() { return !!!this })()
if (strict) {
console.log ("strict mode enabled, strict is " + strict)
} else {
console.log ("strict mode not defined, strict is " + strict)
}
- 1. Un modo per forzare la modalità rigorosa nel nodo?
- 2. modo pythonic per verificare se qualcosa esiste?
- 3. cos'è la "modalità rigorosa" e come viene utilizzata?
- 4. Il modo più veloce per verificare se esiste un oggetto
- 5. violazioni modalità rigorosa
- 6. Forza la modalità sql rigorosa in django
- 7. modalità rigorosa per evitare la conversione del tipo
- 8. Impostare la modalità rigorosa in PowerShell per tutti i moduli
- 9. Modalità rigorosa in un namespace con Javascript
- 10. In che modo viene applicata la politica dello stesso dominio?
- 11. Modalità rigorosa: alternativa a argument.callee.length?
- 12. Esiste un modo per verificare se un browser mobile supporta flash utilizzando la tecnologia web?
- 13. Verificare se esiste un processo in modo rapido
- 14. Come verificare se esiste un utente postgres?
- 15. Verificare se esiste un file in Yii
- 16. Verificare se esiste un input di modulo
- 17. Come verificare se esiste un determinato assemblaggio?
- 18. Come verificare se la funzione esiste?
- 19. La chiave esterna non viene applicata
- 20. Esiste un modo per verificare se has_many esiste in Rails 3.1?
- 21. Verificare se esiste un nodo utilizzando XSLT
- 22. Verificare se esiste un servizio web
- 23. Verificare se esiste un oggetto in VBScript
- 24. Come sovrascrivere Function.length per restituire la lunghezza di un array, in modalità rigorosa
- 25. gelsomino - come verificare se esiste un argomento?
- 26. Come verificare se esiste un elemento dell'array?
- 27. Come verificare se esiste un percorso?
- 28. LINQ per verificare se l'ID esiste nell'elenco
- 29. come posso verificare se esiste un file?
- 30. Come verificare se esiste un file
Grande. Questo è elegante e funziona ovunque. –
Per chiarimenti, l'istruzione return equivale a "return this === undefined", non lo confronta con l'oggetto globale, sta solo controllando se "this" esiste. – aljgom