6
votes

Attraper "nullpointerexceptions" en JavaScript

J'écris un peu de code dans le prototype.js qui retourne NULL si un identifiant DOM-ID n'a pas été trouvé.

* Error
* EvalError
* RangeError
* ReferenceError
* SyntaxError
* TypeError
* URIError
* DOMException
* EventException
* RangeException


3 commentaires

Je pouvais simplement vérifier NULL avant d'exécuter une telle déclaration, mais cela devient fatiguant. hein? Êtes-vous un développeur ou pas? Ecrire un code robuste avec des chèques est une pratique normale et bonne pratique.


Bon point, mais imbriqué à plusieurs reprises si des clauses rendent mon code vraiment illisible. J'aurais dû dire qu'au lieu de "fatiguer".


accepter la réponse si cela fonctionne pour vous


4 Réponses :


0
votes

Ignorez simplement quelle exception c'est ...

try
{
    null.hey()
}
catch(e)
{
    //handle it here
}


0 commentaires

2
votes

Je ne crois pas qu'il y ait une unité à trouver. Chrome jette un typeError, mais c'est-à-dire une erreur, vous devrez donc probablement tout attraper et faire de graves hypothèses. Mieux vaut vérifier pour NULL d'abord.

var element = $('someId');
if (element) {
    element.show();
    // whatever else...
}


0 commentaires

1
votes

Si vous allez à la chaîne. show () code> sur $ ("SIZEID") code> puis vérifiez son résultat en premier.

function NullReferenceException(id) {this.id = id}

function $my(id) {
    var el = $(id);
    if (!el)
        throw new NullReferenceException(id);
    return el
}

try {
    $my("iDontExistId").show();
} catch (e) {
    if (e instanceof NullReferenceException)
        alert(e.id + " doesn't exist");
}


0 commentaires

1
votes

La bonne façon de gérer cela est de vérifier que NULL avant de faire quelque chose avec un objet. Il y a plusieurs façons sténa de faire cela, le plus court est (comme Alex K) écrivit xxx pré>

mais cela me semble être plus difficile à lire. P>

Pour répondre à votre Question directement Vous pouvez faire P>

$('#someId').show()


1 commentaires

Je me rends compte cela et mais mon patron a insisté sur le prototype. J'aime mais cette question est vraiment annying.