Javascript, Was macht der Operator ^ (caret)?


78

Ich habe einen Javascript-Code:

<script type="text/javascript">
$(document).ready(function(){
  $('#calcular').click(function() {
    var altura2 = ((($('#ddl_altura').attr("value"))/100)^2);
    var peso = $('#ddl_peso').attr("value");
    var resultado = Math.round(parseFloat(peso / altura2)*100)/100;
    if (resultado > 0) {
      $('#resultado').html(resultado);
      $('#imc').show();
    };
  });
});
</script>

Was bedeutet der ^(Caret-) Operator in Javascript?

Antworten:


84

Der ^Operator ist der bitweise XOR-Operator. Verwenden Sie zum Quadrieren eines Werts Math.pow:

var altura2 = Math.pow($('#ddl_altura').attr("value")/100, 2);

4
In einer Sprache wie Javascript, in der Typen so locker sind, dass sie kaum existieren, bin ich fast überrascht, dass es sogar bitweise Operationen gibt :)
Tenfour

1
Ich kenne die pow-Funktion (der Loreal Web Master scheint nein ...), aber ich konnte den Operator ^ für Javascript nicht finden. Danke für den Link!
Torres

3
Schöner Fang! Ich habe es an meinen spanischen Freund weitergeleitet, der ein wenig geschockt war. Bemerkt, wie zum Beispiel 200cm / 70kg Ihnen einen BMI von unendlich gibt ;-)
Michael

5
Um einen Wert zu quadrieren, multiplizieren Sie ihn mit sich selbst. Es ist auf fast allen Plattformen schneller und genauer.
Stephen Canon

4
Wird in ES7 viel einfacher:2**5 //32
Viney

38

^ führt zum Beispiel exklusives ODER (XOR) durch

6ist 110binär, 3ist 011binär und

6 ^ 3bedeutet 110 XOR 011101 (5).

  110   since 0 ^ 0 => 0
  011         0 ^ 1 => 1
  ---         1 ^ 0 => 1
  101         1 ^ 1 => 0

Math.pow (x, 2) berechnet, aber für Quadrate verwenden Sie besser, x*xda Math.pow Logarithmen verwendet und Sie mehr Approximationsfehler erhalten. ( x² ~ exp(2.log(x)))


War sich der logarithmischen Tatsache nicht bewusst! Vielen Dank! (Es ist also wahrscheinlich auch schneller, nicht wahr?)
Michael

Wahrscheinlich schneller (während mathematische Prozessoren für doubleeinfache Operationen ziemlich schnell sind - das Protokoll ist wahrscheinlich langsamer, wenn eine Optimierung der Taylor-Reihe verwendet wird).
e2-e4

Ich frage mich, warum Math.pow nicht nur x * x verwendet ?!
Jowen

2
@Jowen für x² ... Aber was ist, wenn Sie x ^ 2.123123 berechnen müssen?
e2-e4


2

Es heißt bitweises XOR. Lassen Sie es mich erklären:

Du hast :

Decimal Binary   
0         0
1         01
2         10
3         11

Jetzt wollen wir 3^2=? dann haben wir11^10=?

11
10
---
01
---

so 11^10=01 01in Dezimal ist 1.

Das können wir also sagen 3^2=1;


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.