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

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

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

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

Var1Boolean(Var1)
 false
“Uaychai”true
5true
[5,6,7]true
{ “FirstName”: “Uaychai”, “Age”: 25 };true
{}true
function () { alert(“Yoda”); };true
0false
nullfalse
NaNfalse
undefinedfalse

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

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

Var1Boolean(Var1)!Var1!!Var1
 falsetruefalse
“Uaychai”truefalsetrue
5truefalsetrue
[5,6,7]truefalsetrue
{ “FirstName”: “Uaychai”, “Age”: 25 };truefalsetrue
{}truefalsetrue
function () { alert(“Yoda”); };truefalsetrue
0falsetruefalse
nullfalsetruefalse
NaNfalsetruefalse
undefinedfalsetruefalse

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

ใช้ฟังก์ชัน 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) + "<br>";

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

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

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

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

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

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

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

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

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

 var var11 = undefined;
 resultpanel.innerHTML += "Boolean of var11 : " + Boolean(var11) + "<br>";
 </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 + "<br>";

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

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

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

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

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

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

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

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

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

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

ใส่ความเห็น

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 /  เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out /  เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out /  เปลี่ยนแปลง )

Connecting to %s