0
0

More than 1 year has passed since last update.

【JavaScript】演算子と優先順位

Posted at

はじめに

Udemyの【JS】ガチで学びたい人のためのJavaScriptメカニズムの講座の振り返りです。

前回の記事

  • 演算子と優先順位についての理解を深める

本題

1.演算子と優先順位

演算子とは
値(オペランド)を元に処理を行い、結果を返す記号
ex. =, +, new...

演算子には優先順位がある

21〜0までの優先順位が決められており、21から先に処理する

例1

実際のコードで優先順位を確認する

// 3と出力される
// +と=では+のほうが優先順位が高い(リンクの表参照)
// よって、先に足し算が行われてから、左辺に右辺が代入される
let a = 1 + 2;
console.log(a);
// *の方が優先順位が高い
let b = 1 + 2 * 3;
console.log(b);
// グループ化が現状最も優先順位が高い
let c = (1 + 2) * 3;
console.log(c);

例2

インクリメント演算子

let a = 0;
// インクリメント演算子は前後どちらにつけるかで結果が変わる
// 後に付けた場合,a = 0という値を返した後に+1する
let b = a++;
// よってaの値は1だが,bの値は0となる
console.log(a,b);
// 前に付けた場合+1された後にbに値が代入される
let c = ++b;
// よってbもcも1となる
console.log(b,c);

上記の処理がどのように行われているのか分解する

// 計算がどのように行われているのか
let a = 0;
console.log(a);
let b;

// 後方に++があった場合は以下のようになっている
// let b = a++;
// a = b = a + 1; このようにすると優先順位的にうまく機能しないのでグループ化する
a = (b = a) + 1
// aは0なので、bは0、その後+演算子が働くので0 + 1でaが0となる
console.log(a,b);

// 前方に++があった場合は以下のようになっている
// let b = ++c;
// +から処理が始まる
// b = c = b + 1;
// 優先順位的に代入演算子は右から左へ処理が始まる
b = c = 1;
// (1,1となる)
console.log(b,c);

例3

関数での演算子と優先順位

// 関数を定義
function fn(){
  let a = 0;
  return a++;
}
// 出力結果は0となる
// aが++される前にreturnで返っている
console.log(fn());
// 出力結果は5となる
// 「!0 = true = 1」と暗黙的に型変換が行われるため
// not演算子のほうが優先順位が高い
console.log(!fn() * 5);
// trueと出力される
// グループ化優先(0 × 5)の後、!演算子でfalse → trueと変換される
console.log(!(fn() * 5))

今日はここまで!

参考にさせて頂いた記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0