อัศเจรีย์ (เครื่องหมายตกใจ) สองครั้งใน JavaScript คืออะไร

เครื่องหมายตกใจหรือชื่ออย่างเป็นทางการว่าอัศเจรีย์ (Exclamation Mark) ถูกใช้ในภาษาโปรแกรมมิ่งหลายภาษา เพื่อบอกถึงนิเสธ เพื่อเปลี่ยนค่าลอจิก จาก true เป็น false หรือ จาก false เป็น true

ในอินเตอร์เน็ต ตัวอย่างโค้ดจาวาสคริปต์หลายครั้งจะมีการใส่อัศเจรีย์สองครั้งกับตัวแปร ความหมายของมันก็คือการตรวจสอบว่าตัวแปรนั้นมีข้อมูลอยู่หรือไม่

หลักการทำงานของมันคือการแปลงข้อมูลภายในตัวแปรให้กลายเป็นบูลีน โดยผลของการแปลงตัวแปรที่มีข้อมูลหลากหลาย ได้ผลข้างล่าง

Var1 Boolean(Var1)
false
“Uaychai” true
5 true
[5,6,7] true
{ “FirstName”: “Uaychai”, “Age”: 25 }; true
{} true
function () { alert(“Yoda”); }; true
0 false
null false
NaN false
undefined false

สังเกตว่าข้อมูลของตัวแปร Var ที่ได้ผลการแปลงข้อมูลบูลีนที่เป็น true ถือเป็นข้อมูลที่ใช้งานได้ นอกนั้นจะเป็น false ด้วยผลการแปลงนี้เองที่ทำให้โปรแกรมเมอร์ใช้วิธีนี้ในการทดสอบตัวแปรว่ามีข้อมูลอยู่หรือไม่

การใช้ฟังก์ชัน Boolean สามารถแปลงตัวแปรใดๆให้กลายเป็นบูลีนได้ แต่ยังมีอีกวิธีและเขียนโค้ดสั้นกว่า นั้นก็คือการใช้อัศเจรีย์ แต่ปัญหาการใช้อัศเจรีย์ก็คือความเป็นนิเสธ ซึ่งทำให้ผลการแปลงข้อมูลตรงกันข้ามกับผลลัพธ์ที่ได้จากตารางข้างบน  ด้วยเหตุนี้จึงต้องใชอัศเจรีย์อีกตัวหนึ่งเพื่อกลับข้อมูลให้เหมือนกับผลการแปลงบูลีนดั้งเดิม ผลที่ได้เป็นไปตามตารางนี้

Var1 Boolean(Var1) !Var1 !!Var1
false true false
“Uaychai” true false true
5 true false true
[5,6,7] true false true
{ “FirstName”: “Uaychai”, “Age”: 25 }; true false true
{} true false true
function () { alert(“Yoda”); }; true false true
0 false true false
null false true false
NaN false true false
undefined false true false

ผู้ใช้สามารถทดสอบได้การทำงานได้ผ่านโค้ดเหล่านี้

ใช้ฟังก์ชัน Boolean

<!DOCTYPE html>
<html>
<head>
 <title></title>
 <meta charset="utf-8" />
</head>
<body>


<div id="resultpanel">

 </div>


 <script type="text/javascript">
 var var1;
 resultpanel.innerHTML = "Boolean of var1 : " + Boolean(var1) + "
";

 var var2 = "Uaychai";
 resultpanel.innerHTML += "Boolean of var2 : " + Boolean(var2) + "
";

 var var3 = 5;
 resultpanel.innerHTML += "Boolean of var3 : " + Boolean(var3) + "
";

 var var4 = [5, 6, 7];
 resultpanel.innerHTML += "Boolean of var4 : " + Boolean(var4) + "
";

 var var5 = { "FirstName": "Uaychai", "Age": 25 };
 resultpanel.innerHTML += "Boolean of var5 : " + Boolean(var5) + "
";

 var var6 = {};
 resultpanel.innerHTML += "Boolean of var6 : " + Boolean(var6) + "
";

 var var7 = function () { alert("Yoda"); };
 resultpanel.innerHTML += "Boolean of var7 : " + Boolean(var7) + "
";

 var var8 = 0;
 resultpanel.innerHTML += "Boolean of var8 : " + Boolean(var8) + "
";

 var var9 = null;
 resultpanel.innerHTML += "Boolean of var9 : " + Boolean(var9) + "
";

 var var10 = NaN;
 resultpanel.innerHTML += "Boolean of var10 : " + Boolean(var10) + "
";

 var var11 = undefined;
 resultpanel.innerHTML += "Boolean of var11 : " + Boolean(var11) + "
";
 </script>
</body>
</html>

ใช้อัศเจรีย์สองตัว

<!DOCTYPE html>
<html>
<head>
    <title></title>
	<meta charset="utf-8" />
</head>
<body>

<div id="resultpanel">

    </div>

    <script type="text/javascript">
        var var1;
        resultpanel.innerHTML = "Boolean of var1 : " + !!var1 + "
";

        var var2 = "Uaychai";
        resultpanel.innerHTML += "Boolean of var2 : " + !!var2 + "
";

        var var3 = 5;
        resultpanel.innerHTML += "Boolean of var3 : " + !!var3 + "
";

        var var4 = [5, 6, 7];
        resultpanel.innerHTML += "Boolean of var4 : " + !!var4 + "
";

        var var5 = { "FirstName": "Uaychai", "Age": 25 };
        resultpanel.innerHTML += "Boolean of var5 : " + !!var5 + "
";

        var var6 = {};
        resultpanel.innerHTML += "Boolean of var6 : " + !!var6 + "
";

        var var7 = function () { alert("Yoda"); };
        resultpanel.innerHTML += "Boolean of var7 : " + !!var7 + "
";

        var var8 = 0;
        resultpanel.innerHTML += "Boolean of var8 : " + !!var8 + "
";

        var var9 = null;
        resultpanel.innerHTML += "Boolean of var9 : " + !!var9 + "
";

        var var10 = NaN;
        resultpanel.innerHTML += "Boolean of var10 : " + !!var10 + "
";

        var var11 = undefined;
        resultpanel.innerHTML += "Boolean of var11 : " + !!var11 + "
";
    </script>
</body>
</html>

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s