2017-10-18 11 views
1

~(function() {}).toString(); est absolument valide syntaxe JavaScript et j'ai vu qu'il renvoie -1.Pourquoi l'opérateur ~ renvoie -1 pour une fonction en Javascript?

Je sais que ~ n'est pas opérateur. Par exemple ~5 = ~0101 ce qui signifie 1010 en base 2 et 10 en décimal.

console.log(~(function() {}).toString());

Mais quelle est l'explication dans cette situation?

Peut-être que ~NaN renvoie -1.

+0

Explication: https://www.joezimjs.com/javascript/great-mystery-of-the-tilde/ –

+1

Ce même si vous J'essaierai de le faire avec 'NaN' comme si' (NaN) 'donnerait le même résultat. – Krusader

Répondre

2

Comme par spec

Soit OLDVALUE être ToInt32 (GetValue (expr)).

Number((function() {}).toString();) ->Number("function() {}") ->NaN

Encore une fois selon spec

Si le nombre est NaN, +0, -0, + ∞ ou -∞, retour +0.

si ~NaN revient à ~0 qui est -1

2

Taken de this blog: The Great Mystery of the Tilde(~):

Le tilde est un opérateur qui fait quelque chose que vous penseriez normalement ne serait pas sans objet. C'est un opérateur unaire qui prend l'expression à sa droite exécute ce petit algorithme dessus (où N est l'expression à la droite du tilde): -(N+1). Voir ci-dessous pour quelques échantillons.

console.log(~-2); // 1 
console.log(~-1); // 0 
console.log(~0); // -1 
console.log(~1); // -2 
console.log(~2); // -3