ຮູບແບບຄວາມຄິດ ECMAScript

ປະເພດຂອງຄວາມຈິງຈະເອີ້ນວ່າ ປະເພດ (class)

ການສອນນີ້ຈະເຈົ້າລະບຸປະເພດການກໍ່ສ້າງບັນດາບັນດາທີ່ຖືກກໍ່ສ້າງຄົບຖ້ອຍຂອງ ECMAScript.

ປະເພດຂອງຄວາມຈິງ

ປະເພດຂອງຄວາມຈິງຈະເອີ້ນວ່າ ປະເພດ (class), ເພາະວ່າບໍ່ມີຄຳວ່າ 'ຄວາມຈິງ' ທີ່ຈະເຈົ້າຈັດການ.

ການສອນນີ້ຈະເຈົ້າລະບຸປະເພດການກໍ່ສ້າງບັນດາບັນດາທີ່ຖືກກໍ່ສ້າງຄົບຖ້ອຍຂອງ ECMAScript.

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

注意:ຕາມຄວາມເຫັນທຳມະດາຂອງພະຍານິດ ECMAScript ບໍ່ມີປະເພດ. ຄວາມຈິງວ່າບໍ່ມີປະເພດ, ບໍ່ມີຄຳວ່າ 'ປະເພດ' ໃນ ECMA-262. ECMAScript ອະທິບາຍ 'ການກໍ່ສ້າງບັນດາບັນດາ', ທີ່ວິທະຍາສາດກັນກັບປະເພດໃນລະຫວ່າງອິດສະຫຼະພາບຂອງການກໍ່ສ້າງຊັບສັນ.

ຄຳແນະນຳ:本教程将使用术语“对象”。

对象是由 new 运算符加上要实例化的对象的名字创建的。例如,下面的代码创建 Object 对象的实例:

var o = new Object();

这种语法与 Java 语言的相似,不过当有不止一个参数时,ECMAScript 要求使用括号。如果没有参数,如以下代码所示,括号可以省略:

var o = new Object;

注意:尽管括号不是必需的,但是为了避免混乱,最好使用括号。

ຄຳແນະນຳ:ພວກເຮົາຈະສຶກສາຫຼາຍກວ່າຫຼາຍກວ່າບັນດາບັນດາທີ່ມີຄວາມຄິດທີ່ພິເສດໃນຫົວຂໍ້ບັນດາບັນດາທີ່ມີຄວາມຄິດທີ່ພິເສດ.

ຫົວຂໍ້ນີ້ຈະແມ່ນບັນດາບັນດາທີ່ມີຄວາມຄິດທີ່ບໍ່ແມ່ນບັນດາທີ່ມີຄວາມຄິດທີ່ບໍ່ມີບັນດາຂອງພິເສດ.

Object ບັນດາບັນດາທີ່ມີຄວາມຄິດທີ່ພິເສດ.

Object ບັນດາບັນດາທີ່ມີຄວາມຄິດທີ່ພິເສດ. ບັນດາ Object ບັນດາບັນດາທີ່ມີຄວາມຄິດທີ່ພິເສດຈະບໍ່ມີຫຍັງທີ່ສົມບູນ, ບໍ່ວ່າກໍ່ຕ້ອງຈັດພະນັງງານບັນດາກ່ອນກ່າວ. ຍ້ອນ ECMA-262 ມີ Object ບັນດາບັນດາທີ່ຄືກັບ java.lang.Object ຂອງ Java, ບັນດາບັນດາບັນດາທີ່ມີຄວາມຄິດທີ່ມາຈາກ Object ບັນດາບັນດາຈະຫຼົງກະຕຸບມາຈາກ Object ບັນດາບັນດາທີ່ຄືກັບ Object, ບັນດາຂອງ Object ບັນດາທີ່ມີຄວາມຄິດທີ່ຈະປາກົດມາຈາກບັນດາບັນດາອື່ນໆ, ດັ່ງນັ້ນການເຂົ້າໃຈ Object ບັນດາບັນດາຈະຫຼາຍກວ່າການເຂົ້າໃຈບັນດາບັນດາອື່ນໆ.

Object ບັນດາບັນດາທີ່ມີຄວາມຄິດທີ່ພິເສດ.

constructor
ການຫຼົງກະຕຸບບັນດາບັນດາທີ່ມີຄວາມຄິດທີ່ມາຈາກພະນັງງານທີ່ສ້າງບັນດາ. ສຳລັບ Object, ພະນັງງານມັນຈະທັງໝາຍໄປຫາພະນັງງານ Object() ຕົ້ນຕົ້ນ. constructor
Prototype
ການຫຼົງກະຕຸບບັນດາບັນດາທີ່ບໍ່ແມ່ນ. ສຳລັບບັນດາບັນດາ, ມັນມີການປະກາດຄືກັບບັນດາ Object ຂອງ Object.

Object ບັນດາບັນດາທີ່ມີຄວາມຄິດທີ່ພິເສດຫຼາຍກວ່າ.

hasOwnProperty(property)
ການພິຈາລະນາບັນດາຂອງບັນດາບັນດາທີ່ມີຄວາມຄິດທີ່ພິເສດ. ຈະຕ້ອງໃຊ້ຄວາມຄິດທີ່ເປັນຄຳໃຊ້. (ເປັນຕົວຢ່າງ, o.hasOwnProperty("name")) hasOwnProperty(property)
IsPrototypeOf(object)
ການພິຈາລະນາບັນດາຂອງບັນດາບັນດາທີ່ມີຮູບແບບທີ່ບໍ່ແມ່ນບັນດາ. IsPrototypeOf(object)
PropertyIsEnumerable
ການພິຈາລະນາບັນດາຂອງຄຳໃຊ້ for...in ທີ່ຈະສາມາດຈະການລະບຸ. PropertyIsEnumerable
ToString
ການຫຼົງກະຕຸບຄູ່ຄືກັບຄວາມຄິດທີ່ມາຈາກບັນດາ. ສຳລັບບັນດາ Object, ECMA-262 ບໍ່ໄດ້ອະນຸມັດຄູ່ຄືກັບຄວາມຄິດທີ່ດັ່ງກ່າວ, ດັ່ງນັ້ນຄວາມຄິດທີ່ມາຈາກຄວາມຄິດທີ່ຈະຫຼົງກະຕຸບຂອງ ECMAScript ພິເສດຈະຫຼາຍກວ່າ.
ValueOf
ການຫຼົງກະຕຸບຄູ່ຄືກັບອາກາດທີ່ຕາມຂອງບັນດາບັນດາ. ສຳລັບບັນດາບັນດາຫຼາຍ, ຄວາມຄິດທີ່ວ່າການຫຼົງກະຕຸບຄືກັບຄວາມຄິດທີ່ມາຈາກການຫຼົງກະຕຸບຂອງ ToString().

ຄວາມອະທິບາຍ:上面列出的每种属性和方法都会被其他对象覆盖。

Boolean 对象

Boolean 对象是 Boolean 原始类型的引用类型。

要创建 Boolean 对象,只需要传递 Boolean 值作为参数:

var oBooleanObject = new Boolean(true);

Boolean 对象将覆盖 Object 对象的 ValueOf() 方法,返回原始值,即 true 和 false。ToString() 方法也会被覆盖,返回字符串 "true" 或 "false"。

遗憾的是,在 ECMAScript 中很少使用 Boolean 对象,即使使用,也不易理解。

问题通常出现在 Boolean 表达式中使用 Boolean 对象时。例如:

var oFalseObject = new Boolean(false);
var bResult = oFalseObject && true;	//输出 true

在这段代码中,用 false 值创建 Boolean 对象。然后用这个值与原始值 true 进行 AND 操作。在 Boolean 运算中,false 和 true 进行 AND 操作的结果是 false。不过,在这行代码中,计算的是 oFalseObject,而不是它的值 false。

正如前面讨论过的,在 Boolean 表达式中,所有对象都会被自动转换为 true,所以 oFalseObject 的值是 true。然后 true 再与 true 进行 AND 操作,结果为 true。

注意:虽然你应该了解 Boolean 对象的可用性,不过最好还是使用 Boolean 原始值,避免发生这一节提到的问题。

参阅

如需更多有关 Boolean 对象的信息,请访问 ປື້ມກ່ຽວກັບ JavaScript Boolean Object.

Number Object

ຄືທ່ານຄິດຄືກັນຢູ່ວ່າ Number Object ແມ່ນວັດສະດຸທາງສະແດງຂອງອະຄາດດັບໂຕນັກຂະແນນ Number。ເພື່ອສ້າງວັດສະດຸ Number,ຕ້ອງໃຊ້ລະບັບທີ່ລາວລາຍລັກສະຍາຍາມນີ້:

var oNumberObject = new Number(68);

ທ່ານຄວນຈະໄດ້ຮູ້ວ່າບັນດາວັດສະດຸ Number ທີ່ໄດ້ກ່າວໃນວັນນະຄະດີກ່ອນນີ້ຂອງຫົວຂໍ້ນີ້ທີ່ກ່າວເຖິງວັດສະດຸພິເສດ (ເຊັ່ນ Number.MAX_VALUE)ທີ່ຈະກ່າວເຖິງວັດສະດຸ Number。ທຸກວັດສະດຸພິເສດທັງໝົດແມ່ນວັດສະດຸທາງສະຖານະຂອງວັດສະດຸ Number。

ເພື່ອຮັບຮູບຄ່າເວລາສະເພາະຂອງອະຄາດດັບໂຕນັກຂະແນນວິທະຍາຍາມສະເພາະ Number,ຕ້ອງໃຊ້ພາສານວິທະຍາຍາມ valueOf():

var iNumber = oNumberObject.valueOf();

ຕະຫຼົກວ່ານັ້ນ, Number ນັ້ນຍັງມີລະບຽບ toString() ທີ່ໄດ້ການອະທິບາຍຢ່າງລະອຽດໃນບົດປະກອບການປ່ຽນປັນຍາວ.

ນອກຈາກລະບຽບທີ່ຕ້ອງການຈຳນວນຈາກໂອກາດອົງການ, Number ອົງການຍັງມີລະບຽບຈຳນວນທີ່ພິເສດ.

toFixed() 方法

toFixed() ລະບຽບຈະອອກອາກາດຈຳນວນທີ່ມີຕົວເລກຫຼາຍຄັ້ງ. ເອງຈຳນວນນັ້ນ:

var oNumberObject = new Number(68);
alert(oNumberObject.toFixed(2));  //ອອກອາກາດ "68.00"

ໃນທີ່ນີ້, toFixed() ລະບຽບຈະຕັ້ງພາກສາ 2, ເຊິ່ງໝາຍຄວາມວ່າຈະສະແດງສອງຕົວເລກ. ລະບຽບນີ້ຈະອອກອາກາດ "68.00", ການລະບຸວ່າບໍ່ມີຕົວເລກຈະຖືກກະຈາຍດ້ວຍ 0. ລະບຽບນີ້ຈະມີປະສິດທິພາບສຳຄັນສຳລັບການຈັດການເງິນ. toFixed() ລະບຽບຈະສະແດງຈຳນວນທີ່ມີຕົວເລກຈາກ 0 ຫາ 20 ຕົວເລກ, ຕົວເລກທີ່ຫຼາຍກວ່າຈຳນວນນັ້ນຈະເກີດຄວາມຜິດພາດ.

toExponential() 方法

toExponential() ລະບຽບຈະອອກອາກາດຈຳນວນທີ່ສະແດງຈຳນວນໃນຮູບແບບວິທະຍາສາດ.

ຄືກັບ toFixed() ລະບຽບ, toExponential() ລະບຽບຍັງມີພາກສາປະກອບໜຶ່ງ ເຊິ່ງແມ່ນຈຳນວນຕົວເລກທີ່ຈະອອກອາກາດທີ່ຫຼາຍຄັ້ງ. ເອງຈຳນວນນັ້ນ:

var oNumberObject = new Number(68);
alert(oNumberObject.toExponential(1));  //ອອກອາກາດ "6.8e+1"

ຜົນຂອງລະບຽບນີ້ແມ່ນ "6.8e+1", ທີ່ຫຼັງຈາກການອະທິບາຍກ່ອນແມ່ນຈະສະແດງ 6.8x101ຄຳຖາມວ່າຖ້າບໍ່ຮູ້ວ່າຈະໃຊ້ຮູບແບບໃດ (ຮູບແບບການສະແດງຈຳນວນຫຼືຮູບແບບອັດຕາ) ຈະໃຊ້ toPrecision() ລະບຽບ.

toPrecision() 方法

toPrecision() ລະບຽບຈະຕັ້ງຈຳນວນຂອງຈຳນວນຕາມຮູບແບບທີ່ມີຄວາມສຳຄັນຫຼາຍທີ່ສຸດ ຫຼືຮູບແບບສະແດງຈຳນວນ. ມັນມີພາກສາປະກອບໜຶ່ງ ເຊິ່ງແມ່ນຈຳນວນຕົວເລກທີ່ໃຊ້ໃນການສະແດງຈຳນວນ (ບໍ່ລວມສະແດງອັດຕາ). ເອງຈຳນວນນັ້ນ:

var oNumberObject = new Number(68);
alert(oNumberObject.toPrecision(1));  //ອອກອາກາດ "7e+1"

ວຽກງານຂອງລະບຽບນີ້ແມ່ນໃຊ້ເຄື່ອງສະແດງຈຳນວນ 68 ດ້ວຍເຄື່ອງສະແດງບໍ່ຫຼາຍຄັ້ງຫຼາຍວ່າ "7e+1", ດ້ວຍຮູບແບບອື່ນໆຈະເປັນ 70. ແຕ່ຢ່າງໃດກໍ່ຕາມ toPrecision() ລະບຽບຈະຈັດການຈຳນວນ. ແຕ່ຖ້າໃຊ້ 2 ຕົວເລກໃຫ້ຈຳນວນ 68 ຈະງ່າຍກວ່າ:

var oNumberObject = new Number(68);
alert(oNumberObject.toPrecision(2));  //ອອກອາກາດ "68"

ຕະຫຼົກວ່າອອກອາກາດ "68" ຍ້ອນນັ້ນແມ່ນການສະແດງຈຳນວນພາບທີ່ຖືກຕັ້ງ. ແຕ່ວ່າຖ້າຈຳນວນຕົວເລກທີ່ໄດ້ຕັ້ງຫຼາຍກວ່າຈຳນວນທີ່ຕ້ອງການຈະເປັນແນວໃດ?

var oNumberObject = new Number(68);
alert(oNumberObject.toPrecision(3));  //输出 "68.0"

在这种情况下,toPrecision(3) 等价于 toFixed(1),输出的是 "68.0"。

toFixed()、toExponential() 和 toPrecision() 方法都会进行舍入操作,以便用正确的小数位数正确地表示一个数。

ຄຳແນະນຳ:与 Boolean 对象相似,Number 对象也很重要,不过应该少用这种对象,以避免潜在的问题。只要可能,都使用数字的原始表示法。

参阅

如需更多有关 Number 对象的信息,请访问 ປື້ມກ່ຽວກັບ JavaScript Number Object.

String 对象

String 对象是 String 原始类型的对象表示法,它是以下方式创建的:

var oStringObject = new String("hello world");

String 对象的 valueOf() 方法和 toString() 方法都会返回 String 类型的原始值:

alert(oStringObject.valueOf() == oStringObject.toString());	//输出 "true"

如果运行这段代码,输出是 "true",说明这些值真的相等。

ຄວາມອະທິບາຍ:String 对象是 ECMAScript 中比较复杂的引用类型之一。同样,本节的重点只是 String 类的基本功能。更多的高级功能请阅读本教程相关的章节,或参阅 ປື້ມກ່ຽວກັບ JavaScript String Object.

ຜະສານ length:

ສະພາບ String ມີຜະສານ length ເຊິ່ງແມ່ນຈຳນວນຄຳສັບໃນສາຍຄຳ:

var oStringObject = new String("hello world");
alert(oStringObject.length);	//ເປີດອອກ "11"

ບົດການນັ້ນຈະອອກ "11" ເຊິ່ງແມ່ນຈຳນວນຄຳສັບໃນ "hello world". ສະແດງວ່າສາຍຄຳມີຄຳສັບທີ່ປົກກະຕິຈະມີສອງວັດສະນະວັດຖຸດັບທີ່ສອງ (ກັບ ASCII ວັດສະນະວັດຖຸຈະມີພຽງວັດສະນະວັດຖຸດັບທີ່ໜຶ່ງ), ແຕ່ກໍ່ຈະຄົ້ນຫນັງຄຳສັບທີ່ບາງຂອງຈະຈັບຄຳສັບທີ່ບາງຂອງພຽງຫນັງ.

charAt() ແລະ charCodeAt() ວິທີກວດຄົ້ນຫນັງ:

ສະພາບ String ມີຫນັງວິທີຫລາຍຢ່າງ:

ເບື້ອງຕົ້ນຫນັງກັບວິທີກວດຄົ້ນຫນັງ charAt() ແລະ charCodeAt() ກຳລັງຄົ້ນຫນັງຄຳສັບທີ່ບາງຂອງສາຍຄຳ. ທັງສອງວິທີກວດຄົ້ນຫນັງມີຄຳຂໍ້ສະເຫນີຫນັງການຈັດວາງຄຳສັບທີ່ຈະຄົ້ນຫນັງ.

charAt() ວິທີກວດຄົ້ນຫນັງກັບຄຳສັບທີ່ອາດຈະມີຕົວເລກຕາມການຈັດວາງ:

var oStringObject = new String("hello world");
alert(oStringObject.charAt(1));	//ເປີດອອກ "e"

ໃນກົດສະນະພາບ "hello world", ຄຳທີ່ຈຸດ 1 ແມ່ນ "e". ໃນ"ECMAScript Original Types" ພວກເຮົາໄດ້ບອກວ່າ, ຈຸດທີ່ຄຳທີໜຶ່ງແມ່ນ 0, ຈຸດທີ່ຄຳທີສອງແມ່ນ 1, ແຕ່ນອນນັ້ນ. ເນື່ອງຈາກນັ້ນ, ວິທີການ charAt(1) ກຳລັງສະແດງ "e".

ຖ້າບໍ່ຕ້ອງການຮັບຄຳ, ແຕ່ຄຳສະມາດ, ສາມາດເອີ້ນວິທີການ charCodeAt() ໄດ້:

var oStringObject = new String("hello world");
alert(oStringObject.charCodeAt(1));	//ສະແດງ "101"

ຕົວຢ່າງນີ້ກຳລັງສະແດງ "101", ເຊິ່ງເປັນລະຫັດຄຳສະມາດຂອງຄຳ "e".

concat() ວິທີການ

ຕໍ່ມາແມ່ນວິທີການ concat(), ທີ່ນຳມາຕິດຕໍ່ກົດສະນະພາບຫນຶ່ງຫລາຍທີ່ຕ້ອງການທຽບກັບຈຸດເບື້ອງຕົ້ນຂອງ String ວິດີໂອ, ວິທີການກຳລັງກັບ String ວິດີໂອດັ່ງທີ່:

var oStringObject = new String("hello ");
var sResult = oStringObject.concat("world");
alert(sResult);		//ການສະແດງ "hello world"
alert(oStringObject);	//ການສະແດງ "hello "

ໃນການຂັດຂອງວິດີໂອນີ້, ວິທີການ concat() ກຳລັງກັບ "hello world", ແຕ່ວິດີໂອ String ຍັງຢູ່ທີ່ "hello ". ຍ້ອນເຫດນັ້ນ, ມັນຍັງມີຫນັງວ່າມັນຈະຖືກທຽບກັບ ການທຽບກົດສະນະພາບທີ່ມີຈຸດທີ່ 0, 1, 2, ...

var oStringObject = new String("hello ");
var sResult = oStringObject + "world";
alert(sResult);		//ການສະແດງ "hello world"
alert(oStringObject);	//ການສະແດງ "hello "

indexOf() ແລະ lastIndexOf() ວິທີການ

ຈົນເຖິງນີ້, ພວກເຮົາໄດ້ປຶກສາວິທີການທີ່ທຽບກົດສະນະພາບ, ທີ່ຢືນຂອງຄຳສະມາຊິກທີ່ບາງຢູ່ໃນກົດສະນະພາບ. ແຕ່ຖ້າບໍ່ສາມາດພົບຄຳສະມາຊິກນັ້ນຢູ່ໃນກົດສະນະພາບບໍ່ສາມາດ, ຄວນເອີ້ນວິທີການ indexOf() ແລະ lastIndexOf().

indexOf() ແລະ lastIndexOf() ວິທີການກຳລັງກັບຈຸດທີ່ການພົບຂອງສະຖານະພາບລະດັບຕໍ່າຢູ່ທີ່ສະຖານະພາບອື່ນໆ, ຖ້າບໍ່ສາມາດພົບສະຖານະພາບໄດ້ນັ້ນກັບ -1.

ຄວາມແຕກຕ່າງລະຫວ່າງວິທີການ indexOf() ລວມກັບວິທີການ lastIndexOf() ແມ່ນ indexOf() ກຳລັງຊອກຫາຈາກຕອນຫນັງຂອງກົດສະນະພາບ (ຈຸດ 0) ແລະ lastIndexOf() ລວມກັບຕອນຫນັງຂອງກົດສະນະພາບ. ຕົວຢ່າງ:

var oStringObject = new String("hello world!");
alert(oStringObject.indexOf("o"));		输出 "4"
alert(oStringObject.lastIndexOf("o"));	输出 "7"

ຢູ່ທີ່ນີ້ຄຳ "o" ຄັ້ງທຳອິດຕັ້ງຢູ່ລະດັບ 4, ເຊິ່ງແມ່ນ "hello" ເປັນ "o"; ຄຳ "o" ຄັ້ງສຸດທ້າຍຕັ້ງຢູ່ລະດັບ 7, ເຊິ່ງແມ່ນ "world" ເປັນ "o". ຖ້າຄຳ "o" ມີພຽງຄຳສັບດຽວ, ວິທີ indexOf() ແລະ lastIndexOf() ຈະຮັບຜົນລະດັບດຽວກັນ.

localeCompare() ວິທີ

ວິທີຕໍ່ໄປ ອາດຈະຖືກເອີ້ນວ່າ localeCompare(), ສໍາລັບການອະທິບາຍກະຕຸບ. ວິທີນີ້ມີຄວາມຄົງຫນັງຫລາຍໜຶ່ງ - ຄຳສັບທີ່ຈະປະກອບກັບ. ຜົນກະຕຸບຈະຮັບຜົນໜຶ່ງຈາກສາມຢ່າງດັ່ງກ່າວ:

  • ຖ້າກະຕຸບ String ໄດ້ຕັ້ງຢູ່ພາຍກ່ອນກະຕຸບຂອງຄຳສັບຂອງຄຳປະກອບ, ຈະຮັບຜົນທີ່ຕໍ່າ.
  • ຖ້າກະຕຸບ String ແມ່ນທຽບກັບຄຳສັບຂອງຄຳປະກອບ, ຈະຮັບຜົນ 0
  • ຖ້າກະຕຸບ String ໄດ້ຕັ້ງຢູ່ພາຍຫລັງກະຕຸບຂອງຄຳສັບຂອງຄຳປະກອບ, ຈະຮັບຜົນທີ່ຕໍ່າ.

ຄວາມອະທິບາຍ:ຖ້າຜົນກະຕຸບໄດ້ຮັບຜົນທີ່ຕໍ່າ, ສິ່ງທີ່ຫລາຍທີ່ເກີດມາແມ່ນ -1, ແຕ່ຜົນທີ່ກະຕຸບຈະຕັ້ງຢູ່ພາຍໃຕ້ການກະກຽມ. ຖ້າຜົນກະຕຸບໄດ້ຮັບຜົນທີ່ຍອດ, ສິ່ງທີ່ຫລາຍທີ່ເກີດມາແມ່ນ 1, ແຕ່ຜົນທີ່ກະຕຸບຈະຕັ້ງຢູ່ພາຍໃຕ້ການກະກຽມ.

ຕົວຢ່າງດັ່ງກ່າວ:

var oStringObject = new String("yellow");
alert(oStringObject.localeCompare("brick"));		//ອອກພາບ "1"
alert(oStringObject.localeCompare("yellow"));		//ອອກພາບ "0"
alert(oStringObject.localeCompare("zoo"));		//ອອກພາບ "-1"

ໃນເລື່ອງລະບຸນີ້ກະຕຸບ "yellow" ໄດ້ປະກອບກັບ 3 ຄັນຄື: "brick"、"yellow" ແລະ "zoo". ຍ້ອນວ່າກະຕຸບຕາມອັນຕະລາງອັງກິດຈະຕັ້ງຢູ່ "brick" ພາຍຫລັງ "yellow", ກະຕຸບ localeCompare() ຈະຮັບຜົນ 1; "yellow" ທຽບກັບ "yellow", ກະຕຸບ localeCompare() ຈະຮັບຜົນ 0; "zoo" ຈະຕັ້ງຢູ່ "yellow" ພາຍຫລັງ, ກະຕຸບ localeCompare() ຈະຮັບຜົນ -1. ການກ່າວອີກຄັ້ງອີກວ່າ, ຍ້ອນວ່າຜົນກະຕຸບຈະຕັ້ງຢູ່ພາຍໃຕ້ການກະກຽມ, ດັ່ງນັ້ນຫລາຍກວ່າຈະໃຊ້ວິທີ localeCompare() ດ້ວຍວິທີດັ່ງກ່າວຢູ່ລາຍການດັ່ງກ່າວ:

var oStringObject1 = new String("yellow");
var oStringObject2 = new String("brick");
var iResult = oStringObject1.localeCompare(oStringObject2);
if(iResult < 0) {
  alert(oStringObject1 + " comes before " + oStringObject2);
} else if (iResult > 0) {
  alert(oStringObject1 + " comes after " + oStringObject2);
} else {
  alert("The two strings are equal");
}

ດ້ວຍການຈັດການນັ້ນ, ພວກມັນສາມາດແຈ້ງເຖິງວ່າລິກະສັບນີ້ຈະດຳເນີນຢ່າງດີໃນທຸກການດຳເນີນ.

ອາຊີບທີ່ພິເສດຂອງວິທີການ localeCompare() ແມ່ນປະເທດທີ່ພາຍໃນການດຳເນີນການ(locale, ທີ່ກ່ຽວກັບປະເທດ/ປະເທດແລະພາສາ)ທີ່ກຳນົດວິທີການດຳເນີນຂອງວິທີການນັ້ນ.ໃນອາເມລິກາ, ພາສາອັງກິດແມ່ນພາສາທີ່ແຫ່ງຂອງການດຳເນີນ ECMAScript, localeCompare() ຈະຈັດການຂ້າງຕົວ, ມີສາມາດການຈັດການຄືນກັບພາສາສະໜອງຫຼັງສະໜອງສະໜອງ.ພຽງແຕ່ໃນປະເທດອື່ນໆ, ການຈັດການຈະບໍ່ຫຼາຍກວ່ານັ້ນ.

slice() ແລະ substring()

ECMAScript ຍືດອະນຸຍາດວ່າມີສອງວິທີການຈາກການສ້າງສາຍຈົດເພື່ອຄູ່ມັນ String, ເຊິ່ງແມ່ນ slice() ແລະ substring().ພວກມັນພຽງແຕ່ກັບຄືນສາຍຈົດຂອງຄູ່ມັນເອງທີ່ຈະຈັດການ, ພວກມັນຍັງພຽງແຕ່ຄວນມີບັນດາຕົວປະກອບໜຶ່ງຫລືສອງ.ຕົວປະກອບທຳອິດແມ່ນການຈັດການຂອງສາຍຈົດທີ່ຈະເອົາ, ຕົວປະກອບທີສອງ(ຖ້າມີບັນດາຕົວປະກອດ)ແມ່ນການຈັດການສະຫລຸບຂອງສາຍຈົດທີ່ຈະເອົາກ່ອນສະຫລຸບ(ພຽງແຕ່ການເອົາສະຫລຸບຂອງການຈັດການທີ່ຈະບໍ່ເອົາ).ຖ້າບໍ່ມີບັນດາຕົວປະກອດທີສອງ, ການຈັດການສະຫລຸບຈະແມ່ນຄືນຄູ່ມັນເອງ.

ພຽງແຕ່ຄືກັບຄວາມຄິດ concat()ນັ້ນ slice() ແລະ substring()ກໍ່ບໍ່ປ່ຽນແປງຄູ່ມັນເອງຂອງ String.ພວກມັນພຽງແຕ່ກັບຄືນຄູ່ມັນເອງຄືບໍ່ໄດ້ປ່ຽນແປງ.

var oStringObject = new String("hello world");
alert(oStringObject.slice("3"));		//输出 "lo world"
alert(oStringObject.substring("3"));		//输出 "lo world"
alert(oStringObject.slice("3", "7"));		//输出 "lo w"
alert(oStringObject.substring("3", "7"));	//输出 "lo w"

在这个例子中,slice() 和 substring() 的用法相同,返回值也一样。当只有参数 3 时,两个方法返回的都是 "lo world",因为 "hello" 中的第二个 "l" 位于位置 3 上。当有两个参数 "3" 和 "7" 时,两个方法返回的值都是 "lo w"("world" 中的字母 "o" 位于位置 7 上,所以它不包括在结果中)。

为什么有两个功能完全相同的方法呢?事实上,这两个方法并不完全相同,不过只在参数为负数时,它们处理参数的方式才稍有不同。

ສຳລັບຄຳສະເໜີລະຫວ່າງລົງຄົນຕ່ຳ slice() ຈະໃຊ້ຄຳສະເໜີລະຫວ່າງລົງຄົນຕ່ຳຂອງສາຍຄຳແລະ substring() ຈະເປັນ 0 (ພຽງແຕ່ຈະຖືກລົບໄປ) ເຊິ່ງເປັນວ່າຈະຖືກລົບໄປ。

var oStringObject = new String("hello world");
alert(oStringObject.slice("-3"));		//ຈະອອກພາບ "rld"
alert(oStringObject.substring("-3"));	//ຈະອອກພາບ "hello world"
alert(oStringObject.slice("3, -4"));		//ຈະອອກພາບ "lo w"
alert(oStringObject.substring("3, -4"));	//ຈະອອກພາບ "hel"

ດັ່ງນັ້ນຈະໄດ້ເຫັນຄວາມແຕກຕ່າງທີ່ສຳຄັນລະຫວ່າງ slice() ແລະ substring()。

ເມື່ອມີພຽງຄຳສະເໜີ -3 ພວກ slice() ຈະກັບຄືນ "rld" ແລະ substring() ຈະກັບຄືນ "hello world" ຍ້ອນວ່າສາຍຄຳ "hello world" slice("-3") ຈະຖືກປ່ຽນແປງເປັນ slice("8") ແລະ substring("-3") ຈະຖືກປ່ຽນແປງເປັນ substring("0")。

ຢ່າງດຽວກັນ, ຖ້າໃຊ້ຈຳນວນ 3 ແລະ -4, ການແຕກຕ່າງຈະຊັດເຈນ. slice() ຈະຖືກປ່ຽນສາຍ slice(3, 7), ຄືກັບຫຼັກສັນຍາທີ່ກ່ອນ, ອອກສຽງ "lo w". ກົດລະບຽບ substring() ຈະຖືກອະທິບາຍວ່າ substring(3, 0), ຄືກັບ substring(0, 3), ຍ້ອນ substring() ຈະບໍ່ມີຄວາມຍິງສະເພາະຈະໄດ້ປ່ຽນ substring(3, -4) ୍ອອກສຽງ "hel". ກົດລະບຽບສຸດທ້າຍຂອງພວກເຮົາຈະອະທິບາຍວ່າພວກເຮົາຈະໃຊ້ກົດລະບຽບພວກເຂົາ.

toLowerCase(), toLocaleLowerCase(), toUpperCase(), toLocaleUpperCase()

ກົດລະບຽບທີ່ພວກເຮົາຈະເຈົ້າກ່ຽວກັບມັນວ່າການປ່ຽນຄວາມຍິງ. ມີສີ່ກົດລະບຽບຈະນໍາໄປສູ່ການປ່ຽນຄວາມຍິງ, ເຊິ່ງຢູ່ໃນ

  • toLowerCase()
  • toLocaleLowerCase()
  • toUpperCase()
  • toLocaleUpperCase()

ຈາກຊື່ຫົວຂອງພວກເຂົາ, ກົດລະບຽບທີ່ສອງທຳອິດຂອງພວກເຂົາຈະນໍາໄປສູ່ການປ່ຽນຄວາມຍິງຫຼຸດສາມາດ, ກົດລະບຽບສອງທຳອິດຈະນໍາໄປສູ່ການປ່ຽນຄວາມຍິງທົບທຽມ.

toLowerCase() ແລະ toUpperCase() ກົດລະບຽບມີພາສາຫຼັກພາສາປະເທດທີ່ສະເພາະ (ຄືກັບ ກົດລະບຽບ java.lang.String ທີ່ສະເພາະ).

toLocaleLowerCase() ແລະ toLocaleUpperCase() ກົດລະບຽບມີພາສາຫຼັກພາສາປະເທດທີ່ສະເພາະ (ຄືກັບ ກົດລະບຽບ localeCompare() ຄືກັນ). ໃນຫຼາຍພາສາ, ກົດລະບຽບພາສາປະເທດທີ່ສະເພາະຈະເປັນສະເພາະກັບກົດລະບຽບທົ່ວໄປ. ແຕ່, ບາງພາສາໄດ້ນຳໃຊ້ກົດລະບຽບສະເພາະສຳລັບການປ່ຽນຄວາມຍິງ Unicode (ເຊັ່ນຕາມການຕາມຄວາມຍິງຕາມພາສາຕາລີ), ແລະຈະຕ້ອງໃຊ້ກົດລະບຽບພາສາປະເທດທີ່ສະເພາະຈະເປັນການປ່ຽນຄວາມຍິງທີ່ຖືກການພິຈາລະນາຢ່າງຖືກຕ້ອງ.

var oStringObject = new String("Hello World");
alert(oStringObject.toLocaleUpperCase());	//ອອກສຽງ "HELLO WORLD"
alert(oStringObject.toUpperCase());		//ອອກສຽງ "HELLO WORLD"
alert(oStringObject.toLocaleLowerCase());	//ອອກສຽງ "hello world"
alert(oStringObject.toLowerCase());		//ອອກ "hello world"

ໃນວິດີລະບັບດັ່ງກ່າວນີ້,toUpperCase() ແລະ toLocaleUpperCase() ອອກ "HELLO WORLD", toLowerCase() ແລະ toLocaleLowerCase() ອອກ "hello world". ເຖິງວ່າບໍ່ຮູ້ຊະນິດຂອງການກະຈາຍພາສາໃນການດຳເນີນການດັ່ງກ່າວນີ້, ການນໍາໃຊ້ການດຳເນີນການທີ່ມີພາສາພິກັນແມ່ນມີຄວາມປອດໄພຫຼາຍ.

ຄຳແນະນຳ:ຈັງກັງ, ທຸກຂອງປະເພດ String Object ແລະການດຳເນີນການຂອງພວກເຂົາສາມາດນຳໃຊ້ໃນຄວາມພາບ String ກໍ່ຕາມ ຍ້ອນພວກເຂົາເປັນບັນດາບັນດາບັນດາ.

ການດຳເນີນການ instanceof

ການດຳເນີນການ typeof ກັບການກັນກັບການນັກກິລາບັນດາບັນດາອາດອາດພະຍາຍາມຄວາມຜິດຫຼາຍ, ບໍ່ວ່າຈະຖືກນັກກິລາບັນດາບັນດາໃດ, ຜົນກໍ່ຈະແມ່ນ "object". ECMAScript ໄດ້ເຂົ້າມາການດຳເນີນການ instanceof ເພື່ອແກ້ໄຂບັນຫານີ້.

ການດຳເນີນການ instanceof ແມ່ນຄືກັບການດຳເນີນການ typeof, ເພື່ອຮັບຮູ້ຊະນິດຂອງບັນດາບັນດາຂອງບັນດາບັນດາ. ຕະຫຼາດກັບການດຳເນີນການ typeof, instanceof ການດຳເນີນການກໍ່ຕ້ອງການຂອງຜູ້ພັດທະນາການການຮັບຮູ້ຊະນິດບັນດາບັນດາວ່າມັນເປັນປະເພດສະເພາະ. ເປັນຕົວຢ່າງ:

var oStringObject = new String("hello world");

ວິດີລະບັບດັ່ງກ່າວນັ້ນກຳລັງຖາມ