ສິ່ງກຳລັງ ECMAScript

ອຳນວຍການການກຳລັງບໍ່ມີຫຼາຍປະກອບສ່ວນ, ແຕ່ພຽງແຕ່ປະເພດຜູ້ທີ່ຈະກຳລັງຫຼືຄູ່ມູນ. ພວກມັນແມ່ນອຳນວຍການທີ່ສຸດທີ່ລະອຽດໃນ ECMAScript.

delete

delete ອຳນວຍການກຳລັງພື້ນຖານອົງການທີ່ໄດ້ກໍານົດກ່ອນ. ຕົວຢ່າງ:

var o = new Object;
o.name = "David";
alert(o.name);	//ອອກ "David"
delete o.name;
alert(o.name);	//输出 "undefined"

在这个例子中,删除了 name 属性,意味着强制解除对它的引用,将其设置为 undefined(即创建的未初始化的变量的值)。

delete 运算符不能删除开发者未定义的属性和方法。例如,下面的代码将引发错误:

delete o.toString;

即使 toString 是有效的方法名,这行代码也会引发错误,因为 toString() 方法是原始的 ECMAScript 方法,不是开发者定义的。

void

void 运算符对任何值返回 undefined。该运算符通常用于避免输出不应该输出的值,例如,从 HTML 的 元素调用 JavaScript 函数时。要正确做到这一点,函数不能返回有效值,否则浏览器将清空页面,只显示函数的结果。例如:

Click me

如果把这行代码放入 HTML 页面,点击其中的链接,即可看到屏幕上显示 "[object]"。TIY

这是因为 window.open() 方法返回了新打开的窗口的引用。然后该对象将被转换成要显示的字符串。

要避免这种效果,可以用 void 运算符调用 window.open() 函数:

Click me

这使 window.open() 调用返回 undefined,它不是有效值,不会显示在浏览器窗口中。

提示:请记住,没有返回值的函数真正返回的都是 undefined。

ການສັກສາຫຼຸດຄວາມນິຍົມ/ການສັກສາຫຼຸດຄວາມນິຍົມທີ່ຫຼັງຄາວນີ້:

ສັນຍາສອງອັນທີ່ຖືກຈັດການຂອງ C (ແລະ Java) ແມ່ນການສັກສາຫຼຸດຄວາມນິຍົມ/ການສັກສາຫຼຸດຄວາມນິຍົມທີ່ຫຼັງຄາວນີ້:

ການສັກສາຫຼຸດຄວາມນິຍົມ/ການສັກສາຫຼຸດຄວາມນິຍົມທີ່ມີຄວາມນິຍົມ 1, ມີຮູບແບບຕິດຕັ້ງຄຳການສັກສາຫຼຸດຄວາມນິຍົມ 2 (++) ພາຍໃນຕົວແທນ:

var iNum = 10;
++iNum;

ການຫຼັງຄັ້ງທີສອງການກົດສັນຍາ iNum ເປັນ 11, ມີຄວາມອັນຕະລາຍທີ່ກາຍດຽວກັນກັບ:

var iNum = 10;
iNum = iNum + 1;

ດຽວກັນ, ການສັກສາຫຼຸດຄວາມນິຍົມທີ່ມີຄວາມຫຼຸດຄວາມນິຍົມ 1, ມີຮູບແບບຕິດຕັ້ງຄຳການສັກສາຫຼຸດຄວາມນິຍົມ 2 (--) ພາຍໃນຕົວແທນ:

var iNum = 10;
--iNum;

ໃນກໍລະນີນີ້, ການຫຼັງຄັ້ງທີສອງຂອງການກົດສັນຍາຫຼັງຄັ້ງທີສອງຂອງການຫຼຸດຄວາມນິຍົມຂອງ iNum ເປັນ 9.

ການໃຊ້ບັນດາສັນຍາການແຕ່ງຕາຍຄຳສັນຍາການສັກສາກັບຄຳການການເພີ່ມຄວາມນິຍົມສັກສາກັບຄຳການສັກສາຄວາມຫຼຸດລົງມາກ່ອນການຄາດຄະແນນຄຳສັນຍາ. ການຄິດການບັນທືກດັ່ງກ່າວ:

var iNum = 10;
--iNum;
alert(iNum);	//ສະແດງ "9"
alert(--iNum);	//输出 "8"
alert(iNum);	//ສະແດງ "8"

第二行代码对 iNum 进行减量运算,第三行代码显示的结果是("9")。第四行代码又对 iNum 进行减量运算,不过这次前减量运算和输出操作出现在同一个语句中,显示的结果是 "8"。为了证明已实现了所有的减量操作,第五行代码又输出一次"8"。

在算术表达式中,前增量和前减量运算符的优先级是相同的,因此要按照从左到右的顺序计算之。例如:

var iNum1 = 2;
var iNum2 = 20;
var iNum3 = --iNum1 + ++iNum2;	//ມີຄວາມຕາຍ "22"
var iNum4 = iNum1 + iNum2;		//ມີຄວາມຕາຍ "22"

ໃນຄຳນວຍສະຕິກຳທີ່ມີກ່ອນ, iNum3 ມີຄວາມຕາຍ 22, ຍ້ອນການຄາດການສະຖານະການກົດລະບຽບຕາມ 1 + 21. ພວກມັນຈະມີ iNum4 ຄວາມຕາຍ 22, ຍ້ອນວ່າການຄາດການສະຖານະການກົດລະບຽບຕາມ 1 + 21.

ຄຳນວຍສະຕິກຳຫຼັງ/ຫຼັງລະດັບ

ມີສອງຄຳນວຍສະຕິກຳທີ່ຖືກລາຍຈາກ C (ແລະ Java), ເຊິ່ງແມ່ນຄຳນວຍສະຕິກຳຫຼັງລະດັບຂອງຄຳນວຍສະຕິກຳຫຼັງລະດັບ.

ຄຳນວຍສະຕິກຳຫຼັງຂອງຄຳນວຍສະຕິກຳຈະເພີ່ມຈຳນວນ 1, ຂຽນວ່າພວກມັນມີສອງຫົວສີສີຫຼັງຄວາມຕາຍ.

var iNum = 10;
iNum++;

ຍ້ອນວ່າຄຳນວຍສະຕິກຳຫຼຸດລະດັບຫຼັງຈະຫຼຸດຈຳນວນ 1, ຂຽນວ່າພວກມັນມີສອງຫົວສີສີຫຼັງຄວາມຕາຍ.

var iNum = 10;
iNum--;

ຄຳນວຍສະຕິກຳທີສອງຈະຫຼຸດຄວາມຕາຍຂອງ iNum ຫາ 9.

ທີ່ຫຼາຍຈາກຄຳນວຍສະຕິກຳສັ້ນຕົ້ນ, ຄຳນວຍສະຕິກຳຫຼັງຂອງຄຳນວຍສະຕິກຳຈະດຳເນີນການເພີ່ມລະດັບຫຼືຫຼຸດລະດັບຫຼັງຈາກການຄາດການສະຖານະການກົດລະບຽບທີ່ບັນທຶກພວກມັນ. ພິຈະລະນາຄຳນວຍສະຕິກຳທີ່ມີຫຼັກການຕັ້ງຕາມຄຳນວຍສະຕິກຳຫຼັງກໍ່ຕາມ:

var iNum = 10;
iNum--;
alert(iNum);	//ສະແດງ "9"
alert(iNum--);	//ສະແດງ "9"
alert(iNum);	//ສະແດງ "8"

ຄືກັບຄຳນວຍສະຕິກຳສັ້ນຕົ້ນທີ່ມີຫຼັກການຕັ້ງຕາມຄຳນວຍສະຕິກຳຫຼັງຂອງຄຳນວຍສະຕິກຳຫຼັງລະດັບຂອງ iNum. ຄຳນວຍສະຕິກຳທີສາມຈະສະແດງຜົນຕາຍ ("9"). ຄຳນວຍສະຕິກຳທີສີ່ຈະສະແດງຄວາມຕາຍຂອງ iNum ໃນຄຳນວຍສະຕິກຳດຽວເກົ່ານັ້ນ. ຍ້ອນວ່າການຫຼຸດລະດັບແມ່ນເກີດຂຶ້ນຫຼັງຈາກການຄາດການສະຖານະການກົດລະບຽບກົດລະບຽບ, ຄຳນວຍສະຕິກຳດັ່ງກ່າວຈະສະແດງຈຳນວນ "9". ຍ້ອນວ່າການຫຼຸດລະດັບຫຼັງຈາກຄຳນວຍສະຕິກຳທີສີ່ ແລະ ກ່ອນຄຳນວຍສະຕິກຳທີຫ້າ, alert ຈະສະແດງ "8".

ໃນຄຳນວຍສະຕິກຳສາວນິຍົມ,ລະດັບຄວາມສຳຄັນຂອງຄຳນວຍສະຕິກຳຫຼັງເພີ່ມລະດັບແລະຫຼັງຫຼຸດລະດັບມີຄວາມດຽວກັນ,ຖ້າຕ້ອງການຄາດການຈາກຂ້າງຊ້າຍໄປຫຼັງຂ້າງຫາຍທີ່ຫຼັງຂ້າງ. ເອີ້ນວ່າ:

var iNum1 = 2;
var iNum2 = 20;
var iNum3 = iNum1-- + iNum2++;	//ມີຄວາມຕາຍ "22"
var iNum4 = iNum1 + iNum2;		//ມີຄວາມຕາຍ "22"

在前面的代码中,iNum3 等于 22,因为表达式要计算的是 2 + 20。变量 iNum4 也等于 22,不过它计算的是 1 + 21,因为增量和减量运算都在给 iNum3 赋值后才发生。

一元加法和一元减法

大多数人都熟悉一元加法和一元减法,它们在 ECMAScript 中的用法与您高中数学中学到的用法相同。

一元加法本质上对数字无任何影响:

var iNum = 20;
iNum = +iNum;
alert(iNum);	//输出 "20"

这段代码对数字 20 应用了一元加法,返回的还是 20。

尽管一元加法对数字无作用,但对字符串却有有趣的效果,会把字符串转换成数字。

var sNum = "20";
alert(typeof sNum);	//输出 "string"
var iNum = +sNum;
alert(typeof iNum);	//输出 "number"

这段代码把字符串 "20" 转换成真正的数字。当一元加法运算符对字符串进行操作时,它计算字符串的方式与 parseInt() 相似,主要的不同是只有对以 "0x" 开头的字符串(表示十六进制数字),一元运算符才能把它转换成十进制的值。因此,用一元加法转换 "010",得到的总是 10,而 "0xB" 将被转换成 11。

另一方面,一元减法就是对数值求负(例如把 20 转换成 -20):

var iNum = 20;
iNum = -iNum;
alert(iNum);	//输出 "-20"

与一元加法运算符相似,一元减法运算符也会把字符串转换成近似的数字,此外还会对该值求负。例如:

var sNum = "20";
alert(typeof sNum);	//输出 "string"
var iNum = -sNum;
alert(iNum);		//输出 "-20"
alert(typeof iNum);	//输出 "number"

在上面的代码中,一元减法运算符将把字符串 "-20" 转换成 -20(一元减法运算符对十六进制和十进制的处理方式与一元加法运算符相似,只是它还会对该值求负)。