ຮູບແບບຂອງ ECMAScript

ECMAScript ມີ 5 ເປັນຊະນິດພື້ນຖານ (primitive type) ເຊິ່ງແມ່ນ Undefined, Null, Boolean, Number ແລະ String.

operator typeof

operator typeof ມີຄຳປະກອບຂອງຂັ້ນຕົ້ນພຽງຫນຶ່ງຄຳນຶງທີ່ຈະກວດກາ. ຕົວຢ່າງ:

var sTemp = "test string";
alert (typeof sTemp);    //ອອກອາກາດ "string"
alert (typeof 86);    //ອອກອາກາດ "number"

ການເອິ້ນ operator typeof ຕໍ່ຕົວປະກອບຫຼືຄຳນຶງຈະມີຄຳນຶງດ້ວຍລາຍການດຽວໃນລາຍການດ້ານຫຼັງ:

  • undefined - ຖ້າທ່ານເປັນຄຳນຶງ Undefined
  • boolean - ຖ້າທ່ານເປັນຄຳນຶງ Boolean
  • number - ຖ້າທ່ານເປັນຄຳນຶງ Number
  • string - ຖ້າທ່ານເປັນຄຳນຶງ String
  • object - ຖ້າທ່ານເປັນຄຳນຶງຂອງການອ້າງອິດສະຫຼະພາບຫຼື Null Type

ລົງໂຄສະນາ:ທ່ານອາດຈະຖາມວ່າເປັນຫຍັງ operator typeof ຈະຫຼັງຄຳນຶງ null ຈະມີຄຳນຶງ "Object". ນີ້ເປັນຄວາມຜິດທີ່ເກີດຂຶ້ນໃນການຈັດຕັ້ງ JavaScript ຄັ້ງທຳອິດແລະຖືກນຳໃຊ້ໂດຍ ECMAScript. null ຖືກພິຈາລະນາວ່າເປັນຫຍັງທີ່ພັກກັນຂອງໂອກາດດຽວກັນນັ້ນແຕ່ຈາກທາງເຕັກນິກຍັງເປັນຄຳນຶງສະເພາະ.

Undefined 类型

ມັນຖືກກ່າວຫາກ່ອນວ່າ Undefined ມີພຽງຄຳນຶງດຽວແຕ່ undefined. ເວລາທີ່ທ່ານປະກາດຕົວປະກອບບໍ່ໄດ້ຖືກລະບົບການລະບາຍຄຳນຶງນັ້ນຈະມີຄຳນຶງສະເພາະ undefined.

var oTemp;

前面一行代码声明变量 oTemp,没有初始值。该变量将被赋予值 undefined,即 undefined 类型的字面量。可以用下面的代码段测试该变量的值是否等于 undefined:

var oTemp;
alert(oTemp == undefined);

这段代码将显示 "true",说明这两个值确实相等。还可以用 typeof 运算符显示该变量的值是 undefined:

var oTemp;
alert(typeof oTemp); //输出 "undefined"

提示:值 undefined 并不同于未定义的值。但是,typeof 运算符并不真正区分这两种值。考虑下面的代码:

var oTemp;
alert(typeof oTemp);  //输出 "undefined"
alert(typeof oTemp2);  //输出 "undefined"

前面的代码对两个变量输出的都是 "undefined",即使只有变量 oTemp2 从未被声明过。如果对 oTemp2 使用除 typeof 之外的其他运算符的话,会引起错误,因为其他运算符只能用于已声明的变量上。

例如,下面的代码将引发错误:

var oTemp;
alert(oTemp2 == undefined);

当函数无明确返回值时,返回的也是值 "undefined",如下所示:

function testFunc() {
}
alert(testFunc() == undefined);  //输出 "true"

Null 类型

另一种只有一个值的类型是 Null,它只有一个专用值 null,即它的字面量。值 undefined 实际上是从值 null 派生来的,因此 ECMAScript 把它们定义为相等的。

alert(null == undefined);  //输出 "true"

尽管这两个值相等,但它们的含义不同。undefined 是声明了变量但未对其初始化时赋予该变量的值,null 则用于表示尚未存在的对象(在讨论 typeof 运算符时,简单地介绍过这一点)。如果函数或方法要返回的是对象,那么找不到该对象时,返回的通常是 null。

ຊະນິດ Boolean

ຊະນິດ Boolean ແມ່ນໜຶ່ງຫຼັກຊະນິດທີ່ໃຊ້ຫຼາຍທີ່ສຸດໃນ ECMAScript. ມັນມີສອງຄູ່ຄື true ແລະ false (ສະແດງວ່າສອງຄູ່ບັນທຶກ Boolean).

即使 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 除 17 次)。ECMAScript 默认把具有 6 个或 6 个以上前导 0 的浮点数转换成科学计数法。

提示:也可用 64 位 IEEE 754 形式存储浮点值,这意味着十进制值最多可以有 17 个十进制位。17 位之后的值将被裁去,从而造成一些小的数学误差。

特殊的 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() 方法,以确保该数不是无穷大。例如:

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 类型的独特之处在于,它是唯一没有固定大小的原始类型。可以用字符串存储 0 或更多的 Unicode 字符,有 16 位整数表示(Unicode 是一种国际字符集,本教程后面将讨论它)。

ແຕ່ລະຄວາມໃນຄວາມຖືກຕ້ອງມີຈຳນວນທີ່ສະເພາະ, ຄວາມທໍາອິດແມ່ນຈຳນວນ 0, ຄວາມທີສອງແມ່ນຈຳນວນ 1, ວັດຈະນັ້ນ. ຄວາມນີ້ຫົນວ່າຈຳນວນຄວາມສຸດທ້າຍໃນຄວາມຈະຢູ່ຈຳນວນຄວາມທີ່ຫຼຸດລົງ 1:

ຄວາມຍາວຂອງຄຳຂັດແລະການພິຈາລະນາການຕັ້ງທີ

ຄວາມບັນທຶກ String ແມ່ນຖືກອະນຸຍາດໂດຍຄວາມຈະລະຈອນ ("" ) ຫຼື ຄວາມຈະລະຈອນ ('') . ພະລັງ Java ອະນຸຍາດ String ທີ່ຖືກອະນຸຍາດໂດຍຄວາມຈະລະຈອນ ("" ) ແລະ ຄວາມບັນທຶກ ('') . ແຕ່ວ່າ ECMAScript ບໍ່ມີຮູບແບບຄວາມ, ມັນສາມາດໃຊ້ທັງສອງວິທີຄົງຄາວນີ້ . ເມື່ອນັ້ນ, ການບັນທຶກສອງໃນລະຫັດດັ່ງກ່າວນີ້ກໍ່ມີຜົນບັງຄັບ:

var sColor1 = "red";
var sColor2 = 'red';

ຮູບແບບ String ບັນດາຄວາມບັນທຶກອື່ນໆ, ຜູ້ພັດທະນາ Java, C ແລະ Perl ຄວນຈະຮູ້ຄວາມວ່າ.

ລາຍການຄວາມບັນທຶກ ECMAScript:

ຄວາມບັນທຶກ ຄວາມຫາຍຫາຍ
\n ການປ່ຽນແປງການເບິ່ງ
\t ການປ່ຽນແປງການເບິ່ງ
\b ຄວາມຈະຫຍຸ້ງ
\r ການປ່ຽນແປງການເບິ່ງ
\f ການປ່ຽນແປງການເບິ່ງ
\\ ຄວາມຫົວໜ້າ
\' ຄວາມຈະລະຈອນ
\" ຄວາມຈະລະຈອນ
\0nnn ລະຫັດໂອເກຣັກ nnn ສະແດງຄວາມ (n n ແມ່ນໜຶ່ງໃນຈຳນວນໂອເກຣັກ (0 ຫາ 7).
\xnn ລະຫັດສິບຫົກສິບສອງ nn ສະແດງຄວາມ (n n ແມ່ນໜຶ່ງໃນຈຳນວນສິບຫົກສິບສອງ (0 ຫາ F) ຂອງຈຳນວນສິບຫົກສິບສອງ.
\unnnn ລະຫັດສິບຫົກສິບສອງ nnnn ສະແດງ Unicode ຄວາມ (n n ແມ່ນໜຶ່ງໃນຈຳນວນສິບຫົກສິບສອງ (0 ຫາ F) ຂອງຈຳນວນສິບຫົກສິບສອງ.