27 votes

Peut 'ce' jamais être nul en Javascript

J'ai une fonction le long des lignes suivantes:

    doSomething: function () {
        var parent = null;

        if (this === null) {
            parent = 'some default value';
        } else {
            parent = this.SomeValue();
        }
    }

Pourrait parent jamais être "certaine valeur par défaut' ou est la case null superflu?

Sinon, si j'ai utilisé le moins restrictif:

    doSomething: function () {
        var parent = this ? this.SomeValue() : 'some default value';
    }

Pourrait parent jamais être "certaine valeur par défaut' dans ce cas?

35voto

pimvdb Points 66332

Non le mode strict, this a fait l'objet d'une Object(this) de la transformation, il est donc toujours truthy. Les exceptions sont null et undefined qui correspondent à l'objet global. Donc, this n'est jamais null et toujours truthy à la fois des contrôles superflus.

En mode strict, cependant, this peut être n'importe quoi, donc, dans ce cas, vous auriez à regarder. Mais là encore, vous devez opter pour le mode strict vous-même, si vous ne le faites pas il n'y a pas de soucis.

(function() {               return this; }).call(null); // global object
(function() { "use strict"; return this; }).call(null); // null

La spécification de l'ES5 dit:

Le thisArg valeur est adopté sans modification en tant que la valeur de this. C'est un changement à partir de la version 3, où un indéfini ou null thisArg est remplacé par l'objet global et ToObject est appliqué à toutes les autres valeurs et le résultat est transmis comme cette valeur.

2voto

Evert Points 17625

Bien que n'étant pas une réponse directe à votre question.. dans un navigateur "cette" volonté, par défaut, reportez-vous à la "fenêtre" de l'objet. Sur nodejs il s'en réfère à l'objet global.

Je ne sais pas si il y a un cas où il pourrait être nul, mais il serait, à tout le moins inhabituelles.

2voto

Josh Earl Points 6462

L' this mot-clé ne doit pas jamais être nulle, mais il pourrait ne pas être ce que vous attendez. Vous pouvez vous retrouver référencement de l' window objet si vous ne faites pas attention.

Dans votre cas, je crois this devrait se référer à l' doSomething fonction.

var myObject = {
    myMethod: function() {
        console.log(this);
    }
};

myObject.myMethod(); // prints out a reference to the myMethod function

Voici un jsFiddle.

1voto

sethcall Points 1346

Vous pouvez voir ce qui se produit si vous essayez de forcer le Javascript pour utiliser une valeur null à la portée de n'importe quel navigateur. J'ai fait un exemple ici:

http://jsfiddle.net/rXsWj/

En bref, cette empiriquement, prouve que le navigateur changements 'null', à la 'fenêtre' à la volée. En revanche, si vous modifiez la valeur null à "a", vous verrez une alerte de " a " comme vous attendrait. Code de lien comme référence:

function a() {
    alert(this)
}

a.apply(null)

0voto

Pas de. La valeur de this ne sera jamais le texte 'some default value'.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X