Aina za kusudiwa za ECMAScript

Aina za thamani za kutokea zilitawala kwa kawaida kwa jina la 'kikundi' (class).

Kilichotafsiriwa kwa maneno ya kigeni, tutafungua aina zingine za thamani za kutokea zilizopangiwa na ECMAScript.

Aina za thamani za kutokea

Aina za thamani za kutokea zilitawala kwa kawaida kwa jina la 'kikundi' (class), kwa maana ya inayofanana na kikundi cha kawaida kinapopatikana thamani za kutokea.

Kilichotafsiriwa kwa maneno ya kigeni, tutafungua aina zingine za thamani za kutokea zilizopangiwa na ECMAScript.

Kuanzia sasa, matokeo yatakuwa kuhusiana na aina za thamani za kutokea kwa sababu ya hizo zilizokadiriwa.

Kuja hapa:Kwa maneno ya kigeni, ECMAScript haikubadilika kama kikundi. Kwa hivyo, hata kama haitakayopatikana kikundi, kwenye ECMA-262 hakupatikana jina 'kikundi'. ECMAScript inaeleza 'kuchuja kikundi', kwa tabia inayofanana na kikundi cha programu zingine.

Mtaarifu:本教程将使用术语“对象”。

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

var o = new Object();

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

var o = new Object;

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

Mtaarifu:我们会在对象基础这一章中更深入地探讨对象及其行为。

这一节的重点是具有等价的原始类型的引用类型。

Object 对象

Object 对象自身用处不大,不过在了解其他类之前,还是应该了解它。因为 ECMAScript 中的 Object 对象与 Java 中的 java.lang.Object 相似,ECMAScript 中的所有对象都由这个对象继承而来,Object 对象中的所有属性和方法都会出现在其他对象中,所以理解了 Object 对象,就可以更好地理解其他对象。

Object 对象具有下列属性:

constructor
对创建对象的函数的引用(指针)。对于 Object 对象,该指针指向原始的 Object() 函数。
Prototype
对该对象的对象原型的引用。对于所有的对象,它默认返回 Object 对象的一个实例。

Object 对象还具有几个方法:

hasOwnProperty(property)
判断对象是否有某个特定的属性。必须用字符串指定该属性。(例如,o.hasOwnProperty("name"))
IsPrototypeOf(object)
判断该对象是否为另一个对象的原型。
PropertyIsEnumerable
判断给定的属性是否可以用 for...in 语句进行枚举。
ToString()
返回对象的原始字符串表示。对于 Object 对象,ECMA-262 没有定义这个值,所以不同的 ECMAScript 实现具有不同的值。
ValueOf()
返回最适合该对象的原始值。对于许多对象,该方法返回的值都与 ToString() 的返回值相同。

Mawachicha:Zingineo zote za tabia na kifaa zilitiririka zimekabwa na kina zingine.

Kipimo kidigitali cha Boolean

Kipimo kidigitali cha Boolean kinahusiana na aina ya kipimo kidigitali cha kina cha kina.

Kupata kipimo kidigitali cha Boolean, inafaa kwamba kumpatia thamani ya kina cha Boolean kama thamani ya kifaa:

var oBooleanObject = new Boolean(true);

Kipimo kidigitali cha Boolean kinakapisha kipimo kidigitali cha Object cha ValueOf() kwa thamani za kina, yaani kweli na kweli. Kipimo kidigitali cha ToString() kinakapisha thamani za kina za "true" na "false".

Itakuwa matokeo wa kusababisha kwamba kipimo kidigitali cha Boolean kinasababisha kipimo kidigitali cha Boolean kwenye ECMAScript, inapata matatizo ya kueleza.

Matatizo yanaingia kwa kusababisha kipimo kidigitali cha Boolean kwenye ujumbe wa kina cha Boolean. Kwa mfano:

var oFalseObject = new Boolean(false);
var bResult = oFalseObject && true;	//Muungano wa kweli

Kwenye kifaa hiki, thamani ya false inatokana na thamani ya kina cha kweli. Kivyo, thamani ya kina cha kweli inafanywa kipindi kipya na thamani ya kina cha kweli, kimekuwa thamani ya kina cha kweli. Inafaa kwamba thamani ya oFalseObject inatoka na thamani ya kina cha kweli, na si thamani ya kina cha kweli.

Kama ilijulikana kwenye kichaguo kilichotumika kwanza, kila kina kinahusiana na kifaa cha Boolean kwa kufikiria kwamba tabia za kina zote zinaingia katika ujumbe wa kweli. Kivyo, thamani ya oFalseObject ina ujumbe wa kweli. Kivyo, kweli kinafanywa kipindi kipya na kweli, kimekuwa kweli.

Kuja hapa:Inafaa kwamba wewe watajua ufupishaji wa kipimo kidigitali cha Boolean, lakini itakuwa bora kusaidia thamani za kina cha Boolean, kusikia matatizo ya kichaguo hiki.

Tazama

Kwa mafanikio ya kipimo kidigitali cha Boolean, tafuta hapa: Mashirika ya JavaScript Boolean ya Kitabu cha Mifano.

Kipimo kidigitali cha Number

Kama inasikitika, kipimo kidigitali cha Number kinahusiana na aina ya kipimo kidigitali cha kina. Kupata kipimo kidigitali cha Number, tumia kifaa kilichotumika kwanza:

var oNumberObject = new Number(68);

Mtu wako kwa ujumbe unatajwa kwenye kichaguo kilichotumika kwanza kwenye kitabu hiki kwa kueleza thamani kama ya Number.MAX_VALUE. Tabia za kina zote ni tabia za kipimo kidigitali cha Number.

Kufaa kupata thamani ya kina ya kipimo kidigitali, inafaa kutumia methodi ya valueOf():

var iNumber = oNumberObject.valueOf();

Inasikitaka, Number class ina method ya toString() kama ilivyoelewa kwenye kilele cha uharibifu wa mimea.

Inasikitaka, Number class ina method zaidi za kumtaarifu namba zingine za kuzikwepo kwa sababu zinaingia kwenye Object object.

Method ya toFixed()

Method ya toFixed() inatoa namba za kina za kina zinaenea na viwango vya kina vya kati ya kina. Kwa mfano:

var oNumberObject = new Number(68);
alert(oNumberObject.toFixed(2));  // kimekwepo '68.00'

Kwa sasa, thamani ya method ya toFixed() ni 2, inaeleza kuwa tunataragiza viwango vya 2 vya kina. Method hii inatoa '68.00', viwango vya thelathini vya hivyo vinatumiwa na 0. Hii inafaa sana kwa programu za kumtaarifu walala. Method ya toFixed() inaonyesha namba na viwango vya kina vya kati ya 0 hadi 20, thamani inayotangulia inakataa kosa.

Method ya toExponential()

Method ya toExponential() inaona namba zinaenea kwa muundo wa sayansi ya namba za kina. Kwa mfano:

Kama method ya toFixed(), method ya toExponential() ina thamani kama ujenzi wa namba za kina. Kwa mfano:

var oNumberObject = new Number(68);
alert(oNumberObject.toExponential(1));  // kimekwepo '6.8e+1'

Matokeo ya kikodi hiki ni '6.8e+1', kama ilivyoelewa, inaeleza 6.8x101Muda wa kuzungumza, kama haujajua ni muundo gani haujui kuwaonekana (muundo wa tabaka au uharibifu) wa namba, tunaweza kutumia method ya toPrecision().

Method ya toPrecision()

Method ya toPrecision() inaona namba zinaenea kwa muundo wa tabaka au uharibifu kwa sababu ina thamani, ina thamani ya kina ya namba za kumtaarifu (bila kumtaarifu ya uharibifu). Kwa mfano,

var oNumberObject = new Number(68);
alert(oNumberObject.toPrecision(1));  // kimekwepo '7e+1'

Kazi ya kikodi hiki ni kumtaarifu namba 68 kwa herufi moja, bora yako '7e+1', inayotumiwa katika muundo mwingine ya 70. Kwa uadilifu, method ya toPrecision() inaona namba zinaenea.

var oNumberObject = new Number(68);
alert(oNumberObject.toPrecision(2));  // kimekwepo '68'

Inasikitaka, kimekwepo '68', kwa sababu hii ni tabaka la namba hizi. Hata hivyo, kama namba zilizotumika zingine zaidi ya ile inayohitajika, kama ni gani?

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

Kwenye hali hii, toPrecision(3) inaingia kama toFixed(1), ikiichapisha "68.0".

Methodzi za toFixed(), toExponential() na toPrecision() zinafanya mifungo kwa kumekadiri ukosemu na kuonekana kwa namba kwa nafasi ya joto ya kina:

Mtaarifu:Kama kama mfumo wa Boolean, mfumo wa Number ina muhimu sana, lakini inaruhusiwa kusikia hii mfumo kwa sababu ya matatizo yanayotukia. Inapokwenda, tumia uendelevu wa asili wa namba.

Tazama

Kuwa na taarifa zaidi kuhusu mfumo wa Number, tazama Mashirika ya JavaScript Number ya Kitabu cha Mifano.

Mfumo wa String

Mfumo wa String inaenea kama mawili wa mtiririko wa String wa asili, unatawala kama:

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

Methodzi za valueOf() na toString() ya mfumo wa String zinaonekana kuwa thamani za asili ya String:

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

Ikiwa inafanya kufanya kama kifo hiki, matokeo yake ni "true", ikiangazia kwamba thamani hizi zinaenea kweli.

Mawachicha:Mfumo wa String inaenea kama moja wa mazingira ya kusambaa ya ECMAScript. Kwa hivyo, maelezo ya sehemu hii ina uhusiano na matumizi ya kawaida ya String. Mafunzo ya kielezi ya juu wengi huzingatia maelezo ya kwenye kitabu hiki, au tazama Mashirika ya JavaScript String ya Kitabu cha Mifano.

Kiwango cha length

Mfumo wa String ina kiwango cha length, ambao ni kiasi cha heri katika mstari:

var oStringObject = new String("hello world");
alert(oStringObject.length);	//ichapisha "11"

Matokeo wa mivuno huu ni "11", iji kumekadiri heri za "hello world". Tafadhali tukubali, tena, inaingia heri yenye mabaki ya kifaa kina (kutokana na ASCII character zilizowakilisha kwa mbili ya byte, kwa lugha ya ASCII character zinaenea byte moja), kila heri inatokana na heri moja.

charAt() na charCodeAt() methodzi

Mfumo wa String ina wengi wa methodzi.

Kwanza, methodzi ya charAt() na charCodeAt() inaenda kwenye heri ya mstari. Kila methodu ina muarama mmoja, ambao ni eneo la heri lililotumika kwa kufungua heri yenye uhusiano.

charAt() methodu ina kuitwa heri kwenye mstari wa kichwa:

var oStringObject = new String("hello world");
alert(oStringObject.charAt(1));	//ichapisha heri ya "e"

Kwenye string "mwitu sana", character katika kiwango 1 ni "e". Kwenye sehemu ya "ECMAScript Original Type", nilikuchora kwamba kina wa kwanza ni kiwango 0, kina cha pili ni kiwango 1, na kwa sasa. Kwa sababu hii, kuingia charAt(1) inatuma "e".

Kama unataka kufaa character code, inaweza kutumia method ya charCodeAt():

var oStringObject = new String("hello world");
alert(oStringObject.charCodeAt(1));	// kuonyesha "101"

Mfano huu inaonyesha "101", ambao ni kina cha character cha "e" cha chaguo. Kwenye sehemu ya "ECMAScript Original Type", nilikuchora kwamba kina wa kwanza ni kiwango 0, kina cha pili ni kiwango 1, na kwa sasa. Kwa sababu hii, kuingia charAt(1) inatuma "e".

Method ya concat()

Kifo ni method ya concat(), inayotumia kuingia string moja au zaidi kwenye kina String kwa thamani ya asili. Method hii inatuma kina String kwa thamani ya asili, kumpatikana kina String huzungumza kama kina asili:

var oStringObject = new String("mwitu ");
var sResult = oStringObject.concat("world");
alert(sResult);		// kuonyesha "mwitu sana"
alert(oStringObject);	// kuonyesha "mwitu sana"

Kwenye chaguo hiki cha kiroho, matokeo wa method ya concat() ni "mwitu sana", na kina String kina huzungumza kwa "mwitu ". Kwa sababu hii, inaonekana kwamba inafaa kutumia jina la kuzingatia (plus sign, +) kuingia string, kwa sababu hii inaonyesha tabia ya kina huzungumza kwa hili mazingira:

var oStringObject = new String("mwitu ");
var sResult = oStringObject + "world";
alert(sResult);		// kuonyesha "mwitu sana"
alert(oStringObject);	// kuonyesha "mwitu sana"

Method ya indexOf() na lastIndexOf()

Kuzingatia hadi hivi, hatimaye nilikuchora method za kuingia string, kufaa character kwenye string. Nakutaka kumtumia method gani kama haikupatikana kufaa character kwenye string? Hili ni wakati unaweza kutumia method ya indexOf() na lastIndexOf().

Method ya indexOf() na lastIndexOf() zinaonyesha kiwango cha sehemu yenye kina string kwenye string mwingine, kama sehemu yenye kina haikupatikana, inatuma -1.

Funga kwa uwanja wengi, method ya indexOf() inaangalia string kutoka kwanza (kiwango cha 0) kufaa string, kamaanapo kufaa method ya lastIndexOf() inaangalia string kutoka mwisho. Mfano:

var oStringObject = new String("mwitu sana!");
alert(oStringObject.indexOf("o"));        Output "4"
alert(oStringObject.lastIndexOf("o"));    Output "7"

Hapa, herufi ya kwanza ya "o" inapatikana kwa nafasi 4, ni "hello" ya "o"; herufi ya kwanza ya "o" inapatikana kwa nafasi 7, ni "world" ya "o". Kama maneno yenye "o" moja tu, vifaa vya indexOf() na lastIndexOf() vinatoa nafasi zilizosikitisha.

Tabia ya localeCompare()

Kitu kina cha kifo ni localeCompare(), kwa kusoroka kwenye maneno. Hii tabia ina thamani moja - maneno ya kusikitisha, inatoa kati ya thamani zifuatavyo:

  • Kama String inayotumiwa inapangwa na maneno ya kudumu inayotumiwa kwenye thamani kwa haraka ya herufi, inatoa thamani ya kuzinduka.
  • Kama String inaelewa na maneno ya kudumu inayotumiwa kwenye thamani, inatoa thamani ya 0
  • Kama String inayotumiwa inapangwa na maneno ya kudumu na haraka ya herufi inayotumiwa kwenye thamani, inatoa thamani ya kubuni.

Mawachicha:Kama thamani inatoka na maneno ya kidogo, kwa kawaida inatoka na -1, lakini thamani inatolewa na kufanyika. Kama thamani inatoka na maneno ya kubwa, kwa kawaida inatoka na 1, lakini thamani inatolewa na kufanyika.

Mfano unaotokea hapa chini:

var oStringObject = new String("yellow");
alert(oStringObject.localeCompare("brick"));        // kutoa "1"
alert(oStringObject.localeCompare("yellow"));        // kutoa "0"
alert(oStringObject.localeCompare("zoo"));        // kutoa "-1"

Kwenye kipindi hiki, stringi "yellow" inapangwa na 3 thamani, ni "brick", "yellow" na "zoo". Kwa sababu inasirikana kwa haraka ya herufi, "yellow" iweza kuwa kisha ya "brick", kwa hivyo localeCompare() inapata 1; "yellow" inaelewa na "yellow", kwa hivyo localeCompare() inapata 0; "zoo" iweza kuwa kisha ya "yellow", localeCompare() inapata -1. Tukifuatia tena, kwa sababu thamani inatolewa na kufanyika, itakuwa bora kumtumia tabia ya localeCompare() kama inayotumika hapa chini:

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

Kwa sababu ya hii na struktura hii, inaonekana kwamba programu hii itakaribia kwa uwanja wa kina wote.

Kina za localeCompare() ni kwamba eneo la kufanyia kina (locale, kwa sababu ina maana ya nchi/kani na lugha) inaeleza kina hii kina hiki inaenda kwa sababu yake. Kwenye nchi ya Marekani, Kifalme kilichotengeneza cha ECMAScript ni lugha ya Kifaransa, localeCompare() inaeleza kina kwa kichwa cha kichwa, kichwa kikuu kinakumbuka kichwa kikia kwenye ukusoro wa kichwa. Kama inapokua katika eneo nyingine, hali inayobadilika.

slice() na substring()

ECMAScript ina vifaa mbili inayotengeneza thamani ya kishimo cha string, ni slice() na substring(). Vifaa hivi vya pili ni kwa kishimo cha string kinachotendeka, kwa sababu wana na thamani ya kishimo cha string kinachotendeka, kwa sababu wana kushiriki paramithi moja au mabini. Paramithi ya kwanza ina uwanja wa kwanza wa kishimo kinachotendeka, paramithi ya pili (kama inatumiwa) ina uwanja wa kutosha kwa kishimo kinachotendeka (ina maana kwamba uwanja wa kutosha haujafikia thamani ya kishimo kinachotendeka). Kama inapopunguzwa paramithi ya pili, uwanja wa kutosha ukiwa na thamani ya kufikia ukurasa wa string.

Kama pengineza kama mtu wa concat(), vifaa vya slice() na substring() haikuchangia thamani ya String kwa uwanja wa kina. Wana kuwa na thamani ya String ya asili, hatarini thamani ya String kwa uwanja wa kina.

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

Kwenye maelezo hii, uwanja wa slice() na substring() unaonekana kwa uwanja wa kina na kwa thamani zao. Kama tuwe na thamani 3, method mbili inapata "lo world", kwa sababu "l" ya pili ya "hello" inaonekana kwenye namba 3. Kama tunaweza na thamani 3 na 7, method mbili inapata "lo w" ("o" ya "world" inaonekana kwenye namba 7, kwa sababu haitakiwe kwenye matokeo).

Kwa nini tunaweza kuwa na method mbili zingine za kina na uwanja wa kina? Kwa hakika, method mbili huzungumza kwa uwanja wa kina, lakini tu kwa thamani za namba zingine, uwanja wa thamani wao huzungumza kwa kilele.

Kwa thamani za namba zingine, method ya slice() inatumiwa kwa ukurudisha namba ya uzito wa stringi na thamani, method ya substring() inatumiwa kama 0 (inaingia kwa sababu inaonyesha). Mfano:

var oStringObject = new String("hello world");
alert(oStringObject.slice("-3"));            // inapata "rld"
alert(oStringObject.substring("-3"));         // inapata "hello world"
alert(oStringObject.slice("3, -4"));         // inapata "lo w"
alert(oStringObject.substring("3, -4")); // inapata "hel"

Hii inavyoonekana kwa kilele kwa method za slice() na substring().

Kama tuwe na thamani -3 pepele, method ya slice() inaonyesha "rld", method ya substring() inaonyesha "hello world". Kwa sababu kwa stringi ya "hello world", substring("-3") inatumiwa kama substring("8"), na substring("-3") inatumiwa kama 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()

最后一套要讨论的方法涉及大小写转换。有 4 种方法用于执行大小写转换,即

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

从名字上可以看出它们的用途,前两种方法用于把字符串转换成全小写的,后两种方法用于把字符串转换成全大写的。

toLowerCase() na toUpperCase() method ni asili, zilizochukuliwa kama modeli ya method za java.lang.String.

toLocaleLowerCase() na toLocaleUpperCase() method zinaelewa kwa sababu ya eneo lenyeji (kama ni kwenye method ya localeCompare()). Kwenye eneo lenyeji kubwa, method zilizochukuliwa kwa eneo lenyeji zinaonekana zilizosimulia kwa ujumbe wa kawaida. Hata hivyo, kuna lugha zingine inayotumia misingi wa kawaida za kubadilisha kubukii na kubadilisha kubukii kwa nia zokelewa (kama kwa lugha ya Turkana), kwa hiyo inahitajika kusoma method zilizochukuliwa kwa eneo lenyeji kwa kubadilisha kwa mafanikio ya kawaida.

var oStringObject = new String("Hello World");
alert(oStringObject.toLocaleUpperCase()); // muona kufaa "HELLO WORLD"
alert(oStringObject.toUpperCase()); // muona kufaa "HELLO WORLD"
alert(oStringObject.toLocaleLowerCase()); // muona kufaa "hello world"
alert(oStringObject.toLowerCase());		//输出 "hello world"

这段代码中,toUpperCase() 和 toLocaleUpperCase() 输出的都是 "HELLO WORLD",toLowerCase() 和 toLocaleLowerCase() 输出的都是 "hello world"。一般来说,如果不知道在以哪种编码运行一种语言,则使用区域特定的方法比较安全。

Mtaarifu:Rimeweka kwamba mafanikio ya Mashirika ya String yote na vifaa yoyote inayotumiwa kwa thamani ya asili ya String, kwa sababu wana ujumbe wa kina wa matokeo.

Mbinu ya instanceof

Kutumia mbinu typeof kwa kubadilika aina ya matokeo inakuta matatizo, kwa sababu wengine hupenda kila aina ya matokeo, hupenda kubadilika kama "object". ECMAScript imewaamua mbinu mengine wa Java kwamba instanceof inaeleza huzuni.

Mbinu ya instanceof inaingia kama mtu kama kufaa kwenda typeof, inatumia kutoa aina ya matokeo ambao inatumiwa. Kwenye matokeo tofauti kama typeof, mbinu hii ya instanceof inahitaji mwanachama kuwa na ujumbe wa kina wa aina ya matokeo. Kwa mfano:

var oStringObject = new String("hello world");
alert(oStringObject instanceof String);	//Kutoa "true"

Mawendo huo una kuwa “Ni matokeo ya oStringObject inaingia kwa kina ya Mashirika ya String?” oStringObject ni matokeo wa Mashirika ya String, kwa hiyo matokeo ni "true". Ingawa haujashahidi kama ukweli wa mtu kama kufaa kwenda typeof, mbinu hii ya instanceof inaathiriwa sana wakati typeof inatoa "object".