
JavaScriptのイベント処理:クリック、フォーム入力からバブリング・デリゲーションまで
はじめに JavaScriptのイベント処理は、インタラクティブなウェブアプリケーション開発の核心です。ユーザーのクリック、フォーム入力、キーボード操作など、あ […]
JavaScriptの演算子は、値に対して操作を行うための記号です。主な演算子の種類を紹介します。
let a = 10, b = 3;
console.log(a + b); // 13 加算
console.log(a - b); // 7 減算
console.log(a * b); // 30 乗算
console.log(a / b); // 3.333... 除算
console.log(a % b); // 1 剰余
console.log(a ** b); // 1000 べき乗(ES2016)
console.log(a++); // 10 後置インクリメント
console.log(++a); // 12 前置インクリメント
console.log(10 == '10'); // true 等価(型変換あり)
console.log(10 === '10'); // false 厳密等価
console.log(10 != '10'); // false 不等価
console.log(10 !== '10'); // true 厳密不等価
console.log(10 > 5); // true 大なり
console.log(10 < 5); // false 小なり
console.log(10 >= 10); // true 以上
console.log(10 <= 5); // false 以下
// 論理AND(両方がtrueならtrue)
console.log(true && true); // true
console.log(true && false); // false
// 論理OR(どちらかがtrueならtrue)
console.log(true || false); // true
console.log(false || false); // false
// 論理NOT(真偽を反転)
console.log(!true); // false
console.log(!false); // true
let age = 20;
let status = age >= 18 ? '成人' : '未成年';
console.log(status); // '成人'
// 代入演算子
let x = 10;
x += 5; // x = x + 5 と同じ
// Null合体演算子(ES2020)
let value = null ?? 'デフォルト値'; // 'デフォルト値'
// オプショナルチェーン(ES2020)
const user = { name: '太郎' };
console.log(user?.address?.city); // undefined(エラーにならない)
let score = 85;
if (score >= 80) {
console.log('優秀です');
}
if (score >= 60) {
console.log('合格');
} else {
console.log('不合格');
}
if (score >= 90) {
console.log('S評価');
} else if (score >= 80) {
console.log('A評価');
} else if (score >= 70) {
console.log('B評価');
} else {
console.log('C評価');
}
let age = 20;
let hasLicense = true;
if (age >= 18) {
if (hasLicense) {
console.log('運転可能');
} else {
console.log('免許が必要');
}
} else {
console.log('18歳未満は運転不可');
}
let day = 3;
let dayName;
switch (day) {
case 1:
dayName = '月曜日';
break;
case 2:
dayName = '火曜日';
break;
case 3:
dayName = '水曜日';
break;
case 4:
dayName = '木曜日';
break;
case 5:
dayName = '金曜日';
break;
default:
dayName = '週末';
}
console.log(dayName); // '水曜日'
let fruit = 'りんご';
let message = '';
switch (fruit) {
case 'りんご':
case 'みかん':
case 'ぶどう':
message = 'フルーツです';
break;
case 'にんじん':
message = '野菜です';
break;
default:
message = '不明な食品';
}
console.log(message); // 'フルーツです'
let num = 15;
switch (true) {
case num % 15 === 0:
console.log('FizzBuzz');
break;
case num % 3 === 0:
console.log('Fizz');
break;
case num % 5 === 0:
console.log('Buzz');
break;
default:
console.log(num);
}
// 👍 推奨
if (value === 10) { ... }
// 👎 非推奨
if (value == 10) { ... }
function checkAge(age) {
if (age < 0) return '無効な値';
if (age < 18) return '未成年';
return '成人';
}
// 👍 読みやすい
const isWeekend = day === 6 || day === 0;
const isWorkingHours = hour >= 9 && hour <= 17;
if (isWeekend || !isWorkingHours) { ... }
const dayNames = {
1: '月曜日',
2: '火曜日',
3: '水曜日',
4: '木曜日',
5: '金曜日'
};
console.log(dayNames[day] || '週末');
let x = 5;
let y = '5';
console.log(x == y);
console.log(x === y);
age
が20以上なら「成人」 let color = 'red';
switch (color) {
case 'red':
console.log('赤');
break;
case 'blue':
console.log('青');
break;
default:
console.log('不明');
}
console.log(0 == false);
console.log(0 === false);
console.log('' == false);
console.log('' === false);
let score = 75;
let result;
if (score >= 60) {
result = '合格';
} else {
result = '不合格';
}
let num = 10;
if (num > 5)
console.log('5より大きい');
console.log('確かに大きい');
else
console.log('5以下');
let username = null;
let displayName = username !== null && username !== undefined ? username : 'ゲスト';
fruit
が'apple'の場合の出力を答えなさい。 let fruit = 'apple';
switch (fruit) {
case 'banana':
console.log('バナナ');
case 'apple':
console.log('りんご');
case 'orange':
console.log('オレンジ');
break;
default:
console.log('不明');
}
console.log(1 + '2' - 3);
1から100までの数字を出力するプログラムを書きなさい。ただし:3の倍数なら「Fizz」、5の倍数なら「Buzz」、3と5の倍数なら「FizzBuzz」、それ以外は数字を出力する。
const user = {
profile: {
name: '太郎',
address: null
}
};
let city;
if (user && user.profile && user.profile.address && user.profile.address.city) {
city = user.profile.address.city;
} else { city = '不明'; }
getSeason
を作成しなさい。引数に月(1-12)を受け取る。3-5月は「春」、6-8月は「夏」、9-11月は「秋」、12-2月は「冬」、範囲外の数値は「無効な月」を返す。switch文を使用すること。
let x = 5;
let y = '5';
console.log(x == y); // true 型変換が行われる
console.log(x === y); // false 型も含めて比較
age
が20以上なら「成人」 if (age >= 20) {
console.log('成人');
} else if (age >= 18) {
console.log('青年');
} else {
console.log('未成年');
}
もしくは
if (age < 18) console.log('未成年');
else if (age < 20) console.log('青年');
else console.log('成人');
if (color === 'red') {
console.log('赤');
} else if (color === 'blue') {
console.log('青');
} else {
console.log('不明');
}
true // 0はfalsyな値でfalseと等価とみなされる
false // 型が異なる
true // 空文字列はfalsyな値
false // 型が異なる
let result = score >= 60 ? '合格' : '不合格';
// 中括弧{}を省略しているが、複数行書いているためelseがifに対応しない
// 修正例:
if (num > 5) {
console.log('5より大きい');
console.log('確かに大きい');
} else {
console.log('5以下');
}
let displayName = username ?? 'ゲスト';
fruit
が'apple'の場合の出力結果りんご
オレンジ
let fruit = 'apple';
switch (fruit) {
case 'banana':
console.log('バナナ');
case 'apple': // appleが指定される
console.log('りんご'); // ここでりんごの表示が実行される
case 'orange': // breakがないため実行される
console.log('オレンジ'); // ここでオレンジの表示が実行される
break; // breakでwitch文を抜ける
default:
console.log('不明');
}
console.log(1 + '2' - 3);
// 1 + '2' => +演算子は文字列結合演算になり文字列'12'となる
// '12' - 3 => 文字列'12'が数値12に変換され、12-3=9
for (let i = 1; i <= 100; i++) {
let output = '';
if (i % 3 === 0) output += 'Fizz';
if (i % 5 === 0) output += 'Buzz';
console.log(output || i);
}
JavaScriptのオプショナルチェーンはnull
やundefined
のプロパティを誤って参照しないようにしつつ、記述量を抑えられる書き方です。オプショナルチェーンは ?.
演算子を用いて書きます。
let city = user?.profile?.address?.city ?? '不明';
javascript function getSeason(month) {
switch (month) {
case 3: case 4: case 5: return '春';
case 6: case 7: case 8: return '夏';
case 9: case 10: case 11: return '秋';
case 12: case 1: case 2: return '冬';
default: return '無効な月';
}
}