ຮູບແບບຄວາມຄິດ ECMAScript
- ການໄປຕໍ່ຫນ້າກ່ອນ ການປ່ຽນຮູບແບບ 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");
ວິດີລະບັບດັ່ງກ່າວນັ້ນກຳລັງຖາມ
- ການໄປຕໍ່ຫນ້າກ່ອນ ການປ່ຽນຮູບແບບ ECMAScript
- ການໄປຕໍ່ຫນ້າຕໍ່ໄປ ການດຳເນີນການສິ່ງລັກບາງ