web-dev-qa-db-fra.com

"impossible de créer une variable en double qui masque une propriété globale"

Obtenir cette erreur sur Safari 10

Cela se produit lorsqu'un nom est donné à un const qui est exactement identique à un id de n'importe quel élément de la page.

const abc = document.querySelector("#abc"); //err
const abz = document.querySelector("#abc"); //no err
var abc = document.querySelector("#abc"); //no err

Y a-t-il une raison à cela?
Je sais que vous pouvez accéder aux éléments via window.abc, est-ce que cela fait partie du pourquoi?

Tester:

<!doctype html>
<html><body>
<div id="alpha"></div>
<script>
    const alpha = document.querySelector('#alpha');
    console.log(alpha);
</script>
</body></html>
15
House3272

C'est apparemment un problème pour Safari de déclarer une variable let/const qui partage le même nom qu'un attribut id sélectionné. J'ai eu quelques variables déclarées avec const comme vous et j'ai eu la même erreur. Changé pour laisser et toujours eu. Changé en var et cela a fonctionné.

31
Nathan

Cela doit être lié à ce bug webkit

Entre-temps, vous pouvez remplacer const par var ou modifier le nom de votre variable (par exemple: _alpha).

6
vinyll

La réponse de Nathan est correcte. Au lieu d'utiliser var, je viens de changer mon const pour avoir un cas différent de celui de l'id. Alors... 

const Abc = document.querySelector("#abc"); 

Encore hacky, juste une autre option. 

0
Matt