Basic JavaScript基本構文

Basic Dott

Source: https://github.com/BoxPistols/JavaScriptBasicDott.git

参考: https://www.javadrive.jp/javascript/

Type 型判定

"use strict"
{
    console.log(typeof "hello") // string
    console.log(typeof 5) // number
    console.log(typeof true) // boolean'../css/base.styl'
    
    console.log(typeof underfined)
    console.log(typeof null) // obj
    
    
    console.log('5' + 3) // 53
    console.log(parseInt('5', 10) + 3) // 8 <- parseIntで文字列を数値に変更
}

演算子条件

"use strict"

const score = 40
score >= 80 ? console.log('Win') : console.log('Lose')

const el = document.querySelector('.content')
el.innerHTML = score

論理演算子

'use strict'

const score = 60
const name = 'mike'

if(score >= 50){
  if(name === 'mike'){
    console.log('Good!!')
  }
}

// 同じ条件文で、論理演算子
if(score >= 50 && name === 'mike'){
  console.log('LON!')
}

Switch文

const el = document.querySelector('.content');

const signal = 'red';

switch(signal) {
  case "red":
    console.log('stop');
    el.innerHTML = ('stop');
    el.classList.add('stop');
    break;
  case "yellow":
    console.log('alert');
    el.innerHTML = ('alert');
    el.classList.add('alert');
    break;
  case "blue":
  case "green": // 複数条件
    console.log('go!');
    el.innerHTML = ('go!');
    break;
  default: // 該当が何もなかった時
    console.log('Wait...');
    el.innerHTML = ('Wait...');
}

for文

let el = document.querySelector('.content');

for (let i = 0; i <= 10; i++) {
  console.log(`Hello: ${i}`); //<- 1 2 3... 9 10
  el.innerHTML = (`Hello: ${i}`); //<- Hello 10
}

while / do while

let el = document.querySelector('.content');

let hp = 100;
while (hp > 0){
  console.log(`${hp} left!`);
  hp -= 15
}

// もし初期値が最初からコープ外だった時
let hpMinus = -70;
do{
  // 1- 初期変数が一度だけ表示され
 console.log(`${hpMinus} left!`);
  hpMinus -= 15;
} while (hpMinus > 0); // 2- その後whileが稼働する

Continue / Break

for (let i = 0; i <= 10; i++) {
  if (i === 2 || i === 4 || i % 3 ===0){ // 2, 4, 3の倍数
    continue // 飛ばす箇所
  }
  if(i >= 9){
    break // 止める
  }
  console.log(i);
}

関数 / 引数

let el = document.querySelector('.content');

function showAd() {
  console.log('-------------------');
  console.log('--------AD---------');
  console.log('-------------------');
}
showAd();

function showAd2(msg = '何もなかった時表示') { // 仮引数 =  仮置き
  console.log('-------------------');
  console.log(`------${msg}-----`); // `xxx` テンプレートリテラル
  console.log('-------------------');
}
showAd2('ナイスな広告'); // 実引数

関数宣言・関数式・無名関数

// 関数宣言
function sum(x, y, z) { // 関数(仮引数)
  //console.log(x + y + z);
  return x + y + z; // 処理結果を値で返したい
  // return以降は何も機能しない
}

// 関数式 function()無名関数
const sum = function(x, y, z) { // 関数(仮引数)
  //console.log(x + y + z);
  return x + y + z; // 処理結果を値で返したい
  // return以降は何も機能しない
};

/*
 returnにすることで、
 sum関数自体を式に出来るようになった
 関数名(実引数, 実引数, ...)
 */
const total = sum(12, 3, 4) + sum(2, 3, 4);
console.log(total);

アロー関数

let el = document.querySelector('.content');


// default js
const sum = function (a, b, c) {
  return a + b + c
};

// arrow js
const sum = (a, b, c) => {
  return a + b + c
};

// 省略表現
const sum = (a, b, c) =>  a + b + c;

const result = sum(12, 3, 4);
el.innerHTML = result;

// 関数式 無名関数
const d = function (a) {
  return a * 2;
};

// 関数式省略 / 単体だと(仮引数):() は無くて良い / return省略 & 一行で可
const d = a => a * 2;
el.innerHTML = d(12);

Arrow関数でforEach

const array = [1, 2, 3, 4];
array.forEach(number => console.log(number));

array.forEach((num, index) => console.log(index + 1, num));

アロー関数の種類

アロー関数のexpression部は、次の2種類を持つことが出来る

const array = [1, 2, 3, 4];

1- {}で囲わない簡潔文体(concise body)
// 簡潔文体
array.map(number => number + number);

2- {}で囲うブロック文体(block body)
// ブロック文体
array.map(number => {
  return number + number;
});

簡潔文体は、最後の処理結果がそのまま戻り値として返りますが、
ブロック文体は自動的に値を返しません。
そのため、明示的にreturnで値を返す必要があります。

Object

map

{
  let el = document.querySelector('.content');
  const prices = [180, 190, 200];

  const upDatePrices = prices.map((price) => {
    return price * 2;
  });
  console.log(upDatePrices);
  el.innerHTML = upDatePrices;

  // to Arrow function
  const upPrice2 = prices.map(price => price * 20);
  console.log(upPrice2);
  el.innerHTML = upDatePrices;
}

Array Loop

'use strict';

{
  const scores = [80, 90, 40, 70];

  // console.log(`Score: ${scores[0]}`);
  // console.log(`Score: ${scores[1]}`);
  // console.log(`Score: ${scores[2]}`);

  // for (let i = 0; i < 3; i++) {
  for (let i = 0; i < scores.length ; i++) {
    console.log(`${i}: ${scores[i]}`)
  }
}

Array 操作 push shift pop unshuft

'use strict';

{
  const scores = [80, 90, 40, 70];

  scores.push(60,50); // 末尾に追加
  scores.shift(); // 先頭削除

  // console.log(`Score: ${scores[0]}`);
  // console.log(`Score: ${scores[1]}`);
  // console.log(`Score: ${scores[2]}`);

  // for (let i = 0; i < 3; i++) {
  for (let i = 0; i < scores.length ; i++) {
    console.log(`${i}: ${scores[i]}`)
  }
}

splice 削除 追加

'use strict';

{
  const scores = [80, 90, 40, 70];
  // scores.push(60,50); // 末尾に追加
  // scores.shift(); // 先頭削除

  scores.splice(0,1,777, 888);
  // (start: x, deleteCount: x, items: x , x)
  // 先頭[0]番目から1つ要素を削除して、末尾に要素を追加

  // for (let i = 0; i < 3; i++) {
  for (let i = 0; i < scores.length ; i++) {
    console.log(`${i}: ${scores[i]}`)
  }
}

filter

'use strict';

{
  const numbers = [1, 4, 7, 8, 10];

  // const evenNumbers = numbers.filter(number => {
  //   if (number % 2 === 0) {
  //     return true;
  //   } else {
  //     return false;
  //   }
  // });

  // 一行で
  const evenNumbers = numbers.filter(number => number % 2 === 0);

  console.log(evenNumbers);
  
  ---------------------------------------
  
  // 式自体を return
  const evenNum = numbers.filter(num => {
     return num % 3 === 0;
  });

  // さらに短く
  const evenNum = numbers.filter(num => num % 3 === 0)
  
  const el = document.querySelector(".content");
  el.insertAdjacentHTML("beforeend", `<h2>even:${evenNum}</h2>`);

}

分割代入

 const score = [40, 60, 80, 90, 120]
 /*
    分割代入
 */
 const[a,b, ...hoge] = score // hoge = 残りの配列
 el.innerHTML = `${a} : ${b} : ${hoge}`

Object オブジェクトの取得と操作

"use strict";

{
  const el = document.querySelector(".content");
  // el.insertAdjacentHTML("beforeend", `<p>テスト:テスト${null}`);

  const others = {
    r: 111,
    color: "red"
  };

  const point = {
    x: 100,
    y: 180,
    n: 120,
    ...others // include
  };

  point.x = 120; // 上書き
  point.z = 90; // 要素追加

  // delete point.z
  // console.log(point)

  // キーからプロパティを取得
  el.insertAdjacentHTML("beforeEnd", `<p>キーからプロパティを取得:${point.z}`);

  // forで全部取得 <- 冗長?
  // for (var i = 0; i < Object.keys(point).length; i++) {
  //   el.insertAdjacentHTML(
  //     "beforeEnd",
  //     `<p>Obj:
  //     ${Object.keys(point)[i]}:
  //     ${Object.values(point)[i]}`
  //   );
  // }
  
  // forEachで取得
  const keys = Object.keys(point); // 定数keysにオブジェクト内容を設定
  keys.forEach(key => { // keyという名前でキーを全部受け取る
  // キーの取得 = ${key} & プロパティの取得 = ${point[key]}
    el.insertAdjacentHTML("beforeEnd", `<div class="fx"><p>Key:${key}</p> <p>Value:${point[key]}</p></div>`);
  });

}

文字列

"use strict";

{
  const el = document.querySelector(".content");
  el.insertAdjacentHTML("beforeend", `<p>テスト:テスト${null}`);

  const str = "吉田かおり"

  // 文字数: str.length
  // 部分文字列: str.substring(2, 4)
  let end = str.length
  el.insertAdjacentHTML("beforeend", `<p>テスト:テスト${str.substring(0, end)}`);
}

文字列の整形

"use strict";

{
  const el = document.querySelector(".content");
  // el.insertAdjacentHTML("beforeend", `<p>テスト:テスト${null}`);

  const str = "吉田かおり"
  // 文字数: str.length
  // 部分文字列: str.substring(2, 4)
  let end = str.length
  el.insertAdjacentHTML("beforeend", `<p>名前:
${str.substring(0, end - 1)}`);


/*------ join() split() --------*/
  const d = [2019, 11, 14];
  // 配列の連結UI
  el.insertAdjacentHTML("beforeend", `<p>日時: ${d} </p>`);
  el.insertAdjacentHTML("beforeend", `<p>日時 join('/'): ${d.join('/')} </p>`);
  el.insertAdjacentHTML("beforeend", `<p>日時 join(''): ${d.join('')} </p>`);

  const t = '17:08:24';
  el.insertAdjacentHTML("beforeend", `<p>時間: ${t} </p>`);
  el.insertAdjacentHTML("beforeend", `<p>時間 split(':'): ${t.split(':')} </p>`);

  const [hour, minute, second] = t.split(':');
  el.insertAdjacentHTML("beforeend", `<p>const [hour, minute, second] = t.split(':');</p><p>時間: ${hour}${minute}${second}秒 </p>`);

}

数値表示 合計 平均 小数点

"use strict";

{
  const el = document.querySelector(".content");
  // el.insertAdjacentHTML("beforeend", `<p>テスト: ${null}</p>`);

  /*------ 数値計算 --------*/

  const scores = [10, 3, 9];

  // 形容の変数を置く
  let sum = 0;

  scores.forEach(score => {
    sum += score;
  });

  el.insertAdjacentHTML("beforeend",
    `<p>forEach 計算:${scores.length}件: 合計 ${sum}</p>`
  );

  const avg = sum / scores.length

  el.insertAdjacentHTML("beforeend",
  `<p>forEach 平均:${avg.toFixed(2)}</p>`);
  /*
    少数点 切り捨て Math.floor(avg)
    少数点 切り上げ Math.ceil(avg)
    少数点 四捨五入 Math.round(avg)
    少数点 num桁表示 avg.Math.toFixed(3)
  */
}

ランダム

  /*
  console.log(Math.random()); 0以上1未満

  0, 1, 2
  Math.floor(Math.random() * 3)

  0, ..., n
  Math.floor(Math.random() * (n + 1))

  min, ..., max
  Math.floor(Math.random() * (max + 1 - min)) + min
  el.insertAdjacentHTML("beforeend", `<h3>ランダム</h3>`);
  console.log(Math.floor(Math.random() * 6) + 1);
*/

// サイコロ = 1 - 6 の間の整数
  el.insertAdjacentHTML(
    "beforeend",
    `<h3>サイコロ ランダム: ${Math.floor(Math.random() * 6) + 1}</h3>`
  );

import / export

Foo.js

export default function Foo(){}
  return (<p>foo</p>)

Bar.js

const Bar = () =>{
  return (<p>boo</p>)
}
export default Bar

Last updated