ประเภทตัวเลขเดิม ECMAScript
- หน้าก่อนหน้า ค่า ECMAScript
- หน้าต่อไป การแปลงประเภท ECMAScript
ECMAScript มี 5 ประเภทของปริมิติว่า Undefined, Null, Boolean, Number และ String
operator typeof
operator typeof มี parameter หนึ่ง คือตัวแปรหรือค่าที่ต้องการตรวจสอบ ตัวอย่างเช่น:
var sTemp = "test string"; alert (typeof sTemp); // ออก "string" alert (typeof 86); // ออก "number"
การเรียกใช้ operator typeof ต่อตัวแปรหรือค่าจะคืนค่าหนึ่งในค่าที่ต่อไปนี้
- undefined - ถ้าตัวแปรเป็นประเภท Undefined
- boolean - ถ้าตัวแปรเป็นประเภท Boolean
- number - ถ้าตัวแปรเป็นประเภท Number
- string - ถ้าตัวแปรเป็นประเภท String
- object - ถ้าตัวแปรเป็นประเภทที่มีการอ้างอิงหรือ Null 类型
หมายเหตุ:คุณอาจจะถามว่า ทำไม operator typeof จะคืนค่า "Object" สำหรับค่า null นี้เป็นความผิดพลาดในการปฏิบัติการ JavaScript ในตอนแรก ซึ่งถูก ECMAScript ยอมรับมาตั้งแต่นั้นเป็นต้นมา ตอนนี้ null ถือเป็นตัวทดแทนของ object ซึ่งชี้แจงความขัดแย้งนี้ แต่ในทางเทคนิคมันยังคงเป็นค่าตัวเดี่ยว
Undefined 类型
เช่นเดียวกับที่กล่าวไปแล้ว Undefined มีค่าเดียว คือ undefined ขณะที่ตัวแปรที่ยังไม่ได้รับการประกาศ ค่าเริ่มต้นของตัวแปรคือ undefined
var oTemp;
รหัสด้านหน้านี้ประกาศตัวแปร oTemp โดยไม่มีค่าเริ่มต้น ตัวแปรนี้จะได้รับค่า "undefined" ซึ่งเป็น literal ของประเภท undefined สามารถทดสอบค่าของตัวแปรดังนี้ว่าเท่ากับ undefined ด้วยรหัสด้านล่างนี้:
var oTemp; alert(oTemp == undefined);
รหัสด้านหน้านี้จะแสดง "true" ที่แสดงว่าค่าทั้งสองมีความเท่ากัน ยังสามารถใช้ operator typeof แสดงค่าของตัวแปรว่าเป็น undefined
var oTemp; alert(typeof oTemp); // ออก "undefined"
คำเตือน:ค่า undefined แตกต่างจากค่าที่ยังไม่ได้กำหนด แต่operator typeof ไม่ได้แยกค่าทั้งสองออกเป็นกลุ่มต่างกัน จงเห็นรหัสด้านล่างนี้:
var oTemp; alert(typeof oTemp); // ออก "undefined" alert(typeof oTemp2); // ออก "undefined"
รหัสด้านหน้านี้ทำให้ออก "undefined" สำหรับทั้งสองตัวแปร แม้ว่ามีเพียงตัวแปร oTemp2 ที่ยังไม่ได้ประกาศ ถ้าใช้สัญญาณอื่นนอกจาก typeof กับ oTemp2 จะทำให้เกิดข้อผิดพลาด เพราะสัญญาณนั้นสามารถใช้กับตัวแปรที่ได้รับการประกาศเท่านั้น
เช่นเดียวกับรหัสด้านหน้านี้จะทำให้เกิดข้อผิดพลาด:
var oTemp; alert(oTemp2 == undefined);
เมื่อฟังก์ชันไม่มีค่ากลับที่เจาะจง ค่าที่กลับคือ "undefined" อย่างเช่น:
function testFunc() { } alert(testFunc() == undefined); // ออก "true"
ประเภท Null
ประเภท Null มีค่าเดียวคือ null ซึ่งเป็น literal ของมัน ค่า undefined จริงๆ มาจากค่า null ดังนั้น ECMAScript จึงจัดให้มันเท่ากัน
alert(null == undefined); // ออก "true"
ถึงแม้ว่าค่าทั้งสองจะเท่ากัน แต่มีความหมายที่แตกต่างกัน undefined คือค่าที่มอบให้กับตัวแปรที่ถูกประกาศแต่ยังไม่ได้รับการตั้งค่า null ใช้เพื่อแสดงว่ามีวัตถุที่ยังไม่มีอยู่ (เรียกได้ว่าเป็นการนำเสนอความหมายของนี้เมื่อพูดถึง operator typeof) ถ้าการหาวัตถุในฟังก์ชันหรือเมธอดต้องการที่จะกลับค่าวัตถุ ค่าที่มักจะกลับคือ null
ประเภท Boolean
Boolean ประเภทของประกายที่ถูกใช้บ่อยที่สุดใน ECMAScript มีสองค่า คือ true และ false (หรือที่เรียกว่า Boolean literal สองอัน)。
即使 false 不等于 0,0 也可以在必要时被转换成 false,这样在 Boolean 语句中使用两者都是安全的。
var bFound = true; var bLost = false;
Number 类型
ECMA-262 中定义的最特殊的类型是 Number 类型。这种类型既可以表示 32 位的整数,还可以表示 64 位的浮点数。
直接输入的(而不是从另一个变量访问的)任何数字都被看做 Number 类型的字面量。例如,下面的代码声明了存放整数值的变量,它的值由字面量 86 定义:
var iNum = 86;
八进制数和十六进制数
整数也可以被表示为八进制(以 8 为底)或十六进制(以 16 为底)的字面量。八进制字面量的首数字必须是 0,其后的数字可以是任何八进制数字(0-7),如下面的代码所示:
var iNum = 070; //070 等于十进制的 56
要创建十六进制的字面量,首位数字必须为 0,后面接字母 x,然后是任意的十六进制数字(0 到 9 和 A 到 F)。这些字母可以是大写的,也可以是小写的。例如:
var iNum = 0x1f; //0x1f 等于十进制的 31 var iNum = 0xAB; //0xAB 等于十进制的 171
คำเตือน:尽管所有整数都可以表示为八进制或十六进制的字面量,但所有数学运算返回的都是十进制结果。
浮点数
要定义浮点值,必须包括小数点和小数点后的一位数字(例如,用 1.0 而不是 1)。这被看作浮点数字面量。例如:
var fNum = 5.0;
对于浮点字面量的有趣之处在于,用它进行计算前,真正存储的是字符串。
科学计数法
对于非常大或非常小的数,可以用科学计数法表示浮点数,可以把一个数表示为数字(包括十进制数字)加 e(或 E),后面加乘以 10 的倍数。例如:
var fNum = 5.618e7
该符号表示的是数 56180000。把科学计数法转化成计算式就可以得到该值:5.618 x 107。
也可以用科学计数法表示非常小的数,例如 0.00000000000000008 可以表示为 8-e17(ที่นี่ 10 ถูกเพิ่มขึ้นเป็นอัตราส่วนที่เป็น -17 ครั้ง หมายความว่าต้องแบ่ง 10 ด้วย 10 17 ครั้ง)ECMAScript โดยเริ่มแล้วจะแปลงตัวเลขที่มี 6 หรือมากกว่า 0 หลังหัวเลขเป็นรูปแบบของการนับเลขทางวิทยาศาสตร์
คำเตือน:จะสามารถเก็บค่าเลขจำนวนปริมาณที่มีความยาว 64 บิตตามรูปแบบ IEEE 754 นี้ ซึ่งหมายความว่าค่าเลขเดียวกันที่มีเลขทศนิยมสูงสุด 17 ตำแหน่ง ค่าที่เกิน 17 ตำแหน่งจะถูกตัดออก ซึ่งสามารถก่อให้เกิดความผิดพลาดทาง matematical บางประการ
ค่าพิเศษของ Number
ค่าพิเศษของ Number ยังมีมากมาย โดยตัวอย่างที่แรกคือ Number.MAX_VALUE และ Number.MIN_VALUE ซึ่งกำหนดจำนวนของค่า Number ที่มีขอบเขตด้านนอก ทุกตัวเลข ECMAScript ต้องอยู่ในขอบเขตทั้งสองตัวนี้ แต่ผลลัพธ์ที่สร้างขึ้นจากการคำนวณอาจไม่ตกอยู่ในขอบเขตทั้งสองตัวนี้
เมื่อคำนวณที่สร้างขึ้นมีค่ามากกว่า Number.MAX_VALUE มันจะได้ค่า Number.POSITIVE_INFINITY หมายความว่าไม่มีค่าเลข ซึ่งทำให้คำนวณที่สร้างขึ้นมีค่าต่ำกว่า Number.MIN_VALUE จะได้ค่า Number.NEGATIVE_INFINITY ซึ่งก็หมายความว่าไม่มีค่าเลข หากคำนวณที่กลับค่าเป็นอิโนเซซัน ผลลัพธ์ที่สร้างขึ้นไม่สามารถใช้ในการคำนวณอื่น ๆ
เป็นตัวเลขพิเศษที่มีชื่อเฉพาะสำหรับอิโนเซซัน (เช่นที่คาดคิด) คือ Infinity ค่าของ Number.POSITIVE_INFINITY คือ Infinity และค่าของ Number.NEGATIVE_INFINITY คือ -Infinity
เพราะจำนวนอิโนเซซันสามารถเป็นเลขบวกหรือเลขลบ ดังนั้น สามารถใช้วิธีหนึ่งเพื่อตรวจสอบว่าจำนวนเป็นจำนวนที่จำกัด (isFinite) ไม่ใช่ที่ต้องทดสอบอิโนเซซันแต่ละตัว สามารถเรียกใช้วิธี isFinite() สำหรับจำนวนใดๆ เพื่อใช้ตรวจสอบว่าจำนวนไม่ใช่อิโนเซซัน ตัวอย่าง:
var iResult = iNum * some_really_large_number; if (isFinite(iResult)) { alert("finite"); } else { alert("infinite"); }
ค่าพิเศษสุดท้ายคือ NaN หรือไม่เป็นตัวเลข (Not a Number) NaN คือค่าพิเศษที่น่าสนใจ โดยทั่วไปแล้ว สถานการณ์นี้เกิดขึ้นเมื่อการแปลงทิป (String, Boolean และอื่น ๆ) ล้มเหลว เช่น การแปลงคำว่า blue ให้เป็นตัวเลขจะล้มเหลว เพราะไม่มีตัวเลขที่เท่าเทียม กับไอนี้ และอย่างเดียวกับอิโนเซซัน NaN ไม่สามารถใช้ในการคำนวณเลข และความน่าสนใจอีกอันหนึ่งของ NaN คือ มันไม่เท่ากับตัวเอง ซึ่งหมายความว่า รหัสด้านล่างจะกลับค่า false:
alert(NaN == NaN); //ออก "false"
ด้วยเหตุนี้ ไม่แนะนำให้ใช้ค่า NaN ตัวเอง ฟังก์ชัน isNaN() จะทำงานดีเลย
alert(isNaN("blue")); //ออก "true" alert(isNaN("666")); //ออก "false"
ประเภท String
ความเฉพาะเจาะจงของประเภท String คือมันเป็นประเภทประกายที่ไม่มีขนาดที่แน่นอน สามารถเก็บตัวอักษร Unicode 0 หรือมากกว่าด้วยตัวเลข 16 ตัวเลข (Unicode คือชุดตัวอักษรนานาชาติ จะมีการอธิบายต่อไปในบทนี้)
แต่ละตัวอักษรในวลีมีตำแหน่งเฉพาะ ตัวอักษรแรกเริ่มต้นที่ตำแหน่ง 0 ตัวอักษรที่สองที่ตำแหน่ง 1 ตามโครงการ ซึ่งหมายความว่าตำแหน่งของตัวอักษรสุดท้ายในวลีคือความยาวของวลีลดหนึ่ง

วลีของตัวอักษรเป็นวลีที่ประกาศด้วยวงล้อมนิ้ว ("" หรือ '') ใน Java ใช้วงล้อมนิ้วประกาศวลี ใช้วงล้อมนิ้วประกาศตัวอักษร แต่เพราะ ECMAScript ไม่มีประเภทตัวอักษร ดังนั้นสามารถใช้วลีทั้งสองรูปแบบได้ ตัวอย่าง บรรทัดของรหัสทั้งสองดังนี้ต่างเป็นรหัสที่ถูกต้อง
var sColor1 = "red"; var sColor2 = 'red';
ประเภท String ยังมีวลีต่างๆ อีกหลายชนิด ผู้พัฒนา Java, C และ Perl ควรค่อยตั้งใจ
ต่อไปนี้คือรายการวลีของ ECMAScript
วลี | ความหมาย |
---|---|
\n | บทหลัก |
\t | ตารางหลัก |
\b | ช่องว่าง |
\r | เรทร |
\f | หลักบท |
\\ | สระ |
\' | วงล้อมนิ้ว |
\" | วงล้อมนิ้ว |
\0nnn | รหัสเต็มตัวเลข nnn นำเสนอตัวอักษรn คือหนึ่งในหนึ่งตัวหลักเลขเต็มตัวเลขจาก 0 ถึง 7 |
\xnn | รหัสสิบหก nn นำเสนอตัวอักษรn n คือ หนึ่งในหนึ่งตัวหลักเลขสิบหกตัวจาก 0 ถึง F |
\unnnn | รหัสสิบหก nnnn นำเสนอตัวอักษร Unicoden n คือ หนึ่งในหนึ่งตัวหลักเลขสิบหกตัวจาก 0 ถึง F |
- หน้าก่อนหน้า ค่า ECMAScript
- หน้าต่อไป การแปลงประเภท ECMAScript