#はじめに
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))
今日はここまで!
#参考にさせて頂いた記事