概要
JavaScriptでは、値が真(true)または偽(false)として評価される場合があります。これをそれぞれ「Truthy」と「Falsy」と呼びます。
Falsyの値
JavaScriptでFalsyとして評価される主な値は以下の通りです:
false0-
""(空文字列) nullundefinedNaN-0
Truthyの値
Falsy以外のすべての値はTruthyとして評価されます:
true- 0以外の数値(
1,-1,3.14など) - 空でない文字列(
"hello","0"など) - オブジェクト(
{},[]など) - 関数
NOT演算子(!)
NOT演算子(!)は、値の真偽を反転させる演算子です。
基本的な動作
// boolean値の反転
console.log(!true); // false
console.log(!false); // true
// Falsy値に対する反転
console.log(!0); // true
console.log(!""); // true
console.log(!null); // true
console.log(!undefined); // true
// Truthy値に対する反転
console.log(!1); // false
console.log(!"hello"); // false
console.log(!{}); // false
ダブルNOT演算子(!!)
値を明示的にboolean型に変換するために使用:
console.log(!!"hello"); // true
console.log(!!""); // false
console.log(!!0); // false
console.log(!!1); // true
実践的な活用例
1. フォームバリデーション
function validateForm() {
const username = document.getElementById('username').value;
const email = document.getElementById('email').value;
// Falsyを活用した簡潔なバリデーション
if (!username) {
alert('ユーザー名を入力してください');
return false;
}
if (!email) {
alert('メールアドレスを入力してください');
return false;
}
return true;
}
2. デフォルト値の設定
function greetUser(name, age) {
// Falsyの場合にデフォルト値を設定
const displayName = name || 'ゲスト';
const displayAge = age || '不明';
console.log(`こんにちは、${displayName}さん(${displayAge}歳)`);
}
3. 配列・オブジェクトの存在チェック
const items = ['apple', 'banana'];
// 配列の長さをTruthyで判定
if (items.length) {
console.log('商品があります');
}
// オブジェクトのプロパティ存在チェック
const user = { name: '田中', email: '' };
if (user.email) {
console.log(`メール: ${user.email}`);
} else {
console.log('メールアドレスが未設定です');
}
4. 条件付きレンダリング
function updateUserProfile(userData) {
const profileDiv = document.getElementById('profile');
if (userData && userData.name) {
profileDiv.innerHTML = `
<h2>${userData.name}</h2>
${userData.bio ? `<p>${userData.bio}</p>` : ''}
`;
} else {
profileDiv.innerHTML = '<p>プロフィール情報がありません</p>';
}
}
メリット
- 条件分岐の簡潔な記述 - 冗長な比較演算を削減
- デフォルト値の設定 - OR演算子を使った効率的な初期化
- バグの予防 - null/undefinedによる実行時エラーの回避
- コードの可読性向上 - 意図が明確で理解しやすいコード
- JavaScriptらしい記述 - 言語の特性を活かした自然な書き方
TruthyとFalsyの概念を理解することで、より効率的で安全なJavaScriptコードを書けるようになります。