---
sourceDocument: Referência de API do Xanadu
sourceDocumentLink: https://servicenow-prod.fluidtopics.net/r/pt-BR/xanadu/api-reference

 Release :

    - xanadu

ft:locale :

    - pt-BR

ft:publication_title :

    - Referência de API do Xanadu

ft:clusterId :

    - crapiref

bundleId :

    - crapiref

workflow :

    - Creator


---

# Considerações para alternar os modos JavaScript

# Considerações para alternar os modos JavaScript {#ariaid-title1}

* Versão de lançamento: Xanadu
* 
* Atualizado 1 de ago. de 2024
* 
* ![](https://www.servicenow.com/docs/portal-asset/ico-clock) 3 min. de leitura

Alternar o modo JavaScript de uma aplicação ou script pode mudar o comportamento dos scripts existentes. Revise alguns exemplos de mudanças de comportamento antes de alternar os modos JavaScript ou para solucionar quaisquer problemas que você tenha após a alternância.

Para obter mais informações sobre cada modo JavaScript, consulte [Modos JavaScript](https://servicenow-prod.fluidtopics.net/0AQW7mA0QyqjPwGK7516nQ "O modo JavaScript é uma configuração de design e tempo de execução para scripts e aplicações personalizadas. Para oferecer suporte a scripts existentes do lado do servidor e novos scripts desenvolvidos de acordo com o padrão ECMAScript 2021, o mecanismo JavaScript tem três modos: ECMAScript 2021 (ES12), Padrões ES5 e Compatibilidade.") e [Suporte ao recurso do mecanismo JavaScript](https://servicenow-prod.fluidtopics.net/gWESx_virSDeI_EyfZxqVA "Compare os recursos do ECMAScript entre os modos JavaScript ECMAScript 2021 (ES12) e ES5 em Xanadu . Ambos os modos são compatíveis com um subconjunto de recursos do ECMAScript.").

Esta tabela destaca como o comportamento do JavaScript evoluiu do ambiente pré-ES5 leniente e sujeito a erros para o ES5 mais estrito e previsível e, por último, o ambiente com mais recursos do ES12 (ECMAScript 2021).  
{#considerations-switching-javascript-mode__table_r4b_j4r_fcc__entry__4}

| Recurso | Modo de compatibilidade | ES5 modo padrão | ECMAScript 2021 (ES12) |
|-|-|-|-|
| Objeto de argumentos | O objeto de `argumentos` existe, mas não há `modo estrito`, portanto, as modificações são refletidas nos `argumentos`. Impressões: *** Script: [object Arguments] *** Script: [object Arguments] *** Script: [object Arguments] *** Script: 123 | No modo estrito, o objeto de argumentos não reflete as modificações de parâmetro e gera um erro. Impressões: sn_es5: 123 sn_es5: undefined sn_es5: [object Arguments] sn_es5: 123 | O mesmo que ES5. |
| Substituições boolianas | Boolianos primitivos (`verdadeiro`, `falso`) podem ser substituídos, causando um comportamento inesperado. | Os boolianos primitivos são mais protegidos, embora ainda possam ser substituídos quando atribuídos a variáveis. | Igual ao ES5, mas o modo estrito ajuda a evitar algumas atribuições. A expressão condicional deve ser escrita neste formulário: (cond_expr instanceof Boolean ? cond_expr.valueOf() : cond_expr). |
| Exceção para erros de sintaxe | Erros de sintaxe geram exceções no tempo de execução. O tratamento de erros é inconsistente. Exemplo: Javascript compiler exception: unterminated string literal (null.null.script; line 1) in: var b = ' | Manipulação de erros de sintaxe mais consistente, especialmente no modo estrito. Exemplo: Evaluator: com.glide.script.RhinoEcmaError: unterminated string literal script : Line(1) column(9) ==>   1: var b = ' | Igual ao ES5, mas com tratamento mais robusto e mensagens de erro mais claras em mecanismos atualizados. Exemplo: SyntaxError: Unterminated string constant at line 1 ==>   1: var b = ' |
| Incrementar e decrementar | Permitido em variáveis, mas pode se comportar de forma inesperada com expressões complexas. Impressões: *** Script: c: 1 *** Script: gr.related_incidents: 1 *** Script: 2 *** Script: 3 | Maior clareza, mas ainda permitida em variáveis (`var`, `deixe`, `const`). Impressões: sn_es5: c: 0 sn_es5: gr.related_incidents: 1 sn_es5: 1 sn_es5: 2 | Igual ao ES5, com regras mais rígidas em alguns contextos (por exemplo, `const`). |
| Continuações de linha | Permitido com uma barra invertida (`\`), mas não recomendado devido a problemas de leitura. Neste exemplo, todas as três funções são chamadas. var expr = doFoo();  // do foo doBar();  // do bar finish();   // all done eval(expr); | Igual ao modo de compatibilidade; nenhuma mudança na manipulação de continuações de linha. No exemplo anterior, o ES5 chama somente a primeira função e trata tudo após o primeiro comentário, incluindo a nova linha como comentário até o fim da expressão. | O mesmo que ES5, mas os literais de modelo fornecem uma alternativa mais legível. |
| Ponto e vírgula ausentes | A inserção automática de ponto e vírgula (ASI) geralmente leva a um comportamento inesperado. | Lança um erro de sintaxe quando um ponto e vírgula está ausente. | O mesmo que ES5. As práticas atualizadas incentivam o uso de ponto-e-vírgula explícito. |
| Funções inexistentes | Chamar uma função inexistente gera um Erro de `Referência`. | Lança um `TypeError` se uma não função for chamada. | Lança um EcmaError quando uma função inexistente é chamada ou uma propriedade é referenciada. |
| Propriedades inexistentes | O acesso a uma propriedade inexistente retorna `undefined`; nenhum erro gerado. | Igual ao pré-ES5. | O mesmo que o modo de compatibilidade e o modo ES5 Standards. |
| Literais numéricos | Literais decimais e hexadecimais básicos. | Regras de análise mais rígidas introduzidas e melhor manipulação de literais numéricos. | Adição de literais binários (`0b`), octal (`0o`) e BigInt (`123n`). |
| Palavra-chave reservada como propriedade | Não é possível usar palavras-chave reservadas. | As palavras-chave reservadas podem ser usadas como nomes de propriedade sem erro, por exemplo, `obj.for`. Imprime o objeto quando retornado. | O mesmo que ES5. |
| Tratar deixe e render como palavras-chave | `deixe` e `rendimento` não são palavras-chave e podem ser usadas somente como identificadores. | `deixe` é introduzido como uma palavra-chave. `O rendimento` é reservado no modo estrito. | Ambas são palavras-chave. Usá-los como identificadores gera erros de sintaxe. |
[Tabela 1. Diferenças comportamentais nos modos JavaScript]

{#considerations-switching-javascript-mode__table_r4b_j4r_fcc}

