JavaScript sécurisé Type détection __Java

Source : Internet
Auteur : utilisateur
En JavaScript, le mécanisme de détection de type intégré n’est pas totalement fiable. Les opérateurs typeof et Instanceof mots-clés sont visés ici respectivement.
Parce que TypeOf, a un comportement imprévisible qui mène souvent à des résultats peu fiables lors de la détection de types de données, Safari renvoie « fonction » lors de l’application typeof aux expressions régulières, son retour prochain chrome de temps « objet ».
Instanceof, la présence de plusieurs portées globales (se référant à l’inclusion de l’IFRAME dans une page) est également un problème. Par exemple, le code suivant :
var isArray = value instanceof Array;


Le code ci-dessus doit être un tableau pour retourner True, valeur et doit également être dans la même portée globale dans le tableau. Si value est un tableau défini dans un autre cadre IFRAME, le code ci-dessus retourne la valeur false.
Il y a aussi un problème lors de la détection si un objet est un objet natif ou un objet définis par le développeur. Comme les objets JSON, parce que beaucoup de gens utilisent désormais la librairie JSON de Crockford, qui définit un objet JSON global, mais maintenant le nouveau navigateur est originaire de prend en charge les objets JSON et n’a pas besoin de s’appuyer sur des bibliothèques externes. Il est difficile de déterminer si l’objet JSON utilisé dans la page est natif.
La façon de résoudre le problème ci-dessus est le même. Tout d’abord, il faut savoir que l’appel de la méthode toString natif d’objet sur n’importe quelle valeur retourne une chaîne au format [Objcet XXX]. Chaque classe a une propriété de classe dans leur propre pays, et le nom du constructeur dans la chaîne ci-dessus est établi dans cette propriété. Nous allons donner un exemple :
console.log(Object.prototype.toString.call([]));//[object Array] console.log(Object.prototype.toString.call(window.Array));//[object function] console.log(Object.prototype.toString.call(Object));//[object function]   console.log(Object.prototype.toString.call(window));//[object global]   console.log(Object.prototype.toString.call(/^\d/));//[object RegExp]    console.log(Object.prototype.toString.call(new Object()));//[object Object] 


Parce que le nom du constructeur est indépendant de la portée globale, à l’aide de toString () garantit qu’une valeur cohérente est retournée. Avec cela, nous pouvons créer des fonctions qui déterminent avec précision le type d’objet. Comme quoi :
function isFunction(value){        return Object.prototype.toString.call(value)=="[object Function]";}


Notez, cependant, que c’est à dire que n’importe quelle fonction est implémentée en tant qu’objet COM, isFunction retourne False (car aucun d'entre eux sont des fonctions natives de JavaScript).
Dans le développement web, il est important d’être capable de distinguer les objets JavaScript indigènes et non indigènes. Seulement de cette manière pouvez-vous savoir exactement quelles sont les fonctionnalités réellement a un objet. Cette technique peut donner la bonne conclusion à n’importe quel objet, programmation à l’avenir des processus, nous devons juger le type d’objet quand nous voulons jeter les opérateurs TypeOf et instanceof.
Enfin, une remarque très importante : Object.prototype.toString () elle-même peut être modifiée, et les techniques décrites ci-dessus s’appliquent seulement à non modifiées des versions natives.

Nous contacter

Le contenu de cette page provient d'Internet et ne reflète pas l'opinion d'Alibaba Cloud ; les produits et services mentionnés sur cette page n'ont aucune relation avec Alibaba Cloud. Si le contenu de la page vous semble problématique, veuillez nous écrire un courriel, nous traiterons le problème dans les 5 jours suivant la réception de votre message.

Si vous constatez des cas de plagiat de la part de la communauté, veuillez envoyer un courriel à : info-contact@alibabacloud.com et fournir des preuves pertinentes. Un membre de notre équipe vous contactera dans les 5 jours ouvrables.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.