Wie überprüfe ich Nullwert und undefiniert, um die Eigenschaft eines verschachtelten Objekts zu erhalten?

Nullish- und Chain-Operatoren

   const product = {
    name: 'Coke',
    price: 10,
    provider: {
      name: 'Wailkk',
      address: 'Fake Street',
      state: {
        id: 1,
        name: 'Florida',
        country: {
          code: 'US',
          name: 'United States',
        },
      },
      orders: null,
      fPrice: (x) => 100,
    },
  };

  //Old way
  const providerCountry = product.provider
    ? product.provider.name
      ? product.provider.name
      : null
    : null;

  //Nullish Coalsencing Operator Way
  //If the value is null then this option it will not works.
  const _providerCountry = product.provider.name ?? undefined;

  //Not work if the value is null
  const providerOrders = product.provider.orders ?? 1;
  // Should be null.  [Error]

  // Nullish not defined.
  const providerNotDefined = product.provider.notDefined ?? null;

  //Trick: chaining Operator
  const providerAddress = product?.provider?.address;

  //It works with Dynamic properties.
  const propertyName = 'price';
  const productPrice = product?.[propertyName]?.explore;  

Kettenbetreiber Weg

Wenn eine Eigenschaft nicht existiert oder der Wert undefiniert ist, wird undefiniert zurückgegeben, wodurch Ihr Code sauber bleibt. Wenn eine Eigenschaft nicht existiert, wird undefined zurückgegeben. Sehen wir uns an, wie dieser Operator mit demselben Beispielobjekt aussieht:

      //Trick: chaining Operator
  const providerAddress = product?.provider?.address;

  //It works with Dynamic properties.
  const propertyName = 'price';
  const productPrice = product?.[propertyName]?.explore;

  //Works with Functions too.
  const productProviderPrice = product?.provider?.fPrice?.('x');
  //Result: 100;

  const _productProviderPrice = product?.provider?.fPricex?.('x');
  //Result: undefined
    

>NICHT kompatibel mit: Internet Explorer, Firefox für Android, Opera für Android und Samsung Internet Browser.


IIFE: Sofort aufgerufener Funktionsausdruck

Es ist eine Funktion, die unmittelbar nach ihrer Definition aufgerufen wird (wie der Name schon sagt).

    let hi = (() => {
  return 'Hello Dear World';
})();
//Define function and parenthesis before the semicolon.

console.log(hi); 
// Result = 'Hello Dear World'
    

Funktionsverschlüsse

Kombination von Funktionen gestapelt oder gebündelt mit Zugriff über äußere Schichten oder den Umfang der äußeren Funktionen.

    
    const functionLevelOne = () => {
  let day = 23;

  const functionLevelTwo = () => {
    day += 1;
    return day;
  }

  return functionLevelTwo;
}

console.log(functionLevelOne());
// Result: 24;
// It's calling the return function on level one.

Wann werden Spread-Operatoren verwendet?

Das Zusammenführen von zwei Arrays mithilfe von Spreads kann sich auf die Leistung auswirken, wenn es sich um einen sich wiederholenden Aufruf handelt. Und wenn wir eine Funktion aufrufen, die Argumente wie Spread übergibt, und dieser Aufruf ist häufig. Verwenden Sie ...spread nur, wenn es sich nicht um einen sich wiederholenden Aufruf oder für den Aufruf einer Funktion handelt, aber nicht als Argument-Spread-Definition.

Ich werde diesem Artikel regelmäßig Tricks hinzufügen und aktualisieren.

Suchen und Filtern

  • Suchen Sie einen Datensatz für den Schlüsselwert:
    let colors = [
  { id: 0, color: 'Red' },
  { id: 1, color: 'Green' },
  { id: 2, color: 'Blue' }
];
let greenColor = colors.find(color => color.color === 'Green');
    

Datensätze nach ID-Wert filtern

    
    let users = [
  { id: 0, name: 'John Smith' },
  { id: 1, name: 'Mary Smith' },
  { id: 2, name: 'Jane Foster' }
];

let filteredData = data.filter(path => path.includes('Smith'));

Gibt den Namen von Benutzern mit dem Nachnamen 'Smith' zurück.

Iterationen

Iteriere zwischen Schlüssel,Werten für ein Objekt.

    let myObject = { one: 1, two: 2, three: 3 };
Object.keys(myObject).forEach((key, value) => {
  //...do something
  console.log(key, value);
});
    

Grundlegendes zur Ereignisschleife.

Eine Aufgabenwarteschlange wird von Javascript verwendet. Javascript-Aufgaben haben die höchste Priorität. Mikroaufgaben wie Versprechen haben die zweite Prioritätsposition; Dritter Platz für Makroaufgaben, die vor (requestAnimationFrame) oder nach (setTimeout) zum Rendern ausgeführt wurden.

   console.log(1);
Promise.resolve().then(() => console.log(2));
setTimeout(() => console.log(3), 100);
console.log(4);
// 1 -> 4 -> 2 -> 3 
    

Es gibt drei Möglichkeiten, Ihre Callback-Funktion(en) als Ereignis-Callback zum DOM-Element hinzuzufügen.

  • InLine (höhere Priorität)

        
    Hello
  • Rückruf binden (mittlere Priorität)

        div.onclick = () => console.log('div');
    
  • Ereignis-Listener hinzufügen/entfernen: Unterstützt mehrere Rückrufe, die demselben Ereignis zugeordnet sind. Unterstützt Event-Bubbling und -Erfassung.

        div.addEventListener('click', callbackOne);
    div.removeEventListener(callbackOne);
    

Sprudeln

    

//span ? p ? div

Sprudeln: Das innerste Element ? das zweitinnerste Element ? … ? das äußerste Element
Erfassen: Das äußerste Element ? das zweitäußerste Element ? … ? das innerste Element

Die Aufnahme wird früher ausgelöst als das Sprudeln

    div.addEventListener('click', () => console.log('div'));
p.addEventListener('click', () => console.log('p'), { capture: true });
span.addEventListener('click', () => console.log('span'));
//Result: p ? span ? div

div und span verwenden Bubbling und p verwendet Capture.

Veranstaltungsdelegation

Wenn Sie eine Schleifenfunktion mit mehreren Callbacks haben, die sich auf die Leistung auswirkt:

    const ul = document.getElementById('myUL');
for (let i = 0; i < 100; i += 1) {
  const li = document.createElement('li');
  li.textContent = `li-${i}`;
  li.id = `li-${i}`;
  li.addEventListener('click', e => console.log(e.target.id));
  ul.appendChild(li);
}

Delegieren Sie einen Rückruf für alle.

    const ul = document.getElementById('myUL');
for (let i = 0; i < 100; i += 1) {
  const li = document.createElement('li');
  li.textContent = `li-${i}`;
  li.id = `li-${i}`;
  ul.appendChild(li);
}
ul.addEventListener('click', e => console.log(e.target.id));

Ereignisausbreitung

Stop-Propagation stoppt die Propagation, die durch Bubbling oder Capture verwendet wird.

    div.addEventListener('click', () => console.log('div'), true);
p.addEventListener('click', e => {
  e.stopPropagation();
  console.log('p');
});
span.addEventListener('click', () => console.log('span'), true);

Wenn der Benutzer klickt

wird nur 'p' protokolliert.

XMLHttpRequest

Älteste Daten asynchron abrufen

    const oReq = new XMLHttpRequest();
oReq.open('GET', 'https://jsonplaceholder.typicode.com/todos/1');
oReq.send();
oReq.addEventListener('load', function () {
  console.log(this.responeText);
});

Bringen

Neuer Weg mit mehr Optionen als XMLHttpRequest, gibt ein Versprechen zurück

    // Promise
fetch(url)
  .then(res => res.json())
  .then(data => console.log(data));
// async & await
const res = await fetch(url);
const data = await res.json();
console.log(data);

Axios

Es braucht das Beste aus XMLHttpRequest und fetch.

    // Promise 
axios.get('/user?ID=12345')
  .then(function (response) {
    // handle success
    console.log(response);
  })
  .catch(function (error) {
    // handle error
    console.log(error);
  })
  .finally(function () {
    // always executed
  });
// async & await
async function getUser() {
  try {
    const response = await axios.get('/user?ID=12345');
    console.log(response);
  } catch (error) {
    console.error(error);
  }
}