hene

hene.dev

JavaScript で、if 文 や switch 文 の結果を変数に代入

JavaScript で、if 文 や switch 文 の結果を変数に代入

JavaScript では、if 文switch 文 の結果を変数に代入できません。

Ruby の case 文 と JavaScript の switch 文

Ruby

case 文

# Ruby

fruit = 'みかん'

case fruit
when "りんご"
  p 'apple'
when "みかん"
  p 'orange'
when "もも"
  p 'peach'
else
  p 'ないよ'
end

=> "orange"

case 文の結果を result に入れる

# Ruby

fruit = 'みかん'

result = case fruit
         when "りんご"
           'apple'
         when "みかん"
           'orange'
         when "もも"
           'peach'
         else
           'ないよ'
         end

p result
=> "orange"

JavaScript

switch 文

// JavaScript

fruit = "みかん";

switch (fruit) {
  case "りんご":
    console.log("apple");
    break;
  case "みかん":
    console.log("orange");
    break;
  case "もも":
    console.log("peach");
    break;
  default:
    console.log("ないよ");
}

> orange

case 文の結果を result に入れたかった

Ruby と同じようなことは、できません。

// JavaScript

fruit = "みかん";

result = switch (fruit) {
         case "りんご":
           "apple";
           break;
         case "みかん":
           "orange"
           break;
         case "もも":
           "peach";
           break;
         default:
           "ないよ";
         }

console.log(result);
SyntaxError

上記を実行すると、下記のようになります。

result = switch (fruit) {
         ^^^^^^

SyntaxError: Unexpected token switch

これなら動く

// JavaScript

fruit = "みかん";
result = "果物"

switch (fruit) {
  case "りんご":
    result = "apple";
    break;
  case "みかん":
    result = "orange"
    break;
  case "もも":
    result = "peach";
    break;
  default:
    result = "ないよ";
}

console.log(result);
> orange

break; 消した場合

true になったところから、break; があれば break; が実行されるまで、 break; がなければ最後まで実行されます。

// JavaScript

fruit = "みかん";
result = "果物"

switch (fruit) {
  case "りんご":
    result = "apple";
  case "みかん":
    result = "orange"
  case "もも":
    result = "peach";
  default:
    result = "ないよ";
}

console.log(result);
> ないよ

case "みかん":true になるが、下の result = "ないよ"; まで実行されるので、 console.log(result) で、ないよ が表示されます。

  case "みかん":
    result = "orange"
  case "もも":
    result = "peach";
  default:
    result = "ないよ";

if 文

if 文switch 文 と同じで、JavaScript では、代入できません。

Ruby

if 文

# Ruby

fruit = 'みかん';

if fruit == 'みかん'
  p 'orange'
else
  p 'ないよ'
end

=> "orange"

代入

Ruby だと、代入できます。

# Ruby

fruit = 'みかん';

result = if fruit == 'みかん'
           'orange'
         else
           'ないよ'
        end

p result
=> "orange"

自己代入

こんな事もできます。

# Ruby

fruit = 'みかん'
result = '果物: '

result += if fruit == 'みかん'
            'orange'
          else
            'ないよ'
          end

p result
=> "果物: orange"

JavaScript

if 文

// JavaScript

const fruit = "みかん";

if (fruit == "みかん") {
    console.log("orange");
} else {
    console.log("ないよ");
}

> orange

代入できない

// JavaScript

const fruit = "みかん";

const result = if (fruit == "みかん") {
  "orange";
} else {
  "ないよ";
}

console.log(result);
SyntaxError

SyntaxError になります。

const result = if (fruit == "みかん") {
               ^^

SyntaxError: Unexpected token if

OK

// JavaScript

const fruit = "みかん";
let result = "果物";

if (fruit == 'みかん') {
  result = "orange";
} else {
  result = "ないよ";
}

console.log(result);
> orange

参考

関連記事