From 004b3c5fc8d71b68fcb019c9e0346bf80024dbbd Mon Sep 17 00:00:00 2001 From: Florian Merz Date: Thu, 11 Feb 2021 14:48:47 +0100 Subject: unslug nl: move --- .../nl/web/javascript/reference/classes/index.html | 252 ++++++++++++++++++ .../global_objects/object/prototype/index.html | 241 ----------------- .../reference/global_objects/symbol/index.html | 205 +++++++++++++++ .../reference/global_objects/symbool/index.html | 205 --------------- .../nl/web/javascript/reference/klasses/index.html | 252 ------------------ .../web/javascript/reference/operatoren/index.html | 288 --------------------- .../reference/operatoren/typeof/index.html | 244 ----------------- .../web/javascript/reference/operators/index.html | 288 +++++++++++++++++++++ .../reference/operators/typeof/index.html | 244 +++++++++++++++++ 9 files changed, 989 insertions(+), 1230 deletions(-) create mode 100644 files/nl/web/javascript/reference/classes/index.html delete mode 100644 files/nl/web/javascript/reference/global_objects/object/prototype/index.html create mode 100644 files/nl/web/javascript/reference/global_objects/symbol/index.html delete mode 100644 files/nl/web/javascript/reference/global_objects/symbool/index.html delete mode 100644 files/nl/web/javascript/reference/klasses/index.html delete mode 100644 files/nl/web/javascript/reference/operatoren/index.html delete mode 100644 files/nl/web/javascript/reference/operatoren/typeof/index.html create mode 100644 files/nl/web/javascript/reference/operators/index.html create mode 100644 files/nl/web/javascript/reference/operators/typeof/index.html (limited to 'files/nl/web/javascript/reference') diff --git a/files/nl/web/javascript/reference/classes/index.html b/files/nl/web/javascript/reference/classes/index.html new file mode 100644 index 0000000000..ca5210371c --- /dev/null +++ b/files/nl/web/javascript/reference/classes/index.html @@ -0,0 +1,252 @@ +--- +title: Klassen +slug: Web/JavaScript/Reference/Klasses +translation_of: Web/JavaScript/Reference/Classes +--- +
{{JsSidebar("Classes")}}
+ +

JavaScript classes zijn nieuw in ECMAScript 6. De class syntax is geen object-oriented inheritance model in JavaScript. JavaScript classes brengen een veel eenvoudigere en duidelijkere syntax voor het creëren van objecten.

+ +

Classes definiëren

+ +

Classes zijn eigenlijk functions, net zoals je function expressions en function declarations kan definiëren, de class syntax heeft twee componenten: class expressies en class declaraties.

+ +

Class declaraties

+ +

Eén manier om een class te definiëren is door gebruik te maken van class declaration. Om een klasse te declareren, gebruik je het class keyword gevolgd door de naam van de class. ("Polygon" hier).

+ +
class Polygon {
+  constructor(height, width) {
+    this.height = height;
+    this.width = width;
+  }
+}
+ +

Hoisting

+ +

Een belangrijk verschil tussen function declarations en class declarations is dat function declarations {{Glossary("Hoisting", "hoisted")}} zijn en class declarations niet. Je moet eerst je klasse declareren voor je het kan gebruiken, anders krijg je een {{jsxref("ReferenceError")}}:

+ +
var p = new Polygon(); // ReferenceError
+
+class Polygon {}
+
+ +

Class expressions

+ +

Een class expression is een andere manier om een class te definiëren. Class expressions kunnen named of unnamed zijn. De naam gegeven aan een named class expression is local aan de body van de class.

+ +
// unnamed
+var Polygon = class {
+  constructor(height, width) {
+    this.height = height;
+    this.width = width;
+  }
+};
+
+// named
+var Polygon = class Polygon {
+  constructor(height, width) {
+    this.height = height;
+    this.width = width;
+  }
+};
+
+ +

Class body en method definitions

+ +

De body van een class is het stuk tussen de curly brackets {}. Hier kan je class members definiëren, zoals methodes of constructors.

+ +

Strict mode

+ +

De bodies van class declarations en class expressions worden uitgevoerd in strict mode. Constructor, static en prototype methods, getter en setter functions worden bijvoorbeeld uitgevoerd in strict mode.

+ +

Constructor

+ +

De constructor methode is een speciale methode voor het creëren en initializeren van een object voor de klasse. Er kan maar één speciale methode zijn met de naam "constructor" in een klasse. Een {{jsxref("SyntaxError")}} wordt gegooid indien de klasse meerdere constructor methodes heeft.

+ +

Een constructor kan gebruik maken van het super keyword om de constructor van de parent class op te roepen.

+ +

Prototype methods

+ +

Zie ook method definitions.

+ +
class Polygon {
+  constructor(height, width) {
+    this.height = height;
+    this.width = width;
+  }
+
+  get area() {
+    return this.calcArea()
+  }
+
+  calcArea() {
+    return this.height * this.width;
+  }
+}
+ +

Static methods

+ +

Het static keyword beschrijft een statische methode voor een klasse. Statische methodes kunnen worden opgeroepen zonder dat er een instantie gemaakt is van de klasse en kunnen ook niet opgeroepen worden wanneer er een instantie van gemaakt is. Statische methodes zijn dikwijls gebruikt als utility functions voor een applicatie.

+ +
class Point {
+    constructor(x, y) {
+        this.x = x;
+        this.y = y;
+    }
+
+    static distance(a, b) {
+        const dx = a.x - b.x;
+        const dy = a.y - b.y;
+
+        return Math.sqrt(dx*dx + dy*dy);
+    }
+}
+
+const p1 = new Point(5, 5);
+const p2 = new Point(10, 10);
+
+console.log(Point.distance(p1, p2));
+ +

Sub classing met extends

+ +

Het extends keyword wordt gebruikt in class declarations of class expressions om een klasse aan te maken als kind van een andere klasse.

+ +
class Animal {
+  constructor(name) {
+    this.name = name;
+  }
+
+  speak() {
+    console.log(this.name + ' makes a noise.');
+  }
+}
+
+class Dog extends Animal {
+  speak() {
+    console.log(this.name + ' barks.');
+  }
+}
+
+ +

Sub classing built-in objects

+ +

TBD

+ +

Super class calls with super

+ +

Het super keyword wordt gebruikt om een methode op te roepen in de parent klasse van het object.

+ +
class Cat {
+  constructor(name) {
+    this.name = name;
+  }
+
+  speak() {
+    console.log(this.name + ' makes a noise.');
+  }
+}
+
+class Lion extends Cat {
+  speak() {
+    super.speak();
+    console.log(this.name + ' roars.');
+  }
+}
+
+ +

ES5 inheritance syntax en ES6 classes syntax vergeleken

+ +

TBD

+ +

Voorbeelden

+ +

TBD

+ +

Specificaties

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES6', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ES6')}}Initial definition.
{{SpecName('ESDraft', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ESDraft')}} 
+ +

Browser compatibiliteit

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)MS EdgeInternet ExplorerOperaSafari
Basic support{{CompatChrome(42.0)}}[1]4513{{CompatNo}}{{CompatNo}}{{CompatSafari(9.0)}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari MobileChrome for Android
Basic support{{CompatNo}}45{{CompatUnknown}}{{CompatUnknown}}9{{CompatChrome(42.0)}}[1]
+
+ +

[1] Requires strict mode. Non-strict mode support is behind the flag Enable Experimental JavaScript, disabled by default.

+ +

Zie ook

+ + diff --git a/files/nl/web/javascript/reference/global_objects/object/prototype/index.html b/files/nl/web/javascript/reference/global_objects/object/prototype/index.html deleted file mode 100644 index 8fcfcbfa59..0000000000 --- a/files/nl/web/javascript/reference/global_objects/object/prototype/index.html +++ /dev/null @@ -1,241 +0,0 @@ ---- -title: Object.prototype -slug: Web/JavaScript/Reference/Global_Objects/Object/prototype -tags: - - JavaScript - - Object - - Property -translation_of: Web/JavaScript/Reference/Global_Objects/Object -translation_of_original: Web/JavaScript/Reference/Global_Objects/Object/prototype ---- -
{{JSRef}}
- -

De Object.prototype eigenschap vertegenwoordigt het {{jsxref("Object")}} prototype object.

- -

{{js_property_attributes(0, 0, 0)}}

- -

Beschrijving

- -

Alle objecten in JavaScript zijn afstammelingen van het {{jsxref("Object")}}; alle objecten erven methode's en eigenschappen van Object.prototype, althans kunnen ze overschreden worden (behalve een Object met een null prototype, i.e Object.create(null)). Bijvoorbeeld, een andere constructors' prototypes overschrijden de constructor eigenschap en voorzien hun eigen  {{jsxref("Object.prototype.toString()", "toString()")}} methode's.

- -

Veranderingen in het Object prototype object zijn zichtbaar voor alle objecten door prototype chaining, tenzij de eigenschappen en methode's onderworpen door deze veranderingen worden overschreden verderop de prototype chain. Dit voorziet een vrij krachtig althans potentieel gevaarlijk mechanisme om het gedrag van een object te overschrijden of aan te vullen.

- -

Eigenschappen

- -
-
{{jsxref("Object.prototype.constructor")}}
-
Beschrijft de functie dat het object's prototype aanmaakt.
-
{{jsxref("Object.prototype.__proto__")}} {{non-standard_inline}}
-
Wijst aan het object welke was bebruikt als prototype wanneer het object was geinstantieerd.
-
{{jsxref("Object.prototype.__noSuchMethod__")}} {{non-standard_inline}}
-
Laat het toe om een functie te definieeren dat zal worden uitgevoerd wanneer een ongedefinieerd lid van een object word geroepen als een methode. 
-
{{jsxref("Object.prototype.count","Object.prototype.__count__")}} {{obsolete_inline}}
-
Used to return the number of enumerable properties directly on a user-defined object, but has been removed.
-
{{jsxref("Object.prototype.parent","Object.prototype.__parent__")}} {{obsolete_inline}}
-
Used to point to an object's context, but has been removed.
-
- -

Methode's

- -
-
{{jsxref("Object.prototype.__defineGetter__()")}} {{non-standard_inline}} {{deprecated_inline}}
-
Associeert een functie met een eigenschap dat, wanneer toegankelijk, een functie uitvoerd en zijn keert zijn return waarde terug.
-
{{jsxref("Object.prototype.__defineSetter__()")}} {{non-standard_inline}} {{deprecated_inline}}
-
Associeert een functie met een eigenschap dat, wanneer gezet, een functie uitvoerd dat de eigenchap veranderd.
-
{{jsxref("Object.prototype.__lookupGetter__()")}} {{non-standard_inline}} {{deprecated_inline}}
-
Keert de functie geassocieert met de gespecificieerde eigenschap door de {{jsxref("Object.prototype.__defineGetter__()", "__defineGetter__()")}} methode.
-
{{jsxref("Object.prototype.__lookupSetter__()")}} {{non-standard_inline}} {{deprecated_inline}}
-
Keert de functie geassocieert met de gespecificieerde eigenschap door de {{jsxref("Object.prototype.__defineSetter__()", "__defineSetter__()")}} method.
-
{{jsxref("Object.prototype.hasOwnProperty()")}}
-
Keert een boolean terug die aanwijst of een object dat de eigenschap bevat als een directe eigenschap van dat object en niet wordt geerfd door de prototype chain.
-
{{jsxref("Object.prototype.isPrototypeOf()")}}
-
Keert een boolean waarde terug die aanwijst of het object in de prototype chain zit van het object van waaruit deze methode is geroepen.
-
{{jsxref("Object.prototype.propertyIsEnumerable()")}}
-
Keert een boolean waarde terug die aanwijst of de ECMAScript [[Enumerable]] attribute is gezet.
-
{{jsxref("Object.prototype.toSource()")}} {{non-standard_inline}}
-
Keert een string terug die de bron van een object zijn literal, die het object waarop deze methode word op geroepen represedenteerd; je kan deze waarde gebruiken om een niew object te maken.
-
{{jsxref("Object.prototype.toLocaleString()")}}
-
Roept {{jsxref("Object.toString", "toString()")}}.
-
{{jsxref("Object.prototype.toString()")}}
-
Keert een string representatie terug van het object.
-
{{jsxref("Object.prototype.unwatch()")}} {{non-standard_inline}}
-
Verwijderd een watchpoint van een eigenschap van het object.
-
{{jsxref("Object.prototype.valueOf()")}}
-
Keert een primitive waarde terug van het gespecifieerde object.
-
{{jsxref("Object.prototype.watch()")}} {{non-standard_inline}}
-
Voegt een watchpoint toe aan de eigenschap van het object.
-
{{jsxref("Object.prototype.eval()")}} {{obsolete_inline}}
-
Used to evaluate a string of JavaScript code in the context of the specified object, but has been removed.
-
- -

Voorbeelden

- -

Als het gedrag van bestaande Object.prototype's methode's worden veranderd, overweeg code te injecteren door je uitbreiding in te wikkelen voor of achter de bestaande logica. Bijvoorbeeld, deze (ongeteste) code zal onvoorwaardelijk aangepaste logica uitvoeren vooralleer de ingebouwde logica of anderman's uitbreiding word uitgevoerd.

- -

Wanneer een functie is geroepen zullen de argumenten worden gehouden in de array-achtige "variable" van de argumenten. Bijvoorbeeld, in de call "myFn(a, b, c)", zullen de argumenten binnenin myFn's lichaam 3 array elementen bevatten die coressponderen tot (a, b, c).  Wanneer prototype's met haken worden bijgewerkt, voer simpelweg deze & de argementen (de call toestand) toe aan het huidig gedrag door apply() te roepen op de functie. Dit patroon can worden gebruikt voor elk prototype, zoals Node.prototype, Function.prototype, etc.

- -

var current = Object.prototype.valueOf; // Since my property "-prop-value" is cross-cutting and isn't always // on the same prototype chain, I want to modify Object.prototype: Object.prototype.valueOf = function() { if (this.hasOwnProperty("-prop-value") {   return this["-prop-value"];   } else {   // It doesn't look like one of my objects, so let's fall back on   // the default behavior by reproducing the current behavior as best we can.   // The apply behaves like "super" in some other languages.   // Even though valueOf() doesn't take arguments, some other hook may.   return current.apply(this, arguments);   } }

- -

Doordat JavaScript geen sub-classe object bevat, prototype is een handige workaround om een "base class" object aan te maken van bepaalde functie's die zich gedragen als objecten. Bijvoorbeeld:

- -
var Person = function() {
-  this.canTalk = true;
-};
-
-Person.prototype.greet = function() {
-  if (this.canTalk) {
-    console.log('Hi, I am ' + this.name);
-  }
-};
-
-var Employee = function(name, title) {
-  Person.call(this);
-  this.name = name;
-  this.title = title;
-};
-
-Employee.prototype = Object.create(Person.prototype);
-Employee.prototype.constructor = Employee;
-
-Employee.prototype.greet = function() {
-  if (this.canTalk) {
-    console.log('Hi, I am ' + this.name + ', the ' + this.title);
-  }
-};
-
-var Customer = function(name) {
-  Person.call(this);
-  this.name = name;
-};
-
-Customer.prototype = Object.create(Person.prototype);
-Customer.prototype.constructor = Customer;
-
-var Mime = function(name) {
-  Person.call(this);
-  this.name = name;
-  this.canTalk = false;
-};
-
-Mime.prototype = Object.create(Person.prototype);
-Mime.prototype.constructor = Mime;
-
-var bob = new Employee('Bob', 'Builder');
-var joe = new Customer('Joe');
-var rg = new Employee('Red Green', 'Handyman');
-var mike = new Customer('Mike');
-var mime = new Mime('Mime');
-
-bob.greet();
-// Hi, I am Bob, the Builder
-
-joe.greet();
-// Hi, I am Joe
-
-rg.greet();
-// Hi, I am Red Green, the Handyman
-
-mike.greet();
-// Hi, I am Mike
-
-mime.greet();
-
- -

Specificaties

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpecificatieStatusCommentaar
{{SpecName('ES1')}}{{Spec2('ES1')}}Initiale definitie. Geimplemented in JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.2.3.1', 'Object.prototype')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-object.prototype', 'Object.prototype')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.prototype', 'Object.prototype')}}{{Spec2('ESDraft')}} 
- -

Browser ondersteuning

- -
{{CompatibilityTable}}
- -
- - - - - - - - - - - - - - - - - - - -
SoortChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basis Ondersteuning{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
-
- -
- - - - - - - - - - - - - - - - - - - - - -
SoortAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
- - - - - - - -
Basis Ondersteuning 
-
{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
-
- -

See also

- - diff --git a/files/nl/web/javascript/reference/global_objects/symbol/index.html b/files/nl/web/javascript/reference/global_objects/symbol/index.html new file mode 100644 index 0000000000..f0777451c8 --- /dev/null +++ b/files/nl/web/javascript/reference/global_objects/symbol/index.html @@ -0,0 +1,205 @@ +--- +title: Symbool +slug: Web/JavaScript/Reference/Global_Objects/Symbool +tags: + - ECMAScript 2015 + - JavaScript + - Klasse + - Symbool +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol +--- +
{{JSRef}}
+ +

Het gegevenstype symbool is een primitief gegevenstype. De Symbol() functie geeft een waarde terug (returns a value) van het type symbool, heeft statische eigenschappen die verscheidene leden van ingebouwde objecten blootstelt, heeft statische methoden die het globale symbolregister blootstellen en vertegenwoordigd een ingebouwde objectklasse. Maar is onvolledig als een constructor, omdat het niet de "new Symbol()" syntaxis ondersteund.

+ +

Elke waarde teruggekregen van Symbol() is uniek. Zo'n teruggekregen waarde kan, bijvoorbeeld, gebruikt worden als identificatiemiddel voor objecteigenschappen; het primaire doel van dit gegevenstype. Hoewel er andere use-cases zijn, zoals het beschikbaar maken van ondoorzichtige gegevenstypen of als algemeen uniek identificatiemiddel. Meer uitleg over het doel en gebruik van het symbool is te vinden in de woordenlijst.

+ +

Beschrijving

+ +

Om een nieuw primitief symbool te creëren, schrijf je Symbol() met een optionele String als beschrijving:

+ +
let sym1 = Symbol()
+let sym2 = Symbol('foo')
+let sym3 = Symbol('foo')
+
+ +

De bovenstaande code creëert drie nieuwe symbolen. Let er op dat Symbol("foo") niet de string "foo" omzet naar een symbool maar dat het telkens een nieuw uniek symbool creëert:

+ +
Symbol('foo') === Symbol('foo')  // false
+
+ +

De volgende syntaxis met de {{jsxref("Operators/new", "new")}} operator zal een {{jsxref("TypeError")}}: afwerpen:

+ +
let sym = new Symbol()  // TypeError
+
+ +

Dit behoed auteurs ervoor om nadrukkelijk een Symbol wrapper-object te creëren in plaats van een nieuwe symboolwaarde. Terwijl normaal gesproken primitieve gegevenstypen wel gemaakt kunnen worden met een wrapper-object. (Zoals: new Boolean, new String en new Number).

+ +

Als je echt een Symbol wrapper-object wilt maken, kun je dit doen met de Object() functie:

+ +
let sym = Symbol('foo')
+typeof sym      // "symbol"
+let symObj = Object(sym)
+typeof symObj   // "object"
+
+ +

Gedeelde symbolen in het globale symboolregister

+ +

De bovenstaande syntaxis, die gebruik maakt van de Symbol() functie, creëert alleen niet een globaal symbool dat te gebruiken is door je gehele codebase. Om symbolen te creëren die door al je bestanden en zelfs door je realms (met elk hun eigen globale scope) te gebruiken zijn; gebruik je de methoden {{jsxref("Symbol.for()")}} en {{jsxref("Symbol.keyFor()")}}. Om, respectievelijksymbolen in het globale symbolenregister aan te maken en terug te krijgen.

+ +

Symbooleigenschappen vinden in objecten

+ +

De methode {{jsxref("Object.getOwnPropertySymbols()")}} geeft een array met symbolen terug en laat je symbooleigenschappen vinden in een opgegeven object. Let er op dat elk object geïnitialiseerd wordt zonder eigen symbooleigenschappen, dus deze array zal leeg zijn tenzij je een symbool als eigenschap hebt gegeven aan een object. 

+ +

Constructor

+ +
+
Symbol()
+
De  Symbol() constructor geeft een waarde terug van het type symbol, maar is incompleet als een constructor omdat het niet de "new Symbol()" syntaxis ondersteund.
+
+ +

Static properties

+ +
+
{{jsxref("Symbol.asyncIterator")}}
+
A method that returns the default AsyncIterator for an object. Used by for await...of.
+
{{jsxref("Symbol.hasInstance")}}
+
A method determining if a constructor object recognizes an object as its instance. Used by {{jsxref("Operators/instanceof", "instanceof")}}.
+
{{jsxref("Symbol.isConcatSpreadable")}}
+
A Boolean value indicating if an object should be flattened to its array elements. Used by {{jsxref("Array.prototype.concat()")}}.
+
{{jsxref("Symbol.iterator")}}
+
A method returning the default iterator for an object. Used by for...of.
+
{{jsxref("Symbol.match")}}
+
A method that matches against a string, also used to determine if an object may be used as a regular expression. Used by {{jsxref("String.prototype.match()")}}.
+
{{jsxref("Symbol.matchAll")}}
+
A method that returns an iterator, that yields matches of the regular expression against a string. Used by {{jsxref("String.prototype.matchAll()")}}.
+
{{jsxref("Symbol.replace")}}
+
A method that replaces matched substrings of a string. Used by {{jsxref("String.prototype.replace()")}}.
+
{{jsxref("Symbol.search")}}
+
A method that returns the index within a string that matches the regular expression. Used by {{jsxref("String.prototype.search()")}}.
+
{{jsxref("Symbol.split")}}
+
A method that splits a string at the indices that match a regular expression. Used by {{jsxref("String.prototype.split()")}}.
+
{{jsxref("Symbol.species")}}
+
A constructor function that is used to create derived objects.
+
{{jsxref("Symbol.toPrimitive")}}
+
A method converting an object to a primitive value.
+
{{jsxref("Symbol.toStringTag")}}
+
A string value used for the default description of an object. Used by {{jsxref("Object.prototype.toString()")}}.
+
{{jsxref("Symbol.unscopables")}}
+
An object value of whose own and inherited property names are excluded from the with environment bindings of the associated object.
+
+ +

Static methods

+ +
+
{{jsxref("Symbol.for()", "Symbol.for(key)")}}
+
Searches for existing symbols with the given key and returns it if found. Otherwise a new symbol gets created in the global symbol registry with key.
+
{{jsxref("Symbol.keyFor", "Symbol.keyFor(sym)")}}
+
Retrieves a shared symbol key from the global symbol registry for the given symbol.
+
+ +

Instance properties

+ +
+
{{jsxref("Symbol.prototype.description")}}
+
A read-only string containing the description of the symbol.
+
+ +

Instance methods

+ +
+
{{jsxref("Symbol.prototype.toSource()")}}
+
Returns a string containing the source of the {{jsxref("Global_Objects/Symbol", "Symbol")}} object. Overrides the {{jsxref("Object.prototype.toSource()")}} method.
+
{{jsxref("Symbol.prototype.toString()")}}
+
Returns a string containing the description of the Symbol. Overrides the {{jsxref("Object.prototype.toString()")}} method.
+
{{jsxref("Symbol.prototype.valueOf()")}}
+
Returns the primitive value of the {{jsxref("Symbol")}} object. Overrides the {{jsxref("Object.prototype.valueOf()")}} method.
+
{{jsxref("Symbol.prototype.@@toPrimitive()", "Symbol.prototype[@@toPrimitive]")}}
+
Returns the primitive value of the {{jsxref("Symbol")}} object.
+
+ +

Examples

+ +

Using the typeof operator with symbols

+ +

The {{jsxref("Operators/typeof", "typeof")}} operator can help you to identify symbols.

+ +
typeof Symbol() === 'symbol'
+typeof Symbol('foo') === 'symbol'
+typeof Symbol.iterator === 'symbol'
+
+ +

Symbol type conversions

+ +

Some things to note when working with type conversion of symbols.

+ + + +

Symbols and for...in iteration

+ +

Symbols are not enumerable in for...in iterations. In addition, {{jsxref("Object.getOwnPropertyNames()")}} will not return symbol object properties, however, you can use {{jsxref("Object.getOwnPropertySymbols()")}} to get these.

+ +
let obj = {}
+
+obj[Symbol('a')] = 'a'
+obj[Symbol.for('b')] = 'b'
+obj['c'] = 'c'
+obj.d = 'd'
+
+for (let i in obj) {
+   console.log(i)  // logs "c" and "d"
+}
+ +

Symbols and JSON.stringify()

+ +

Symbol-keyed properties will be completely ignored when using JSON.stringify():

+ +
JSON.stringify({[Symbol('foo')]: 'foo'})
+// '{}'
+
+ +

For more details, see {{jsxref("JSON.stringify()")}}.

+ +

Symbol wrapper objects as property keys

+ +

When a Symbol wrapper object is used as a property key, this object will be coerced to its wrapped symbol:

+ +
let sym = Symbol('foo')
+let obj = {[sym]: 1}
+obj[sym]             // 1
+obj[Object(sym)]     // still 1
+
+ +

Specifications

+ + + + + + + + + + +
Specification
{{SpecName('ESDraft', '#sec-symbol-objects', 'Symbol')}}
+ +

Browser compatibility

+ + + +

{{Compat("javascript.builtins.Symbol")}}

+ +

See also

+ + diff --git a/files/nl/web/javascript/reference/global_objects/symbool/index.html b/files/nl/web/javascript/reference/global_objects/symbool/index.html deleted file mode 100644 index f0777451c8..0000000000 --- a/files/nl/web/javascript/reference/global_objects/symbool/index.html +++ /dev/null @@ -1,205 +0,0 @@ ---- -title: Symbool -slug: Web/JavaScript/Reference/Global_Objects/Symbool -tags: - - ECMAScript 2015 - - JavaScript - - Klasse - - Symbool -translation_of: Web/JavaScript/Reference/Global_Objects/Symbol ---- -
{{JSRef}}
- -

Het gegevenstype symbool is een primitief gegevenstype. De Symbol() functie geeft een waarde terug (returns a value) van het type symbool, heeft statische eigenschappen die verscheidene leden van ingebouwde objecten blootstelt, heeft statische methoden die het globale symbolregister blootstellen en vertegenwoordigd een ingebouwde objectklasse. Maar is onvolledig als een constructor, omdat het niet de "new Symbol()" syntaxis ondersteund.

- -

Elke waarde teruggekregen van Symbol() is uniek. Zo'n teruggekregen waarde kan, bijvoorbeeld, gebruikt worden als identificatiemiddel voor objecteigenschappen; het primaire doel van dit gegevenstype. Hoewel er andere use-cases zijn, zoals het beschikbaar maken van ondoorzichtige gegevenstypen of als algemeen uniek identificatiemiddel. Meer uitleg over het doel en gebruik van het symbool is te vinden in de woordenlijst.

- -

Beschrijving

- -

Om een nieuw primitief symbool te creëren, schrijf je Symbol() met een optionele String als beschrijving:

- -
let sym1 = Symbol()
-let sym2 = Symbol('foo')
-let sym3 = Symbol('foo')
-
- -

De bovenstaande code creëert drie nieuwe symbolen. Let er op dat Symbol("foo") niet de string "foo" omzet naar een symbool maar dat het telkens een nieuw uniek symbool creëert:

- -
Symbol('foo') === Symbol('foo')  // false
-
- -

De volgende syntaxis met de {{jsxref("Operators/new", "new")}} operator zal een {{jsxref("TypeError")}}: afwerpen:

- -
let sym = new Symbol()  // TypeError
-
- -

Dit behoed auteurs ervoor om nadrukkelijk een Symbol wrapper-object te creëren in plaats van een nieuwe symboolwaarde. Terwijl normaal gesproken primitieve gegevenstypen wel gemaakt kunnen worden met een wrapper-object. (Zoals: new Boolean, new String en new Number).

- -

Als je echt een Symbol wrapper-object wilt maken, kun je dit doen met de Object() functie:

- -
let sym = Symbol('foo')
-typeof sym      // "symbol"
-let symObj = Object(sym)
-typeof symObj   // "object"
-
- -

Gedeelde symbolen in het globale symboolregister

- -

De bovenstaande syntaxis, die gebruik maakt van de Symbol() functie, creëert alleen niet een globaal symbool dat te gebruiken is door je gehele codebase. Om symbolen te creëren die door al je bestanden en zelfs door je realms (met elk hun eigen globale scope) te gebruiken zijn; gebruik je de methoden {{jsxref("Symbol.for()")}} en {{jsxref("Symbol.keyFor()")}}. Om, respectievelijksymbolen in het globale symbolenregister aan te maken en terug te krijgen.

- -

Symbooleigenschappen vinden in objecten

- -

De methode {{jsxref("Object.getOwnPropertySymbols()")}} geeft een array met symbolen terug en laat je symbooleigenschappen vinden in een opgegeven object. Let er op dat elk object geïnitialiseerd wordt zonder eigen symbooleigenschappen, dus deze array zal leeg zijn tenzij je een symbool als eigenschap hebt gegeven aan een object. 

- -

Constructor

- -
-
Symbol()
-
De  Symbol() constructor geeft een waarde terug van het type symbol, maar is incompleet als een constructor omdat het niet de "new Symbol()" syntaxis ondersteund.
-
- -

Static properties

- -
-
{{jsxref("Symbol.asyncIterator")}}
-
A method that returns the default AsyncIterator for an object. Used by for await...of.
-
{{jsxref("Symbol.hasInstance")}}
-
A method determining if a constructor object recognizes an object as its instance. Used by {{jsxref("Operators/instanceof", "instanceof")}}.
-
{{jsxref("Symbol.isConcatSpreadable")}}
-
A Boolean value indicating if an object should be flattened to its array elements. Used by {{jsxref("Array.prototype.concat()")}}.
-
{{jsxref("Symbol.iterator")}}
-
A method returning the default iterator for an object. Used by for...of.
-
{{jsxref("Symbol.match")}}
-
A method that matches against a string, also used to determine if an object may be used as a regular expression. Used by {{jsxref("String.prototype.match()")}}.
-
{{jsxref("Symbol.matchAll")}}
-
A method that returns an iterator, that yields matches of the regular expression against a string. Used by {{jsxref("String.prototype.matchAll()")}}.
-
{{jsxref("Symbol.replace")}}
-
A method that replaces matched substrings of a string. Used by {{jsxref("String.prototype.replace()")}}.
-
{{jsxref("Symbol.search")}}
-
A method that returns the index within a string that matches the regular expression. Used by {{jsxref("String.prototype.search()")}}.
-
{{jsxref("Symbol.split")}}
-
A method that splits a string at the indices that match a regular expression. Used by {{jsxref("String.prototype.split()")}}.
-
{{jsxref("Symbol.species")}}
-
A constructor function that is used to create derived objects.
-
{{jsxref("Symbol.toPrimitive")}}
-
A method converting an object to a primitive value.
-
{{jsxref("Symbol.toStringTag")}}
-
A string value used for the default description of an object. Used by {{jsxref("Object.prototype.toString()")}}.
-
{{jsxref("Symbol.unscopables")}}
-
An object value of whose own and inherited property names are excluded from the with environment bindings of the associated object.
-
- -

Static methods

- -
-
{{jsxref("Symbol.for()", "Symbol.for(key)")}}
-
Searches for existing symbols with the given key and returns it if found. Otherwise a new symbol gets created in the global symbol registry with key.
-
{{jsxref("Symbol.keyFor", "Symbol.keyFor(sym)")}}
-
Retrieves a shared symbol key from the global symbol registry for the given symbol.
-
- -

Instance properties

- -
-
{{jsxref("Symbol.prototype.description")}}
-
A read-only string containing the description of the symbol.
-
- -

Instance methods

- -
-
{{jsxref("Symbol.prototype.toSource()")}}
-
Returns a string containing the source of the {{jsxref("Global_Objects/Symbol", "Symbol")}} object. Overrides the {{jsxref("Object.prototype.toSource()")}} method.
-
{{jsxref("Symbol.prototype.toString()")}}
-
Returns a string containing the description of the Symbol. Overrides the {{jsxref("Object.prototype.toString()")}} method.
-
{{jsxref("Symbol.prototype.valueOf()")}}
-
Returns the primitive value of the {{jsxref("Symbol")}} object. Overrides the {{jsxref("Object.prototype.valueOf()")}} method.
-
{{jsxref("Symbol.prototype.@@toPrimitive()", "Symbol.prototype[@@toPrimitive]")}}
-
Returns the primitive value of the {{jsxref("Symbol")}} object.
-
- -

Examples

- -

Using the typeof operator with symbols

- -

The {{jsxref("Operators/typeof", "typeof")}} operator can help you to identify symbols.

- -
typeof Symbol() === 'symbol'
-typeof Symbol('foo') === 'symbol'
-typeof Symbol.iterator === 'symbol'
-
- -

Symbol type conversions

- -

Some things to note when working with type conversion of symbols.

- - - -

Symbols and for...in iteration

- -

Symbols are not enumerable in for...in iterations. In addition, {{jsxref("Object.getOwnPropertyNames()")}} will not return symbol object properties, however, you can use {{jsxref("Object.getOwnPropertySymbols()")}} to get these.

- -
let obj = {}
-
-obj[Symbol('a')] = 'a'
-obj[Symbol.for('b')] = 'b'
-obj['c'] = 'c'
-obj.d = 'd'
-
-for (let i in obj) {
-   console.log(i)  // logs "c" and "d"
-}
- -

Symbols and JSON.stringify()

- -

Symbol-keyed properties will be completely ignored when using JSON.stringify():

- -
JSON.stringify({[Symbol('foo')]: 'foo'})
-// '{}'
-
- -

For more details, see {{jsxref("JSON.stringify()")}}.

- -

Symbol wrapper objects as property keys

- -

When a Symbol wrapper object is used as a property key, this object will be coerced to its wrapped symbol:

- -
let sym = Symbol('foo')
-let obj = {[sym]: 1}
-obj[sym]             // 1
-obj[Object(sym)]     // still 1
-
- -

Specifications

- - - - - - - - - - -
Specification
{{SpecName('ESDraft', '#sec-symbol-objects', 'Symbol')}}
- -

Browser compatibility

- - - -

{{Compat("javascript.builtins.Symbol")}}

- -

See also

- - diff --git a/files/nl/web/javascript/reference/klasses/index.html b/files/nl/web/javascript/reference/klasses/index.html deleted file mode 100644 index ca5210371c..0000000000 --- a/files/nl/web/javascript/reference/klasses/index.html +++ /dev/null @@ -1,252 +0,0 @@ ---- -title: Klassen -slug: Web/JavaScript/Reference/Klasses -translation_of: Web/JavaScript/Reference/Classes ---- -
{{JsSidebar("Classes")}}
- -

JavaScript classes zijn nieuw in ECMAScript 6. De class syntax is geen object-oriented inheritance model in JavaScript. JavaScript classes brengen een veel eenvoudigere en duidelijkere syntax voor het creëren van objecten.

- -

Classes definiëren

- -

Classes zijn eigenlijk functions, net zoals je function expressions en function declarations kan definiëren, de class syntax heeft twee componenten: class expressies en class declaraties.

- -

Class declaraties

- -

Eén manier om een class te definiëren is door gebruik te maken van class declaration. Om een klasse te declareren, gebruik je het class keyword gevolgd door de naam van de class. ("Polygon" hier).

- -
class Polygon {
-  constructor(height, width) {
-    this.height = height;
-    this.width = width;
-  }
-}
- -

Hoisting

- -

Een belangrijk verschil tussen function declarations en class declarations is dat function declarations {{Glossary("Hoisting", "hoisted")}} zijn en class declarations niet. Je moet eerst je klasse declareren voor je het kan gebruiken, anders krijg je een {{jsxref("ReferenceError")}}:

- -
var p = new Polygon(); // ReferenceError
-
-class Polygon {}
-
- -

Class expressions

- -

Een class expression is een andere manier om een class te definiëren. Class expressions kunnen named of unnamed zijn. De naam gegeven aan een named class expression is local aan de body van de class.

- -
// unnamed
-var Polygon = class {
-  constructor(height, width) {
-    this.height = height;
-    this.width = width;
-  }
-};
-
-// named
-var Polygon = class Polygon {
-  constructor(height, width) {
-    this.height = height;
-    this.width = width;
-  }
-};
-
- -

Class body en method definitions

- -

De body van een class is het stuk tussen de curly brackets {}. Hier kan je class members definiëren, zoals methodes of constructors.

- -

Strict mode

- -

De bodies van class declarations en class expressions worden uitgevoerd in strict mode. Constructor, static en prototype methods, getter en setter functions worden bijvoorbeeld uitgevoerd in strict mode.

- -

Constructor

- -

De constructor methode is een speciale methode voor het creëren en initializeren van een object voor de klasse. Er kan maar één speciale methode zijn met de naam "constructor" in een klasse. Een {{jsxref("SyntaxError")}} wordt gegooid indien de klasse meerdere constructor methodes heeft.

- -

Een constructor kan gebruik maken van het super keyword om de constructor van de parent class op te roepen.

- -

Prototype methods

- -

Zie ook method definitions.

- -
class Polygon {
-  constructor(height, width) {
-    this.height = height;
-    this.width = width;
-  }
-
-  get area() {
-    return this.calcArea()
-  }
-
-  calcArea() {
-    return this.height * this.width;
-  }
-}
- -

Static methods

- -

Het static keyword beschrijft een statische methode voor een klasse. Statische methodes kunnen worden opgeroepen zonder dat er een instantie gemaakt is van de klasse en kunnen ook niet opgeroepen worden wanneer er een instantie van gemaakt is. Statische methodes zijn dikwijls gebruikt als utility functions voor een applicatie.

- -
class Point {
-    constructor(x, y) {
-        this.x = x;
-        this.y = y;
-    }
-
-    static distance(a, b) {
-        const dx = a.x - b.x;
-        const dy = a.y - b.y;
-
-        return Math.sqrt(dx*dx + dy*dy);
-    }
-}
-
-const p1 = new Point(5, 5);
-const p2 = new Point(10, 10);
-
-console.log(Point.distance(p1, p2));
- -

Sub classing met extends

- -

Het extends keyword wordt gebruikt in class declarations of class expressions om een klasse aan te maken als kind van een andere klasse.

- -
class Animal {
-  constructor(name) {
-    this.name = name;
-  }
-
-  speak() {
-    console.log(this.name + ' makes a noise.');
-  }
-}
-
-class Dog extends Animal {
-  speak() {
-    console.log(this.name + ' barks.');
-  }
-}
-
- -

Sub classing built-in objects

- -

TBD

- -

Super class calls with super

- -

Het super keyword wordt gebruikt om een methode op te roepen in de parent klasse van het object.

- -
class Cat {
-  constructor(name) {
-    this.name = name;
-  }
-
-  speak() {
-    console.log(this.name + ' makes a noise.');
-  }
-}
-
-class Lion extends Cat {
-  speak() {
-    super.speak();
-    console.log(this.name + ' roars.');
-  }
-}
-
- -

ES5 inheritance syntax en ES6 classes syntax vergeleken

- -

TBD

- -

Voorbeelden

- -

TBD

- -

Specificaties

- - - - - - - - - - - - - - - - - - - -
SpecificationStatusComment
{{SpecName('ES6', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ES6')}}Initial definition.
{{SpecName('ESDraft', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ESDraft')}} 
- -

Browser compatibiliteit

- -

{{CompatibilityTable}}

- -
- - - - - - - - - - - - - - - - - - - - - -
FeatureChromeFirefox (Gecko)MS EdgeInternet ExplorerOperaSafari
Basic support{{CompatChrome(42.0)}}[1]4513{{CompatNo}}{{CompatNo}}{{CompatSafari(9.0)}}
-
- -
- - - - - - - - - - - - - - - - - - - - - -
FeatureAndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari MobileChrome for Android
Basic support{{CompatNo}}45{{CompatUnknown}}{{CompatUnknown}}9{{CompatChrome(42.0)}}[1]
-
- -

[1] Requires strict mode. Non-strict mode support is behind the flag Enable Experimental JavaScript, disabled by default.

- -

Zie ook

- - diff --git a/files/nl/web/javascript/reference/operatoren/index.html b/files/nl/web/javascript/reference/operatoren/index.html deleted file mode 100644 index fc499002b4..0000000000 --- a/files/nl/web/javascript/reference/operatoren/index.html +++ /dev/null @@ -1,288 +0,0 @@ ---- -title: Expressies and operators -slug: Web/JavaScript/Reference/Operatoren -translation_of: Web/JavaScript/Reference/Operators ---- -
{{jsSidebar("Operators")}}
- -

Deze documentatie bevat informatie over JavaScript operators.

- -

Expressies en operators per categorie

- -

Voor alfabetische lijst, zie sidebar.

- -

Primaire expressies

- -

Trefwoorden en algmene expressies in JavaScript.

- -
-
{{jsxref("Operators/this", "this")}}
-
this verwijst naar de context van een functie.
-
{{jsxref("Operators/function", "function")}}
-
function geeft aan dat er een functie moet worden gemaakt
-
{{experimental_inline}} {{jsxref("Operators/class", "class")}}
-
class definieert een klasse.
-
{{experimental_inline}} {{jsxref("Operators/function*", "function*")}}
-
Het function* trefwoord definieert een generator functie expressie.
-
{{experimental_inline}} {{jsxref("Operators/yield", "yield")}}
-
Pauzeer en start een generator functie.
-
{{experimental_inline}} {{jsxref("Operators/yield*", "yield*")}}
-
Doorgegeven aan een andere generator functie.
-
{{jsxref("Global_Objects/Array", "[]")}}
-
Definieert een lijst met data.
-
{{jsxref("Operators/Object_initializer", "{}")}}
-
Definieert een object.
-
{{jsxref("Global_Objects/RegExp", "/ab+c/i")}}
-
Reguliere expressie.
-
{{experimental_inline}} {{jsxref("Operators/Array_comprehensions", "[for (x of y) x]")}}
-
Datalijst omvang.
-
{{experimental_inline}} {{jsxref("Operators/Generator_comprehensions", "(for (x of y) y)")}}
-
Generator omvang.
-
{{jsxref("Operators/Grouping", "( )")}}
-
Groep operator.
-
- -

Left-hand-side expressies

- -

Deze voeren een opdracht uit met een van de bovenstaande expressies.

- -
-
{{jsxref("Operators/Property_accessors", "Property accessors", "", 1)}}
-
Haalt data uit een object op
- (object.property en object["property"]).
-
{{jsxref("Operators/new", "new")}}
-
Maakt een nieuwe constructor.
-
{{experimental_inline}} new.target
-
In constructors, new.target verwijst naar het object dat werd aangeroepen door {{jsxref("Operators/new", "new")}}. 
-
{{experimental_inline}} {{jsxref("Operators/super", "super")}}
-
Het super keywoord verwijst naar de hoofdconstructor.
-
{{experimental_inline}} {{jsxref("Operators/Spread_operator", "...obj")}}
-
De spread operator stelt een expressie uit te breiden op plaatsen waar meerdere argumenten (voor de functies die opgeroepen worden) of meerdere elementen (voor Array literalen) zijn verplicht.
-
- -

Optellen en Aftrekken

- -

Voor optellen en aftrekken bij variabelen.

- -
-
{{jsxref("Operators/Arithmetic_Operators", "A++", "#Increment")}}
-
Achtervoegsel optel operator.
-
{{jsxref("Operators/Arithmetic_Operators", "A--", "#Decrement")}}
-
Achtervoegsel aftrek operator.
-
{{jsxref("Operators/Arithmetic_Operators", "++A", "#Increment")}}
-
Voorvoegsel optel operator.
-
{{jsxref("Operators/Arithmetic_Operators", "--A", "#Decrement")}}
-
Voorvoegsel aftrek operator.
-
- -

Unaire operatoren

- -

Een unaire operatie is een operatie met slechts één operand.

- -
-
{{jsxref("Operators/delete", "delete")}}
-
De delete operator verwijdert een object of item van een object.
-
{{jsxref("Operators/void", "void")}}
-
De void operator verwijdert de returnwaarde van een expressie.
-
{{jsxref("Operators/typeof", "typeof")}}
-
De typeof operator geeft het type van het object.
-
We zijn bezig met vertalen van het document, maar we zijn nog niet klaar.
-
- -
-
{{jsxref("Operators/Arithmetic_Operators", "+", "#Unary_plus")}}
-
De unaire plus operator zet zijn operand om naar type Number
-
{{jsxref("Operators/Arithmetic_Operators", "-", "#Unary_negation")}}
-
De unaire negatie operator zet zijn operand om naar Number en zet hem dan om in haar tegendeel.
-
{{jsxref("Operators/Bitwise_Operators", "~", "#Bitwise_NOT")}}
-
Bitwise NOT operator.
-
{{jsxref("Operators/Logical_Operators", "!", "#Logical_NOT")}}
-
Logische NOT operator.
-
- -

Rekenkundige operators

- -

Rekenkundige operators accepteren numerieke waarden (letterlijke waarden of variablen) als hun operand en retourneren een enkele numerieke waarde.

- -
-
{{jsxref("Operators/Arithmetic_Operators", "+", "#Addition")}}
-
Additie operator.
-
{{jsxref("Operators/Arithmetic_Operators", "-", "#Subtraction")}}
-
Subtractie operator.
-
{{jsxref("Operators/Arithmetic_Operators", "/", "#Division")}}
-
Divisie operator.
-
{{jsxref("Operators/Arithmetic_Operators", "*", "#Multiplication")}}
-
Multiplicatie operator.
-
{{jsxref("Operators/Arithmetic_Operators", "%", "#Remainder")}}
-
Rest operator.
-
- -
-
{{experimental_inline}} {{jsxref("Operators/Arithmetic_Operators", "**", "#Exponentiation")}}
-
Exponent operator.
-
- -

Relationele operators

- -

Een relationele operator vergelijkt zijn operanden en retourneert een Boolean gebaseerd op de uitkomst van de vergelijking.

- -
-
{{jsxref("Operators/in", "in")}}
-
De in operator bepaalt of een object een zekere eigenschap heeft.
-
{{jsxref("Operators/instanceof", "instanceof")}}
-
De instanceof operator bepaalt of een variable een instantie is van een bepaald type object.
-
{{jsxref("Operators/Comparison_Operators", "<", "#Less_than_operator")}}
-
Minder dan operator.
-
{{jsxref("Operators/Comparison_Operators", ">", "#Greater_than_operator")}}
-
Groter dan operator.
-
{{jsxref("Operators/Comparison_Operators", "<=", "#Less_than_or_equal_operator")}}
-
Minder dan of gelijk aan operator.
-
{{jsxref("Operators/Comparison_Operators", ">=", "#Greater_than_or_equal_operator")}}
-
Groter dan of gelijk aan operator.
-
- -

Gelijkheids operators

- -

Het resultaat van het evalueren van een gelijkheids operator geeft altijd een Boolean gebaseerd op het resultaat van de vergelijking.

- -
-
{{jsxref("Operators/Comparison_Operators", "==", "#Equality")}}
-
Gelijkheids operator.
-
{{jsxref("Operators/Comparison_Operators", "!=", "#Inequality")}}
-
Ongelijkheids operator.
-
{{jsxref("Operators/Comparison_Operators", "===", "#Identity")}}
-
Identiciteits operator.
-
{{jsxref("Operators/Comparison_Operators", "!==", "#Nonidentity")}}
-
Nonidenticiteits operator.
-
- -

Bitwijs shift operators

- -

Operaties die alle bits van de operand verschuiven.

- -
-
{{jsxref("Operators/Bitwise_Operators", "<<", "#Left_shift")}}
-
Bitwijs linker shift operator.
-
{{jsxref("Operators/Bitwise_Operators", ">>", "#Right_shift")}}
-
Bitwijs rechter shift operator.
-
{{jsxref("Operators/Bitwise_Operators", ">>>", "#Unsigned_right_shift")}}
-
Bitwijs tekenloze rechter shift operator.
-
- -

Binaire bitwijs operators

- -

Bitwijs operatoren behandelen hun operand als een set van 32 bits en retourneren een standaard JavaScript numerieke waarde.

- -
-
{{jsxref("Operators/Bitwise_Operators", "&", "#Bitwise_AND")}}
-
Bitwijs AND.
-
{{jsxref("Operators/Bitwise_Operators", "|", "#Bitwise_OR")}}
-
Bitwijs OR.
-
{{jsxref("Operators/Bitwise_Operators", "^", "#Bitwise_XOR")}}
-
Bitwijs XOR.
-
- -

Binaire logische operators

- -

Logische operatoren worden normaliter gebruikt met Booleans en retourneren ook een Boolean waarde.

- -
-
{{jsxref("Operators/Logical_Operators", "&&", "#Logical_AND")}}
-
Logische AND.
-
{{jsxref("Operators/Logical_Operators", "||", "#Logical_OR")}}
-
Logische OR.
-
- -

Conditionele (ternary) operator

- -
-
{{jsxref("Operators/Conditional_Operator", "(condition ? ifTrue : ifFalse)")}}
-
-

The conditionele operator retourneert een of twee waarden gebaseerd op de waarde van de conditie.

-
-
- -

Toekennings operators

- -

Een toekennings operator kent een waarde toe aan zijn linker operand gebaseerd op de waarde van zijn rechter operand.

- -
-
{{jsxref("Operators/Assignment_Operators", "=", "#Assignment")}}
-
Toekennings operator.
-
{{jsxref("Operators/Assignment_Operators", "*=", "#Multiplication_assignment")}}
-
Vermenigvuldigings toekenning.
-
{{jsxref("Operators/Assignment_Operators", "/=", "#Division_assignment")}}
-
Delings toekenning.
-
{{jsxref("Operators/Assignment_Operators", "%=", "#Remainder_assignment")}}
-
Rest toekenning.
-
{{jsxref("Operators/Assignment_Operators", "+=", "#Addition_assignment")}}
-
Additieve toekenning.
-
{{jsxref("Operators/Assignment_Operators", "-=", "#Subtraction_assignment")}}
-
Substractieve toekenning
-
{{jsxref("Operators/Assignment_Operators", "<<=", "#Left_shift_assignment")}}
-
Linker shift toekenning.
-
{{jsxref("Operators/Assignment_Operators", ">>=", "#Right_shift_assignment")}}
-
Rechter shift toekenning.
-
{{jsxref("Operators/Assignment_Operators", ">>>=", "#Unsigned_right_shift_assignment")}}
-
Tekenloze rechter shift toekenning.
-
{{jsxref("Operators/Assignment_Operators", "&=", "#Bitwise_AND_assignment")}}
-
Bitwijs AND toekenning.
-
{{jsxref("Operators/Assignment_Operators", "^=", "#Bitwise_XOR_assignment")}}
-
Bitwijs XOR toekenning.
-
{{jsxref("Operators/Assignment_Operators", "|=", "#Bitwise_OR_assignment")}}
-
Bitwijs OR toekenning.
-
{{experimental_inline}} {{jsxref("Operators/Destructuring_assignment", "[a, b] = [1, 2]")}}
- {{experimental_inline}} {{jsxref("Operators/Destructuring_assignment", "{a, b} = {a:1, b:2}")}}
-
-

Ontbindings toekenningen maken het mogelijk eigenschappen van een array of object toe te kennen aan letterlijke arrays of objecten. 

-
-
- -

Komma operator

- -
-
{{jsxref("Operators/Comma_Operator", ",")}}
-
De komma operator maakt het mogelijk meerdere expressies te evalueren in een enkele statement en retourneert het resultaat van de laatste expressie.
-
- -

Niet-standaard features

- -
-
{{non-standard_inline}} {{jsxref("Operators/Legacy_generator_function", "Legacy generator function", "", 1)}}
-
Het function trefwoord kan worden gebruikt om een legacy generator functie te omschrijven binnen een expressie. Hiertoe moet de inhoud van de functie minstens 1  {{jsxref("Operators/yield", "yield")}} expressie bevatten.
-
{{non-standard_inline}} {{jsxref("Operators/Expression_closures", "Expression closures", "", 1)}}
-
De expressie sluitings  syntax is een mogelijkheid om een verkorte functie te schrijven.
-
- -

Specifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpecificationStatusComment
{{SpecName('ES6', '#sec-ecmascript-language-expressions', 'ECMAScript Language: Expressions')}}{{Spec2('ES6')}}New: Spread operator, destructuring assignment, super keyword, Array comprehensions, Generator comprehensions
{{SpecName('ES5.1', '#sec-11', 'Expressions')}}{{Spec2('ES5.1')}} 
{{SpecName('ES1', '#sec-11', 'Expressions')}}{{Spec2('ES1')}}Initial definition
- -

See also

- - diff --git a/files/nl/web/javascript/reference/operatoren/typeof/index.html b/files/nl/web/javascript/reference/operatoren/typeof/index.html deleted file mode 100644 index e86cf0b324..0000000000 --- a/files/nl/web/javascript/reference/operatoren/typeof/index.html +++ /dev/null @@ -1,244 +0,0 @@ ---- -title: typeof -slug: Web/JavaScript/Reference/Operatoren/typeof -tags: - - JavaScript - - Operator - - Unair -translation_of: Web/JavaScript/Reference/Operators/typeof ---- -
{{jsSidebar("Operators")}}
- -

De typeof-operator geeft een string terug die het type van de ongeëvalueerde operand weergeeft.

- -

Syntaxis

- -

De typeof-operator wordt gevolgd door zijn operand:

- -
typeof operand
- -

Parameters

- -

operand is een uitdrukking die het object of de {{Glossary("Primitive", "primitief")}} voorstelt waarvan het type moet worden teruggegeven.

- -

Beschrijving

- -

De volgende tabel bevat de mogelijke waarden die typeof kan teruggeven. Voor meer informatie over types of primitieven, zie pagina datastructuren in Javascript.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeResultaat
Undefined"undefined"
Null"object" (see below)
Boolean"boolean"
Number"number"
String"string"
Symbol (nieuw in ECMAScript 2015)"symbol"
Host object (voorzien door de JS omgeving)Implementatie-afhankelijk
Function object (implementeert [[Call]] in termen van ECMA-262)"function"
Elk ander object"object"
- -

 

- -

Voorbeelden

- -
// Nummers
-typeof 37 === 'number';
-typeof 3.14 === 'number';
-typeof(42) === 'number';
-typeof Math.LN2 === 'number';
-typeof Infinity === 'number';
-typeof NaN === 'number'; // Ondanks dat het "Not-A-Number" is
-typeof Number(1) === 'number'; // maar gebruik deze manier nooit!
-
-
-// Strings
-typeof "" === 'string';
-typeof "bla" === 'string';
-typeof (typeof 1) === 'string'; // typeof geeft altijd een string terug
-typeof String("abc") === 'string'; // maar gebruik deze manier nooit!
-
-
-// Booleans
-typeof true === 'boolean';
-typeof false === 'boolean';
-typeof Boolean(true) === 'boolean'; // maar gebruik deze manier nooit!
-
-
-// Symbolen
-typeof Symbol() === 'symbol'
-typeof Symbol('foo') === 'symbol'
-typeof Symbol.iterator === 'symbol'
-
-
-// Ongedefinieerd
-typeof undefined === 'undefined';
-typeof declaredButUndefinedVariable === 'undefined';
-typeof undeclaredVariable === 'undefined';
-
-
-// Objecten
-typeof {a:1} === 'object';
-
-// gebruik Array.isArray of Object.prototype.toString.call
-// om het verschil aan te geven tussen normale objecten en
-// arrays (rijen).
-typeof [1, 2, 4] === 'object';
-
-typeof new Date() === 'object';
-
-
-// Het volgende is verwarrend. Niet gebruiken!
-typeof new Boolean(true) === 'object';
-typeof new Number(1) === 'object';
-typeof new String("abc") === 'object';
-
-
-// Functies
-typeof function(){} === 'function';
-typeof class C {} === 'function';
-typeof Math.sin === 'function';
-
- -

null

- -
// Dit geldt sinds het ontstaan van JavaScript
-typeof null === 'object';
-
- -

In de oorspronkelijke implementatie van JavaScript werden JavaScript-waarden gerepresenteerd met een type-label en een waarde. Het type-label voor de meeste objecten was 0. null werd voorgesteld als de NULL-pointer (0x00 in de meeste platformen). Daarom had null het type-label 0, wat de foute typeof teruggeefwaarde verklaart. (referentie)

- -

Een oplossing (via een opt-in) werd voorgesteld voor ECMAScript, maar die werd afgekeurd. Anders zou het er als volgt hebben uitgezien: typeof null === 'null'.

- -

De new-operator gebruiken

- -
// Alle constructorfuncties die worden geïnstantieerd met het
-// 'new'-sleutelwoord, zullen altijd typeof 'object' zijn.
-var str = new String('String');
-var num = new Number(100);
-
-typeof str; // Geeft 'object' terug
-typeof num; // Geeft 'object' terug
-
-// Maar er is een uitzondering in het geval van de functieconstructor van JavaScript.
-
-var func = new Function();
-
-typeof func; // Geeft 'function' terug
-
- -

Reguliere uitdrukkingen

- -

Aanroepbare reguliere uitdrukkingen waren een niet-standaard toevoeging in sommige browsers.

- -
typeof /s/ === 'function'; // Chrome 1-12 Niet comform aan ECMAScript 5.1
-typeof /s/ === 'object';   // Firefox 5+  Conform aan ECMAScript 5.1
-
- -

Temporal Dead Zone-fouten

- -

Voor ECMAScript 2015 gaf typeof altijd gegarandeerd een string terug voor elke operand waarmee het was voorzien. Maar met de toevoeging van niet-gehoiste, blokgekaderde let en const ontstaat er een ReferenceError als typeof op let- en const-variabelen wordt gebruikt voordat ze zijn benoemd. Dit staat in contrast met onbenoemde variabelen, waarvoor typeof 'undefined' teruggeeft. Blokgekaderde variabelen zijn in een "temporal dead zone" vanaf het begin van het blok totdat de intialisatie is verwerkt, waarin een fout ontstaat als ze worden benaderd.

- -
typeof onbenoemdeVariabele === 'undefined';
-typeof nieuweLetVariabele; let nieuweLetVariabele; // ReferenceError
-typeof nieuweConstVariabele; const nieuweConstVariabele = 'hallo'; // ReferenceError
-
- -

Uitzonderingen

- -

Alle huidige browsers onthullen een niet-standaard hostobject {{domxref("document.all")}} met type undefined.

- -
typeof document.all === 'undefined';
-
- -

Hoewel de specificatie aangepaste type-labels toestaat voor niet-standaard exotische objecten, vereist het dat die type-labels verschillen van de ingebouwde. Dat document.all een type-label undefined heeft moet worden geclassificeerd als een uitzonderlijke overtreding van de regels.

- -

Specificaties

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpecificatieStatusOpmerking
{{SpecName('ESDraft', '#sec-typeof-operator', 'The typeof Operator')}}{{Spec2('ESDraft')}} 
{{SpecName('ES6', '#sec-typeof-operator', 'The typeof Operator')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-11.4.3', 'The typeof Operator')}}{{Spec2('ES5.1')}} 
{{SpecName('ES3', '#sec-11.4.3', 'The typeof Operator')}}{{Spec2('ES3')}} 
{{SpecName('ES1', '#sec-11.4.3', 'The typeof Operator')}}{{Spec2('ES1')}}Oorspronkelijke definitie. Geïmplementeerd in JavaScript 1.1.
- -

Browsercompatibiliteit

- - - -

{{Compat("javascript.operators.typeof")}}

- -

IE-specifieke opmerkingen

- -

In IE 6, 7, en 8 zijn een groot aantal host objecten objecten en geen functions. bijvoorbeeld:

- -
typeof alert === 'object'
- -

Zie ook

- - diff --git a/files/nl/web/javascript/reference/operators/index.html b/files/nl/web/javascript/reference/operators/index.html new file mode 100644 index 0000000000..fc499002b4 --- /dev/null +++ b/files/nl/web/javascript/reference/operators/index.html @@ -0,0 +1,288 @@ +--- +title: Expressies and operators +slug: Web/JavaScript/Reference/Operatoren +translation_of: Web/JavaScript/Reference/Operators +--- +
{{jsSidebar("Operators")}}
+ +

Deze documentatie bevat informatie over JavaScript operators.

+ +

Expressies en operators per categorie

+ +

Voor alfabetische lijst, zie sidebar.

+ +

Primaire expressies

+ +

Trefwoorden en algmene expressies in JavaScript.

+ +
+
{{jsxref("Operators/this", "this")}}
+
this verwijst naar de context van een functie.
+
{{jsxref("Operators/function", "function")}}
+
function geeft aan dat er een functie moet worden gemaakt
+
{{experimental_inline}} {{jsxref("Operators/class", "class")}}
+
class definieert een klasse.
+
{{experimental_inline}} {{jsxref("Operators/function*", "function*")}}
+
Het function* trefwoord definieert een generator functie expressie.
+
{{experimental_inline}} {{jsxref("Operators/yield", "yield")}}
+
Pauzeer en start een generator functie.
+
{{experimental_inline}} {{jsxref("Operators/yield*", "yield*")}}
+
Doorgegeven aan een andere generator functie.
+
{{jsxref("Global_Objects/Array", "[]")}}
+
Definieert een lijst met data.
+
{{jsxref("Operators/Object_initializer", "{}")}}
+
Definieert een object.
+
{{jsxref("Global_Objects/RegExp", "/ab+c/i")}}
+
Reguliere expressie.
+
{{experimental_inline}} {{jsxref("Operators/Array_comprehensions", "[for (x of y) x]")}}
+
Datalijst omvang.
+
{{experimental_inline}} {{jsxref("Operators/Generator_comprehensions", "(for (x of y) y)")}}
+
Generator omvang.
+
{{jsxref("Operators/Grouping", "( )")}}
+
Groep operator.
+
+ +

Left-hand-side expressies

+ +

Deze voeren een opdracht uit met een van de bovenstaande expressies.

+ +
+
{{jsxref("Operators/Property_accessors", "Property accessors", "", 1)}}
+
Haalt data uit een object op
+ (object.property en object["property"]).
+
{{jsxref("Operators/new", "new")}}
+
Maakt een nieuwe constructor.
+
{{experimental_inline}} new.target
+
In constructors, new.target verwijst naar het object dat werd aangeroepen door {{jsxref("Operators/new", "new")}}. 
+
{{experimental_inline}} {{jsxref("Operators/super", "super")}}
+
Het super keywoord verwijst naar de hoofdconstructor.
+
{{experimental_inline}} {{jsxref("Operators/Spread_operator", "...obj")}}
+
De spread operator stelt een expressie uit te breiden op plaatsen waar meerdere argumenten (voor de functies die opgeroepen worden) of meerdere elementen (voor Array literalen) zijn verplicht.
+
+ +

Optellen en Aftrekken

+ +

Voor optellen en aftrekken bij variabelen.

+ +
+
{{jsxref("Operators/Arithmetic_Operators", "A++", "#Increment")}}
+
Achtervoegsel optel operator.
+
{{jsxref("Operators/Arithmetic_Operators", "A--", "#Decrement")}}
+
Achtervoegsel aftrek operator.
+
{{jsxref("Operators/Arithmetic_Operators", "++A", "#Increment")}}
+
Voorvoegsel optel operator.
+
{{jsxref("Operators/Arithmetic_Operators", "--A", "#Decrement")}}
+
Voorvoegsel aftrek operator.
+
+ +

Unaire operatoren

+ +

Een unaire operatie is een operatie met slechts één operand.

+ +
+
{{jsxref("Operators/delete", "delete")}}
+
De delete operator verwijdert een object of item van een object.
+
{{jsxref("Operators/void", "void")}}
+
De void operator verwijdert de returnwaarde van een expressie.
+
{{jsxref("Operators/typeof", "typeof")}}
+
De typeof operator geeft het type van het object.
+
We zijn bezig met vertalen van het document, maar we zijn nog niet klaar.
+
+ +
+
{{jsxref("Operators/Arithmetic_Operators", "+", "#Unary_plus")}}
+
De unaire plus operator zet zijn operand om naar type Number
+
{{jsxref("Operators/Arithmetic_Operators", "-", "#Unary_negation")}}
+
De unaire negatie operator zet zijn operand om naar Number en zet hem dan om in haar tegendeel.
+
{{jsxref("Operators/Bitwise_Operators", "~", "#Bitwise_NOT")}}
+
Bitwise NOT operator.
+
{{jsxref("Operators/Logical_Operators", "!", "#Logical_NOT")}}
+
Logische NOT operator.
+
+ +

Rekenkundige operators

+ +

Rekenkundige operators accepteren numerieke waarden (letterlijke waarden of variablen) als hun operand en retourneren een enkele numerieke waarde.

+ +
+
{{jsxref("Operators/Arithmetic_Operators", "+", "#Addition")}}
+
Additie operator.
+
{{jsxref("Operators/Arithmetic_Operators", "-", "#Subtraction")}}
+
Subtractie operator.
+
{{jsxref("Operators/Arithmetic_Operators", "/", "#Division")}}
+
Divisie operator.
+
{{jsxref("Operators/Arithmetic_Operators", "*", "#Multiplication")}}
+
Multiplicatie operator.
+
{{jsxref("Operators/Arithmetic_Operators", "%", "#Remainder")}}
+
Rest operator.
+
+ +
+
{{experimental_inline}} {{jsxref("Operators/Arithmetic_Operators", "**", "#Exponentiation")}}
+
Exponent operator.
+
+ +

Relationele operators

+ +

Een relationele operator vergelijkt zijn operanden en retourneert een Boolean gebaseerd op de uitkomst van de vergelijking.

+ +
+
{{jsxref("Operators/in", "in")}}
+
De in operator bepaalt of een object een zekere eigenschap heeft.
+
{{jsxref("Operators/instanceof", "instanceof")}}
+
De instanceof operator bepaalt of een variable een instantie is van een bepaald type object.
+
{{jsxref("Operators/Comparison_Operators", "<", "#Less_than_operator")}}
+
Minder dan operator.
+
{{jsxref("Operators/Comparison_Operators", ">", "#Greater_than_operator")}}
+
Groter dan operator.
+
{{jsxref("Operators/Comparison_Operators", "<=", "#Less_than_or_equal_operator")}}
+
Minder dan of gelijk aan operator.
+
{{jsxref("Operators/Comparison_Operators", ">=", "#Greater_than_or_equal_operator")}}
+
Groter dan of gelijk aan operator.
+
+ +

Gelijkheids operators

+ +

Het resultaat van het evalueren van een gelijkheids operator geeft altijd een Boolean gebaseerd op het resultaat van de vergelijking.

+ +
+
{{jsxref("Operators/Comparison_Operators", "==", "#Equality")}}
+
Gelijkheids operator.
+
{{jsxref("Operators/Comparison_Operators", "!=", "#Inequality")}}
+
Ongelijkheids operator.
+
{{jsxref("Operators/Comparison_Operators", "===", "#Identity")}}
+
Identiciteits operator.
+
{{jsxref("Operators/Comparison_Operators", "!==", "#Nonidentity")}}
+
Nonidenticiteits operator.
+
+ +

Bitwijs shift operators

+ +

Operaties die alle bits van de operand verschuiven.

+ +
+
{{jsxref("Operators/Bitwise_Operators", "<<", "#Left_shift")}}
+
Bitwijs linker shift operator.
+
{{jsxref("Operators/Bitwise_Operators", ">>", "#Right_shift")}}
+
Bitwijs rechter shift operator.
+
{{jsxref("Operators/Bitwise_Operators", ">>>", "#Unsigned_right_shift")}}
+
Bitwijs tekenloze rechter shift operator.
+
+ +

Binaire bitwijs operators

+ +

Bitwijs operatoren behandelen hun operand als een set van 32 bits en retourneren een standaard JavaScript numerieke waarde.

+ +
+
{{jsxref("Operators/Bitwise_Operators", "&", "#Bitwise_AND")}}
+
Bitwijs AND.
+
{{jsxref("Operators/Bitwise_Operators", "|", "#Bitwise_OR")}}
+
Bitwijs OR.
+
{{jsxref("Operators/Bitwise_Operators", "^", "#Bitwise_XOR")}}
+
Bitwijs XOR.
+
+ +

Binaire logische operators

+ +

Logische operatoren worden normaliter gebruikt met Booleans en retourneren ook een Boolean waarde.

+ +
+
{{jsxref("Operators/Logical_Operators", "&&", "#Logical_AND")}}
+
Logische AND.
+
{{jsxref("Operators/Logical_Operators", "||", "#Logical_OR")}}
+
Logische OR.
+
+ +

Conditionele (ternary) operator

+ +
+
{{jsxref("Operators/Conditional_Operator", "(condition ? ifTrue : ifFalse)")}}
+
+

The conditionele operator retourneert een of twee waarden gebaseerd op de waarde van de conditie.

+
+
+ +

Toekennings operators

+ +

Een toekennings operator kent een waarde toe aan zijn linker operand gebaseerd op de waarde van zijn rechter operand.

+ +
+
{{jsxref("Operators/Assignment_Operators", "=", "#Assignment")}}
+
Toekennings operator.
+
{{jsxref("Operators/Assignment_Operators", "*=", "#Multiplication_assignment")}}
+
Vermenigvuldigings toekenning.
+
{{jsxref("Operators/Assignment_Operators", "/=", "#Division_assignment")}}
+
Delings toekenning.
+
{{jsxref("Operators/Assignment_Operators", "%=", "#Remainder_assignment")}}
+
Rest toekenning.
+
{{jsxref("Operators/Assignment_Operators", "+=", "#Addition_assignment")}}
+
Additieve toekenning.
+
{{jsxref("Operators/Assignment_Operators", "-=", "#Subtraction_assignment")}}
+
Substractieve toekenning
+
{{jsxref("Operators/Assignment_Operators", "<<=", "#Left_shift_assignment")}}
+
Linker shift toekenning.
+
{{jsxref("Operators/Assignment_Operators", ">>=", "#Right_shift_assignment")}}
+
Rechter shift toekenning.
+
{{jsxref("Operators/Assignment_Operators", ">>>=", "#Unsigned_right_shift_assignment")}}
+
Tekenloze rechter shift toekenning.
+
{{jsxref("Operators/Assignment_Operators", "&=", "#Bitwise_AND_assignment")}}
+
Bitwijs AND toekenning.
+
{{jsxref("Operators/Assignment_Operators", "^=", "#Bitwise_XOR_assignment")}}
+
Bitwijs XOR toekenning.
+
{{jsxref("Operators/Assignment_Operators", "|=", "#Bitwise_OR_assignment")}}
+
Bitwijs OR toekenning.
+
{{experimental_inline}} {{jsxref("Operators/Destructuring_assignment", "[a, b] = [1, 2]")}}
+ {{experimental_inline}} {{jsxref("Operators/Destructuring_assignment", "{a, b} = {a:1, b:2}")}}
+
+

Ontbindings toekenningen maken het mogelijk eigenschappen van een array of object toe te kennen aan letterlijke arrays of objecten. 

+
+
+ +

Komma operator

+ +
+
{{jsxref("Operators/Comma_Operator", ",")}}
+
De komma operator maakt het mogelijk meerdere expressies te evalueren in een enkele statement en retourneert het resultaat van de laatste expressie.
+
+ +

Niet-standaard features

+ +
+
{{non-standard_inline}} {{jsxref("Operators/Legacy_generator_function", "Legacy generator function", "", 1)}}
+
Het function trefwoord kan worden gebruikt om een legacy generator functie te omschrijven binnen een expressie. Hiertoe moet de inhoud van de functie minstens 1  {{jsxref("Operators/yield", "yield")}} expressie bevatten.
+
{{non-standard_inline}} {{jsxref("Operators/Expression_closures", "Expression closures", "", 1)}}
+
De expressie sluitings  syntax is een mogelijkheid om een verkorte functie te schrijven.
+
+ +

Specifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES6', '#sec-ecmascript-language-expressions', 'ECMAScript Language: Expressions')}}{{Spec2('ES6')}}New: Spread operator, destructuring assignment, super keyword, Array comprehensions, Generator comprehensions
{{SpecName('ES5.1', '#sec-11', 'Expressions')}}{{Spec2('ES5.1')}} 
{{SpecName('ES1', '#sec-11', 'Expressions')}}{{Spec2('ES1')}}Initial definition
+ +

See also

+ + diff --git a/files/nl/web/javascript/reference/operators/typeof/index.html b/files/nl/web/javascript/reference/operators/typeof/index.html new file mode 100644 index 0000000000..e86cf0b324 --- /dev/null +++ b/files/nl/web/javascript/reference/operators/typeof/index.html @@ -0,0 +1,244 @@ +--- +title: typeof +slug: Web/JavaScript/Reference/Operatoren/typeof +tags: + - JavaScript + - Operator + - Unair +translation_of: Web/JavaScript/Reference/Operators/typeof +--- +
{{jsSidebar("Operators")}}
+ +

De typeof-operator geeft een string terug die het type van de ongeëvalueerde operand weergeeft.

+ +

Syntaxis

+ +

De typeof-operator wordt gevolgd door zijn operand:

+ +
typeof operand
+ +

Parameters

+ +

operand is een uitdrukking die het object of de {{Glossary("Primitive", "primitief")}} voorstelt waarvan het type moet worden teruggegeven.

+ +

Beschrijving

+ +

De volgende tabel bevat de mogelijke waarden die typeof kan teruggeven. Voor meer informatie over types of primitieven, zie pagina datastructuren in Javascript.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeResultaat
Undefined"undefined"
Null"object" (see below)
Boolean"boolean"
Number"number"
String"string"
Symbol (nieuw in ECMAScript 2015)"symbol"
Host object (voorzien door de JS omgeving)Implementatie-afhankelijk
Function object (implementeert [[Call]] in termen van ECMA-262)"function"
Elk ander object"object"
+ +

 

+ +

Voorbeelden

+ +
// Nummers
+typeof 37 === 'number';
+typeof 3.14 === 'number';
+typeof(42) === 'number';
+typeof Math.LN2 === 'number';
+typeof Infinity === 'number';
+typeof NaN === 'number'; // Ondanks dat het "Not-A-Number" is
+typeof Number(1) === 'number'; // maar gebruik deze manier nooit!
+
+
+// Strings
+typeof "" === 'string';
+typeof "bla" === 'string';
+typeof (typeof 1) === 'string'; // typeof geeft altijd een string terug
+typeof String("abc") === 'string'; // maar gebruik deze manier nooit!
+
+
+// Booleans
+typeof true === 'boolean';
+typeof false === 'boolean';
+typeof Boolean(true) === 'boolean'; // maar gebruik deze manier nooit!
+
+
+// Symbolen
+typeof Symbol() === 'symbol'
+typeof Symbol('foo') === 'symbol'
+typeof Symbol.iterator === 'symbol'
+
+
+// Ongedefinieerd
+typeof undefined === 'undefined';
+typeof declaredButUndefinedVariable === 'undefined';
+typeof undeclaredVariable === 'undefined';
+
+
+// Objecten
+typeof {a:1} === 'object';
+
+// gebruik Array.isArray of Object.prototype.toString.call
+// om het verschil aan te geven tussen normale objecten en
+// arrays (rijen).
+typeof [1, 2, 4] === 'object';
+
+typeof new Date() === 'object';
+
+
+// Het volgende is verwarrend. Niet gebruiken!
+typeof new Boolean(true) === 'object';
+typeof new Number(1) === 'object';
+typeof new String("abc") === 'object';
+
+
+// Functies
+typeof function(){} === 'function';
+typeof class C {} === 'function';
+typeof Math.sin === 'function';
+
+ +

null

+ +
// Dit geldt sinds het ontstaan van JavaScript
+typeof null === 'object';
+
+ +

In de oorspronkelijke implementatie van JavaScript werden JavaScript-waarden gerepresenteerd met een type-label en een waarde. Het type-label voor de meeste objecten was 0. null werd voorgesteld als de NULL-pointer (0x00 in de meeste platformen). Daarom had null het type-label 0, wat de foute typeof teruggeefwaarde verklaart. (referentie)

+ +

Een oplossing (via een opt-in) werd voorgesteld voor ECMAScript, maar die werd afgekeurd. Anders zou het er als volgt hebben uitgezien: typeof null === 'null'.

+ +

De new-operator gebruiken

+ +
// Alle constructorfuncties die worden geïnstantieerd met het
+// 'new'-sleutelwoord, zullen altijd typeof 'object' zijn.
+var str = new String('String');
+var num = new Number(100);
+
+typeof str; // Geeft 'object' terug
+typeof num; // Geeft 'object' terug
+
+// Maar er is een uitzondering in het geval van de functieconstructor van JavaScript.
+
+var func = new Function();
+
+typeof func; // Geeft 'function' terug
+
+ +

Reguliere uitdrukkingen

+ +

Aanroepbare reguliere uitdrukkingen waren een niet-standaard toevoeging in sommige browsers.

+ +
typeof /s/ === 'function'; // Chrome 1-12 Niet comform aan ECMAScript 5.1
+typeof /s/ === 'object';   // Firefox 5+  Conform aan ECMAScript 5.1
+
+ +

Temporal Dead Zone-fouten

+ +

Voor ECMAScript 2015 gaf typeof altijd gegarandeerd een string terug voor elke operand waarmee het was voorzien. Maar met de toevoeging van niet-gehoiste, blokgekaderde let en const ontstaat er een ReferenceError als typeof op let- en const-variabelen wordt gebruikt voordat ze zijn benoemd. Dit staat in contrast met onbenoemde variabelen, waarvoor typeof 'undefined' teruggeeft. Blokgekaderde variabelen zijn in een "temporal dead zone" vanaf het begin van het blok totdat de intialisatie is verwerkt, waarin een fout ontstaat als ze worden benaderd.

+ +
typeof onbenoemdeVariabele === 'undefined';
+typeof nieuweLetVariabele; let nieuweLetVariabele; // ReferenceError
+typeof nieuweConstVariabele; const nieuweConstVariabele = 'hallo'; // ReferenceError
+
+ +

Uitzonderingen

+ +

Alle huidige browsers onthullen een niet-standaard hostobject {{domxref("document.all")}} met type undefined.

+ +
typeof document.all === 'undefined';
+
+ +

Hoewel de specificatie aangepaste type-labels toestaat voor niet-standaard exotische objecten, vereist het dat die type-labels verschillen van de ingebouwde. Dat document.all een type-label undefined heeft moet worden geclassificeerd als een uitzonderlijke overtreding van de regels.

+ +

Specificaties

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpecificatieStatusOpmerking
{{SpecName('ESDraft', '#sec-typeof-operator', 'The typeof Operator')}}{{Spec2('ESDraft')}} 
{{SpecName('ES6', '#sec-typeof-operator', 'The typeof Operator')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-11.4.3', 'The typeof Operator')}}{{Spec2('ES5.1')}} 
{{SpecName('ES3', '#sec-11.4.3', 'The typeof Operator')}}{{Spec2('ES3')}} 
{{SpecName('ES1', '#sec-11.4.3', 'The typeof Operator')}}{{Spec2('ES1')}}Oorspronkelijke definitie. Geïmplementeerd in JavaScript 1.1.
+ +

Browsercompatibiliteit

+ + + +

{{Compat("javascript.operators.typeof")}}

+ +

IE-specifieke opmerkingen

+ +

In IE 6, 7, en 8 zijn een groot aantal host objecten objecten en geen functions. bijvoorbeeld:

+ +
typeof alert === 'object'
+ +

Zie ook

+ + -- cgit v1.2.3-54-g00ecf