非 A 或 B 等價於非 A 且非 B

AurLemon發表於2024-10-06

記錄一個上個月寫東西腦抽寫的東西。

if (course !== 1 || course !== 2) {
  return ApiResponseUtil.error(
    400,
    'invalid_course_or_subject',
    '無效的課程或科目',
  );
}

測試的時候發現條件有問題,就算 course 是 1 和 2 也符合這個條件。後面仔細一想發現確實不對:

course 值 結果 匹配的表示式
0 true course !== 1 和 course !== 2
1 true course !== 2
2 true course !== 1
3 true course !== 1 和 course !== 2

那改成與就好了:

if (course !== 1 && course !== 2) {
  return ApiResponseUtil.error(
    400,
    'invalid_course_or_subject',
    '無效的課程或科目',
  );
}

或者寫成!(course == 1 || course == 2)也可以,這樣寫甚至更直觀。

後面上網搜了下發現這個叫德摩根定律,定律的第一條是非 A 或 B = 非 A 且非 B,第二條是 非 A 且 B = 非 A 或非 B

相關文章