Monday, March 27, 2017

JavaScript Tricks

Hier einige JavaScript Tricks. Vielleicht kennt ihr schon den ein oder anderen.

Trick 1: Slice call

Sie können eine Array-Objektmethode mit den Slice- und Aufrufmethoden (Array.prototype.slice.call() oder [].slice.call()) kombinieren, um ein Array aus einer Array-ähnlichen Liste zurückzugeben. Eine Array-ähnliche Liste ist eine Liste mit der length Eigenschaft, sowie weiteren numerisch indizierbaren Eigenschaften.
slice.call
//using Array.prototype.slice.call
var myobject = {
  length: 4,
  '0': 'zero',
  '1': 'one',
  '2': 'two',
  '3': 'three'
}
 
console.log( Array.prototype.slice.call(myobject) );
// ["zero", "one", "two", "three"]
 
//using [].slice.call
var myobject = {
  length: 4,
  '0': 1,
  '1': 2,
  '2': 3,
  '3': 4
}
console.log( [].slice.call(myobject) );
// [1, 2, 3, 4]
oder alternativ könnte man Elemente greifen durch querySelectorAll zurückgegeben:
querySelectorAll
var nodesArray = [].slice.call(document.querySelectorAll("div"));
//nodesArray enthält nun ein array aller divs im DOM

Trick 2: Strings können in einem Array wie Mode verwendet werden

console.log( “Nick”[0] === “N” ); // true
console.log( "Nick"[1] === "i" ); // true

Trick 3: Wie man ein Array kopiert

Array kopieren
//ES5 und darunter
var newArr = Arr.slice(0);
//ES6
var newArr = [...oldArr];

Trick 4: Erstellen einer einfachen Query-Funktion (Singular)

Query-Funktion
var $ele = document.querySelector.bind(document);
 
// Sie können nun $ele(selector) verwenden, um die DOM zu suchen
var myEle = $ele("#id");

Trick 5: Erstellen einer einfacheren Query-Funktion (multiple)

Hinweis: Dies ist schneller als das Dokument. querySelectorAll und Return ein Live-nodeList.
Query-Funktion
var $all = function(selector) {
    switch (selector[0]) {
      case '#':
        return [document.getElementById(selector.slice(1, selector.length))];
      case '.':
        var classes = selector.replace(/\./g, ' ');
        return [].slice.call(document.getElementsByClassName(classes));
      default:
        return [].slice.call(document.getElementsByTagName(selector));
  }
}
console.log($all(".myClass")); 
// returns array von Elementen zurück, die dem Selector entsprechen.

Trick 6: Verkürzung console.log()


var cl = console.log.bind(document);
cl('hi'); // hi

Trick 7: Schalten Nummer Binary

var i = 4;
console.log( i.toString(2) ); // 100

Trick 8: Teilen Zahl in der Hälfte, abrunden

console.log( 26 >> 1 ); // 13
console.log( 27 >> 1 ); // 13
console.log( 4 >> 1); // 2
console.log( 5 >> 1); // 2

Trick 9: Objekt klonen

// Starck klon ein objekt
var newObj = JSON.parse(JSON.stringify(obj));
// shallow clone an object
var newObj = Object.assign({}, obj);

Trick 10: Ist Zahl (n) Teilbar durch x

var n = 56;
console.log(n % 5 == 0); // false
  
n = 5;
console.log(n % 5 == 0); // true

Trick 11: Ist Nummer (n) gerade oder ungerade?

//with modulo operator
var n = 10;
console.log(n % 2 === 0); // true
//Mit bittweisem OR
var n = 6;
console.log(n & 1 === 0); // true

Trick 12: Voreinstellung wenn Wert nicht vorhanden ist (Kurzschluss)

var a;
a = a || 10;
console.log(a); // 10
var a = 3;
a = a || 10;
console.log(a); // 3

Trick 13: Verwenden Sie den Ternäre-Operator, wenn Leistung aus (Wahr oder Falsch)

//syntax
//(evaluation) ? ifTrue : ifFalse;
var a = 2;
(a === 2) ? console.log(a): alert(a);
// wird auf das console log gedruckt.
var a = 3;
(a === 2) ? console.log(a): alert(a);
// wird eine Warnung auf dem Bildschirm angezeigt.

Trick 14: Verwenden Sie "e"   für übermäßige Nullen.

console.log( 1e4 ); // 10000
console.log( 2e1); // 20

Trick 15: JavaScript konvertiert Hexadezimal zu einer Zahl automagisch.

console.log(0x1) // 1
console.log(0xa) // 10
console.log(0xff) // 255

Trick 16: void (0) kann anstelle von undefiniert verwendet werden

console.log( void(0) === undefined ); // true

Trick 17: Konvertiere einen Wert in Boolean mit !

console.log(!!""); // false
console.log(!!" "); // true
console.log(!!0); // false
console.log(!!1); // true

Trick 18: Funktionsdeklarationen können mit Hilfe von! Zeichen, den void-Bezeichner oder durch Umhüllen der Funktion in Klammern.

 Sobald ein Ausdruck aktiviert ist, kann eine Funktion aufgerufen werden, indem sie Klammern an ihrem Ende platziert.
// ! character
!function(x) { console.log(x); }(1); // 1
// void identifier
void function(x){console.log(x); }(3); // 3
// wrapped in parentheses
(function(x) { console.log(x); } )(5); // 5

Trick 19: Destructuring

Sie können Informationen aus einem Objekt herausziehen, indem Sie Ihre Parameter auf die gleichen Werte wie die Objektschlüsselnamen einstellen (dies wird als zerstörung „destructuring“ bezeichnet)
function howOld({name, date}, age) { 
  console.log(name + " is " + age);
  console.log("on " + date); 
};
console.log( howOld({name:'tim', date: '11/10/16'}, 13) );
// tim is 13
// on 11/10/16
// Das funktioniert auch von einem externen Objekt!
var externalObj = {
  name: 'john',
  date: '06/06/06'
}
console.log( howOld(externalObj, 66) );
// John is 66
// on 06/06/06

Trick 20: Deklarieren von Standard-Funktionsparameter

function whoAmI(name = 'Nick', job ='web-Entwickler') { 
  console.log(name + ' der ' + job);
}
whoAmI(); // Nick der web-Entwickler'
whoAmI('nick', 'entwickler'); // nick der entwickler

Trick 21: Sie können die  .call()-Methode einer Funktion verwenden, um einen Aufruf dieser Funktion mit einem angegebenen Kontext und Argumenten auszuführen.

function.call(this context, arguments);
Wir können dies verwenden, um einen Workaround zu erstellen und permanente Werte einer Funktion zu übergeben, die wir nicht neu schreiben wollen.
Als Beispiel:
function add(x, y) {
  return x + y;
}
function add3(y) {
  return add.call(this, 3, y);
}
console.log(add(2, 5)); // 7
console.log(add3(6)); // 9

Trick 22: Einzel-parameter-Fat-Arrow-Deklarationen:

Wenn Sie eine Fettpfeil-Funktion mit einem einzelnen Parameter übergeben, müssen Sie keine Klammern um ihn herum schreiben.
var newFunction = text => console.log(text);
// vs
var newFunction = (name, text) => console.log(name + ': ' + text);
Dies funktioniert auch, wenn Sie eine Fat-Arrow-Funktion als Parameter übergeben.
arr.map(item => console.log(item));
// vs 
arr.map( (item, index) => console.log(item + ' index ' + index) );
Denken Sie daran, dass eine Einschränkung der Fat Arrow Funktion ist, dass sie nicht binden einen neuen "this" Kontext. Sie behalten den " this " Kontext, von dem sie aufgerufen werden.

Trick 23: Bestimmen Sie eine True- oder False-Anweisung aus einer String-Methode indexOf.

var myString = "aloha peeps";
console.log( !!~(myString.indexOf('aloha')) ); // true
console.log( !!~(myString.indexOf('hello')) ); // false
Trick 24: Ruft ein Array aller Links im Dokument ab.
var allLinks = document.links;
Trick 25: Styling aus dem Browser
var ele = document.getElementById("eleID");
var fontSize = getComputedStyle(ele).getPropertyValue("font-size");
console.log( fontSize ); // 16px
Trick 26: (Diese ist eigentlich eine Regel als alles andere)
Verwenden document.write aus irgendeinem Grund nicht.
// einen text-node hinzufügen:
var otherText = document.createTextNode('whodunnit');
document.body.appendChild(otherText);
 
//Ein element hinzufügen:
var myEle = document.createElement("H1");
var myText = document.createTextNode('blah blah');
myEle.appendChild(myText);
document.body.appendChild(myEle);
Trick 27: Kommunikation mit einem IFrame
Wenn Sie Informationen zwischen einem IFrame hin und her senden möchten.
 Sie können tatsächlich so lange Ihr Hauptfenster eine Nachricht aus dem IFrame senden, wie Sie nicht die Regeln der Cross-Site-Scripting brechen.
//Dieser Code würde in der IFrame JavaScript-Datei platziert werden:
parent.postMessage('this is a message', '*')
Um vom Hauptfenster aus dem Containerfenster zu hören, fügen Sie einfach einen Event-Listener zum Fenster hinzu.
window.addEventListener("message", function(e){ 
 console.log(e.data); 
});
Der obige Code druckt den Inhalt der Nachricht an Ihre Konsole.
Durch das Analysieren des Inhalts der Nachricht können Sie eine Funktionalität erstellen, die sowohl mit dem Hauptfenster als auch mit dem IFrame arbeitet.
Methoden zum Navigieren des DOM-Baums:
ele.parentNode  // finden die parent von ele
ele.firstChild  // finden den ersten child-node von ele
ele.nextSibling // finden die nächste Geschwister(sibling)von ele
ele.previousSibling //finden die vorherigen sibling von ele
Methoden zum Entfernen aus dem DOM-Baum:
ele.replaceChild(x, y) //Ersetzen Sie child x von ele mit node y
ele.removeChild(x) // Entfernen den child x von ele
Methoden zum Kopieren von node:
ele.cloneNode(false); // klone nur der node (falche kopie)
ele.cloneNode(true); // klone den node und seine kinder(tiefe kopie)
ele.importNode(node); // Importieren einen node in ele
Methoden für allgemeine Informationen:
ele.nodeName; // Gibt das Namensattribut oder den DOM-Namen zurück
ele.nodeType; // Gibt eine Zahl a.e zurück. 3 ist Text, 8 ist Kommentar
ele.hasChildNodes(); // Gibt Boolean zurück,wenn es knder hat
ele.childNodes; // Gibt die node-Liste der kinder zurück
ele.textContent; // gets text von ele, wenn vorhaden
ele.nodeValue;  // Neigt dazu, das gleiche wie textContent zu arbeiten
ele.contains(x); // Gibt true oder false zurück, wenn ele x enthält


Ressourcen:  
https://developer.mozilla.org/en-US/docs/Web/JavaScript
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators
https://developer.mozilla.org/en-US/docs/Web/API/Node
http://www.w3schools.com/js/js_function_invocation.asp

No comments:

Post a Comment