JavaScriptで空文字をチェックする3つの方法 - 初心者向け完全ガイド

JavaScriptで空文字をチェックする3つの基本的な方法を初心者向けに解説。length、trim()、真偽値の判定方法と使い分けを詳しく説明します。

Learning Next 運営
24 分で読めます

みなさん、フォームの入力チェックで困ったことはありませんか?

「入力フィールドが空かどうか確認したい」「ユーザーがちゃんと文字を入力したかチェックしたい」「スペースだけの入力も空として扱いたい」

こんな場面って、Webアプリを作っていると必ず出てきますよね。

実は、JavaScriptには空文字をチェックする3つの基本的な方法があります。 それぞれ特徴が違うので、用途に応じて使い分けることが大切なんです。

この記事では、空文字判定の3つの方法について初心者向けに詳しく解説します。 フォームバリデーションにも役立つ実践的な内容をお届けしますよ!

空文字判定って何?基本を理解しよう

文字列が空っぽかチェックする仕組み

空文字判定とは、文字列が空(何も文字が含まれていない)かどうかを確認する処理のことです。

簡単に言うと、「この入力欄に何か入っているか、それとも空っぽか」を判定する機能ですね。 フォームの必須項目チェックなどでよく使われます。

ユーザーが何も入力していないときに警告を出したり、空の値を除外したりできます。

いろんな「空」がある

JavaScriptで扱う「空」には、実はいくつかの種類があります。

// 様々な「空」の例
let empty1 = ''; // 完全に空の文字列
let empty2 = ' '; // スペース1つ
let empty3 = ' '; // スペース複数
let empty4 = '
'; // 改行文字
let empty5 = null; // null
let empty6 = undefined; // undefined
console.log('empty1:', empty1); // ''
console.log('empty2:', empty2); // ' '
console.log('empty3:', empty3); // ' '

完全に空の文字列、スペースだけの文字列、nullやundefinedなど、状況によって異なります。 どれを「空」として扱うかで、チェック方法も変わってくるんです。

これらの違いを理解することで、適切な判定方法を選択できますよ。

方法1: lengthプロパティでチェックしよう

一番シンプルな方法

最もわかりやすくて直感的な空文字判定の方法です。

// lengthプロパティを使った基本的な判定
function isEmpty(str) {
return str.length === 0;
}
// 使用例
console.log(isEmpty('')); // true
console.log(isEmpty('Hello')); // false
console.log(isEmpty(' ')); // false(スペースは文字として扱われる)

str.length === 0で文字列の長さをチェックしています。 長さが0なら空文字、1以上なら何か入っているということですね。

ただし、スペースも1文字として扱われるので注意が必要です。

より安全な実装

null や undefined も考慮した、より実用的な関数を作ってみましょう。

// より安全な空文字判定
function isEmptySafe(str) {
// null または undefined の場合は true を返す
if (str == null) {
return true;
}
// 文字列の長さをチェック
return str.length === 0;
}
// さらに厳密な型チェック
function isEmptyStrict(str) {
// 文字列でない場合は false を返す
if (typeof str !== 'string') {
return false;
}
return str.length === 0;
}

str == nullでnullとundefinedの両方をまとめてチェックできます。 typeof str !== 'string'で文字列以外の値を除外することも可能です。

実際に使ってみましょう。

console.log(isEmptySafe('')); // true
console.log(isEmptySafe(null)); // true
console.log(isEmptySafe(undefined)); // true
console.log(isEmptySafe(' ')); // false
console.log(isEmptyStrict('')); // true
console.log(isEmptyStrict(null)); // false
console.log(isEmptyStrict(123)); // false

用途に応じて、適切な厳密さを選択できますね。

方法2: trim()メソッドで空白も除去しよう

スペースだけの入力も空として扱う

スペースやタブなど、見た目には空に見える文字列も空として扱いたい場合の方法です。

// trim()を使った空文字判定
function isEmptyOrWhitespace(str) {
// null または undefined チェック
if (str == null) {
return true;
}
// 前後の空白を削除して長さをチェック
return str.trim().length === 0;
}
// 使用例
console.log(isEmptyOrWhitespace('')); // true
console.log(isEmptyOrWhitespace(' ')); // true
console.log(isEmptyOrWhitespace(' ')); // true
console.log(isEmptyOrWhitespace('
')); // true
console.log(isEmptyOrWhitespace('Hello')); // false
console.log(isEmptyOrWhitespace(' Hi ')); // false

str.trim()で文字列の前後から空白文字を削除できます。 削除後の長さが0なら、実質的に空文字と判断できますね。

この方法は実際のフォームバリデーションでとても役立ちます。

実用的なフォームバリデーション

実際のフォームで使えるバリデーション関数を作ってみましょう。

// 実用的なフォームバリデーション
function validateName(name) {
if (isEmptyOrWhitespace(name)) {
return '名前を入力してください';
}
if (name.trim().length < 2) {
return '名前は2文字以上で入力してください';
}
return null; // エラーなし
}
console.log(validateName('')); // '名前を入力してください'
console.log(validateName(' ')); // '名前を入力してください'
console.log(validateName('A')); // '名前は2文字以上で入力してください'
console.log(validateName('田中')); // null

空文字チェックだけでなく、最小文字数のチェックも組み合わせています。 name.trim().length < 2で、空白を除いた実際の文字数をチェックできますね。

エラーメッセージを返すことで、ユーザーに分かりやすいフィードバックを提供できます。

trim()で削除される文字

trim()メソッドがどのような文字を削除するかを確認してみましょう。

// trim()が削除する文字の例
let testStrings = [
' Hello ', // 前後のスペース
' Hello ', // 前後のタブ
'
Hello
', // 前後の改行
'
Hello
', // 複数の空白文字
];
testStrings.forEach(str => {
console.log(`元の文字列: "${str}"`);
console.log(`trim()後: "${str.trim()}"`);
console.log(`長さ: ${str.length}${str.trim().length}`);
console.log('---');
});

スペース、タブ、改行文字などの空白文字がすべて削除されます。 ただし、文字列の途中にある空白は削除されないので注意してくださいね。

方法3: 真偽値判定でシンプルにチェックしよう

文字列のfalsy判定を活用

JavaScriptの真偽値判定を活用した、最もシンプルな方法です。

// 真偽値判定を使った空文字チェック
function isEmptyFalsy(str) {
return !str;
}
// 使用例
console.log(isEmptyFalsy('')); // true
console.log(isEmptyFalsy(' ')); // false(スペースは truthy)
console.log(isEmptyFalsy(null)); // true
console.log(isEmptyFalsy(undefined)); // true
console.log(isEmptyFalsy(0)); // true(数値の0も空扱い)
console.log(isEmptyFalsy(false)); // true(booleanのfalseも空扱い)

!strだけでfalsy値(false、0、''、null、undefined、NaN)をすべてチェックできます。 とてもシンプルですが、数値の0やfalseも空として扱われることに注意が必要です。

文字列に限定したい場合は、別の判定方法が必要ですね。

より厳密な空文字列判定

文字列だけに限定した判定方法も見てみましょう。

// 文字列専用の判定
function isEmptyString(str) {
return str === '';
}
// より厳密な空文字列判定
function isEmptyStringOnly(value) {
return typeof value === 'string' && value === '';
}
console.log(isEmptyStringOnly('')); // true
console.log(isEmptyStringOnly(null)); // false
console.log(isEmptyStringOnly(0)); // false

str === ''で完全一致をチェックする方法もあります。 typeof value === 'string'と組み合わせることで、文字列以外の値を除外できますね。

論理演算子を使った短縮記法

実際の開発でよく使われる短縮記法も覚えておきましょう。

// OR演算子を使ったデフォルト値設定
function greetUser(name) {
// 空文字の場合は 'ゲスト' を使用
name = name || 'ゲスト';
return `こんにちは、${name}さん!`;
}
console.log(greetUser('田中')); // 'こんにちは、田中さん!'
console.log(greetUser('')); // 'こんにちは、ゲストさん!'
console.log(greetUser(null)); // 'こんにちは、ゲストさん!'

name || 'ゲスト'で、nameがfalsyの場合にデフォルト値を設定できます。 この書き方はとても便利で、実際のプロジェクトでもよく使われますよ。

ES2020の新しい機能も紹介しておきますね。

// Null合体演算子(ES2020)
function greetUserModern(name) {
// null または undefined の場合のみデフォルト値を使用
name = name ?? 'ゲスト';
return `こんにちは、${name}さん!`;
}
console.log(greetUserModern('')); // 'こんにちは、さん!'(空文字はそのまま)
console.log(greetUserModern(null)); // 'こんにちは、ゲストさん!'

??演算子は、nullとundefinedの場合のみデフォルト値を使用します。

3つの方法の使い分けをマスターしよう

どの方法をいつ使う?

それぞれの方法に適した使用場面があります。

以下のガイドラインを参考にしてください。

  • lengthプロパティ: 完全に空の文字列のみをチェックしたい場合(最高速)
  • trim()メソッド: 空白文字も含めて空として扱いたい場合(推奨)
  • 真偽値判定: falsyな値すべてを空として扱いたい場合(最も緩い)
// 使い分けの例
class StringValidator {
// 1. 完全に空の文字列のみをチェック
static isStrictlyEmpty(str) {
return typeof str === 'string' && str.length === 0;
}
// 2. 空白文字も含めて空として扱う(推奨)
static isEffectivelyEmpty(str) {
return str == null || str.trim().length === 0;
}
// 3. falsy値すべてを空として扱う
static isFalsyEmpty(str) {
return !str;
}
}

実際に使ってみると、違いがよく分かります。

console.log('厳密な空文字判定:');
console.log(StringValidator.isStrictlyEmpty('')); // true
console.log(StringValidator.isStrictlyEmpty(' ')); // false
console.log('実質的な空文字判定:');
console.log(StringValidator.isEffectivelyEmpty('')); // true
console.log(StringValidator.isEffectivelyEmpty(' ')); // true
console.log('falsy判定:');
console.log(StringValidator.isFalsyEmpty('')); // true
console.log(StringValidator.isFalsyEmpty(0)); // true

パフォーマンス比較

気になるパフォーマンスも比較してみましょう。

// パフォーマンステスト用の関数
function performanceTest() {
const testString = '';
const iterations = 1000000;
// 方法1: length プロパティ
console.time('length method');
for (let i = 0; i < iterations; i++) {
testString.length === 0;
}
console.timeEnd('length method');
// 方法2: trim() メソッド
console.time('trim method');
for (let i = 0; i < iterations; i++) {
testString.trim().length === 0;
}
console.timeEnd('trim method');
// 方法3: 真偽値判定
console.time('falsy method');
for (let i = 0; i < iterations; i++) {
!testString;
}
console.timeEnd('falsy method');
}
// performanceTest(); // コメントアウトを外して実行

一般的に、lengthプロパティが最も高速で、trim()メソッドは少し処理が重くなります。 ただし、実用上はほとんど差を感じることはありませんよ。

実践的な活用例を学ぼう

フォームバリデーションクラス

実際のプロジェクトで使えるフォームバリデーションクラスを作ってみましょう。

// フォームバリデーションクラス
class FormValidator {
constructor() {
this.errors = {};
}
// 必須フィールドのチェック
validateRequired(fieldName, value, message = '必須項目です') {
if (this.isEmptyOrWhitespace(value)) {
this.errors[fieldName] = message;
return false;
}
return true;
}
// メールアドレスのチェック
validateEmail(fieldName, value) {
if (this.isEmptyOrWhitespace(value)) {
this.errors[fieldName] = 'メールアドレスは必須です';
return false;
}
const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (!emailPattern.test(value.trim())) {
this.errors[fieldName] = '正しいメールアドレスを入力してください';
return false;
}
return true;
}
// 空白文字を含む空文字判定
isEmptyOrWhitespace(str) {
return str == null || str.trim().length === 0;
}
// バリデーション結果を取得
getErrors() {
return this.errors;
}
// 全体のバリデーション結果
isValid() {
return Object.keys(this.errors).length === 0;
}
}

このクラスでは、trim()メソッドを使った実質的な空文字判定を採用しています。 フォームバリデーションでは、空白文字も空として扱うのが一般的だからです。

実際に使ってみましょう。

// 使用例
function validateUserForm(formData) {
const validator = new FormValidator();
validator.validateRequired('name', formData.name, '名前は必須です');
validator.validateEmail('email', formData.email);
return {
isValid: validator.isValid(),
errors: validator.getErrors()
};
}
// テストデータ
const testForm1 = {
name: '',
email: 'invalid-email'
};
const testForm2 = {
name: '田中太郎',
email: 'tanaka@example.com'
};
console.log('無効なフォーム:', validateUserForm(testForm1));
console.log('有効なフォーム:', validateUserForm(testForm2));

エラーメッセージも含めて、実用的なバリデーション機能が完成しました。

リアルタイム入力チェック

入力中にリアルタイムでチェックする機能も作ってみましょう。

<input type="text" id="userInput" placeholder="名前を入力してください">
<div id="feedback"></div>
class InputChecker {
constructor(inputId, feedbackId) {
this.input = document.getElementById(inputId);
this.feedback = document.getElementById(feedbackId);
this.init();
}
init() {
this.input.addEventListener('input', (event) => {
this.checkInput(event.target.value);
});
}
checkInput(value) {
let message = '';
let className = '';
if (this.isEmptyOrWhitespace(value)) {
message = '名前を入力してください';
className = 'warning';
} else if (value.trim().length < 2) {
message = '2文字以上で入力してください';
className = 'warning';
} else {
message = '入力内容は有効です';
className = 'success';
}
this.feedback.textContent = message;
this.feedback.className = className;
}
isEmptyOrWhitespace(str) {
return str == null || str.trim().length === 0;
}
}
// 初期化
const inputChecker = new InputChecker('userInput', 'feedback');

このように、リアルタイムでユーザーにフィードバックを提供できます。

まとめ

JavaScriptの空文字判定について、3つの基本的な方法を詳しく学習しました。

今回マスターした内容

  • lengthプロパティ: 最も高速で、完全に空の文字列のみを判定
  • trim()メソッド: 空白文字も空として扱い、実用的なバリデーションに最適
  • 真偽値判定: 最も簡潔で、falsyな値全般を空として扱う

実用的なポイント

  • フォームバリデーションではtrim()を使った判定が推奨
  • null/undefinedのチェックも忘れずに
  • 用途に応じて適切な厳密さを選択する
  • エラーメッセージでユーザビリティを向上

空文字判定は、ユーザーフレンドリーなWebアプリを作るための基本技術です。 適切に使い分けることで、堅牢で使いやすいフォーム機能を実装できます。

今回学んだ知識を活用して、ぜひ実際のプロジェクトで空文字判定を使ってみてください。 最初は基本的なチェックから始めて、徐々に高度なバリデーション機能に挑戦していけば、必ずスキルアップできますよ!

関連記事