2022年8月3日 星期三

部分程式語言的 雙等號 == 與三等號 === 及其驚嘆號版 != 與 !== 差異

工作上實在是太常把工作上的東西忘了,乾脆來試試寫個blog把東西都記下來
這次就趁客戶問起 JS 之類的東西,
趁勢紀錄一下吧;純紀錄所以不會寫太多東西XD

小弟不算資深,僅做紀錄用;
若有幫上任何人的忙算榮幸,沒有的話可以給點鼓勵;
如果太粗淺也請見諒,有錯誤也歡迎提出指正或補充~~

以下範例主要會用 JavaScript 來做參考

====================

 一般多數程式在常見情況下,應該能夠常態理解為此:

= 是指派變數
== 是程式上的判斷 相等與否
!= 則是 == 的相反意思 (不相等與否)


以下簡單示例:

var Temp = 123;    // 指派變數
if (Temp == 123) { 程式碼A }
if (Temp != 456) { 程式碼B }

結果:
程式碼A和B都會個別執行,因為符合各別條件


這次客戶問起的 Google 雲端 APP Script 中,
程式碼的語言是 Javascript,
在 JavaScript 以及一些程式語言(如PHP)當中,
== 可以做純判斷沒錯,但通常只會判斷"值",
如果自動轉型後資料相等還是會給過;

在某些時候,會要求資料型態也要正確,就會多用一個 =;
!= 同理,如果連資料型別也要判斷是否不相等,就會用 !==
※不是全部程式語言都有 === 或 !== 的問題


以下簡單示例:

var Temp = "123";    // 指派變數
if (Temp == 123) { 程式碼A }
if (Temp != 123) { 程式碼B }
if (Temp === 123) { 程式碼C }
if (Temp !== 123) { 程式碼D }
if (Temp === "123") { 程式碼E }
if (Temp !== "123") { 程式碼F }

結果如下:

程式碼A 會被執行:Temp 的 數值 在自動轉型後是相等的

程式碼B 不會執行:Temp 的 數值 在自動轉型後並非不相等

程式碼C 不會執行:Temp 的資料型態是 "字串",if 中的判斷為 是否為"數字"型態的 123,型別沒有相等

程式碼D 會被執行:Temp 的資料型態是 "字串",if 中的判斷為 是否為"數字"型態的 123,型別確定不相等

程式碼E 會被執行:Temp 的資料型態是 "字串",if 中的判斷為 是否為"字串"型態的 123,型別與內容都相等

程式碼F 不會執行:Temp 的資料型態是 "字串",if 中的判斷為 是否為"字串"型態的 123,型別與內容都沒有不相等

參考資料:

https://medium.com/schaoss-blog/%E5%89%8D%E7%AB%AF%E4%B8%89%E5%8D%81-13-js-%E7%82%BA%E4%BB%80%E9%BA%BC%E5%88%A4%E6%96%B7%E7%9B%B8%E7%AD%89%E6%99%82%E4%B8%8D%E7%94%A8%E8%83%BD%E9%9B%99%E7%AD%89%E8%99%9F-d02fbf91492f