ECMAScript Unary Operators
- Nakaraang Pahina ECMAScript Reference Types
- Susunod na Pahina Bitwise Operator
一元运算符只有一个参数,即要操作的对象或值。它们是 ECMAScript 中最简单的运算符。
delete
delete 运算符删除对以前定义的对象属性或方法的引用。例如:
var o = new Object; o.name = "David"; alert(o.name); //输出 "David" delete o.name; alert(o.name); //Ipapakita ang "undefined"
Sa halimbawa, ang pagtanggal ng attribute na name ay nangangahulugan na pagpapawalang-bisa ng reference dito, na ito ay itataas sa undefined (kaugnay ng halaga ng hindi inisiyal na variable).
Ang operator na delete ay hindi puwedeng alisin ang mga attribute at method na hindi dinisenyo ng developer. Halimbawa, ang sumusunod na code ay magiging error:
delete o.toString;
Kahit na ang toString ay isang validong pangalan ng method, ang linya ng code na ito ay magiging error, dahil ang toString() ay isang orihinal na ECMAScript method, hindi ito ay dinisenyo ng developer.
void
Ang operator na void ay bumabalik ng undefined sa anumang halaga. Ang operator na ito ay karaniwang ginagamit upang maiwasan ang pagbubuo ng mga hindi dapat ipapakita na halaga, halimbawa, kapag tinatawag ang JavaScript function mula sa HTML na <a> element. Upang tama itong gawin, ang function ay hindi dapat magbalik ng validong halaga, kung hindi ay maglilinis ang browser ang pahina at ipapakita lamang ang resulta ng function. Halimbawa:
<a href="javascript:window.open('about:blank')">Klik ako</a>
Kung ilagay ang linya ng code na ito sa HTML na pahina, kapag itinitik ang link, makikita mo ang "[object]" na ipapakita sa screen.TIY
Ito ay dahil ang method na window.open() ay nagbibigay ng reperensya ng bagong binuksang window. Pagkatapos, ang object na iyon ay gagawing string na ipapakita.
Upang maiwasan ang ganitong epekto, gamitin ang operator na void sa pagtawag ng function na window.open():
<a href="javascript:void(window.open('about:blank'))">Klik ako</a>
Ito ay nagiging undefined ang pagtawag ng window.open(), ito ay hindi isang validong halaga, hindi na ito ay ipapakita sa window ng browser.
Mga tip:Tandaan, ang tunay na bumabalik ng walang halaga ng function ay lahat ay undefined.
Pre-increment/Pre-decrement operator
Dalawang operator na hinangyari mula sa C (at Java) ay ang pre-increment at pre-decrement operator.
Ang pre-increment operator ay ang pagdagdag ng 1 sa halaga, sa anyo ng dalawang dagdag sa harap ng variable (++):
var iNum = 10; ++iNum;
Ang ikalawang linya ng code ay nagdagdag ng halaga ng iNum hanggang 11, ito ay ekwivalent sa:
var iNum = 10; iNum = iNum + 1;
Kapag pinapakita din ang pre-decrement operator, ito ay nagbawas ng 1 sa halaga, sa anyo ng dalawang bawas sa harap ng variable (--):
var iNum = 10; --iNum;
Sa halimbawa, ang ikalawang linya ng code ay nagbawas ng halaga ng iNum hanggang 9.
Sa paggamit ng prefix operator, pagsisikapin na ang mga operador ng pagdagdag at pagbawas ay nangyayari bago ang pagkalkula ng ekspresyon. Isipin ang sumusunod na halimbawa:
var iNum = 10; --iNum; alert(iNum); //输出 "9" alert(--iNum); //输出 "8" alert(iNum); //输出 "8"
Ang ikalawang linya ng code ay gumagamit ng post-decrement operation sa iNum, ang ikatlong linya ng code ay nagpapakita ng resulta ("9"). Ang pang-apat na linya ng code ay muli gumagamit ng post-decrement operation sa iNum, ngunit sa pagkakataong ito, ang pre-decrement operation at ang pagpapasalita ay nasa parehong statement, na nagpapakita ng resulta na "8". Upang patunayan na lahat ng post-decrement operation ay naganap, muli itong ipinapakita ng panglimang linya ng code ang "8".
Sa aritmetikong ekspresyon, ang prioridad ng pre-increment at pre-decrement na operator ay magkapareho, kaya dapat ito ay kalkulahin ayon sa pagkakaroon ng maliit na baryo mula sa kaliwa papunta sa kanan. Halimbawa:
var iNum1 = 2; var iNum2 = 20; var iNum3 = --iNum1 + ++iNum2; //等于 "22" var iNum4 = iNum1 + iNum2; //等于 "22"
Sa nakaraang code, ang iNum3 ay 22, dahil ang ekspresyon na kailangan kalkulahin ay 1 + 21. Ang variable na iNum4 ay 22 din, din 1 + 21.
Post-increment/Post-decrement operator
Mayroon pang dalawang direktang kinuha mula sa C (at Java) na operator, na ang post-increment at post-decrement operator.
Ang post-increment operator ay nagdagdag ng 1 sa halaga, na may hugis na dalawang maliit na plus sign (++) sa likod ng variable:
var iNum = 10; iNum++;
Bilang inaasahan, ang post-decrement operator ay nagbawas ng 1 mula sa halaga, na may hugis na dalawang maliit na minus sign (--) sa likod ng variable:
var iNum = 10; iNum--;
Ang ikalawang linya ng code ay nagbawas ng halaga ng iNum ng 9.
Hindi katulad ng prefix na operator, ang postfix na operator ay nangyayari pagkatapos ng pagkalkula ng ekspresyon na naglalaman nito, bago ang pag-increment o post-decrement operation. Isasaalang-alang ang sumusunod na halimbawa:
var iNum = 10; iNum--; alert(iNum); //输出 "9" alert(iNum--); //输出 "9" alert(iNum); //输出 "8"
Kasama ng mga halimbawa ng prefix na operator, ang ikalawang linya ng code ay gumagamit ng post-decrement operation sa iNum, ang ikatlong linya ng code ay nagpapakita ng resulta ("9"). Ang pang-apat na linya ng code ay patuloy na nagpapakita ng halaga ng iNum, ngunit sa pagkakataong ito, ang post-decrement operator ay ginagamit sa parehong statement. Dahil ang post-decrement operation ay nangyayari pagkatapos ng pagkalkula ng ekspresyon, ang halaga na ipinapakita ng statement na ito ay "9". Pagkatapos ng pagpapatupad ng ikalimang linya ng code, ipinapakita ng alert function ang "8", dahil sa pagitan ng pagpapatupad ng pang-apat na at ikalimang linya ng code, nangyayari ang post-decrement operation.
Sa aritmetikong ekspresyon, ang prioridad ng post-increment at post-decrement na operator ay magkapareho, kaya dapat ito ay kalkulahin ayon sa pagkakaroon ng maliit na baryo mula sa kaliwa papunta sa kanan. Halimbawa:
var iNum1 = 2; var iNum2 = 20; var iNum3 = iNum1-- + iNum2++; //等于 "22" var iNum4 = iNum1 + iNum2; //等于 "22"
Sa nakaraang kodigo, ang iNum3 ay katumbas ng 22, dahil ang ekspresyon ay dapat makalkula ng 2 + 20. Ang iNum4 ay katumbas ng 22 din, ngunit ito ay nakalkula ng 1 + 21, dahil ang operasyon ng pagdagdag at pagbawas ay nangyari pagkatapos ng pagtatalaga sa iNum3.
Isang-salitang pagdagdag at pagbawas
Karamihan sa lahat ay nakikilala ang isang-salitang pagdagdag at pagbawas, ang kanilang paggamit sa ECMAScript ay katulad ng paggamit na natututuhan ninyo sa matematika sa sekondarya.
Ang isang-salitang pagdagdag ay walang epekto sa numero sa kabilang banda:
var iNum = 20; iNum = +iNum; alert(iNum); // maglathala "20"
Ang kodigo na ito ay nag-aplay sa numero 20 ng isang-salitang pagdagdag na operator, at ang halaga na ibabalik ay 20.
Bagaman walang epekto ang isang-salitang pagdagdag na operator sa numero, ito ay may maganda na epekto sa string, at ito ay magbabagong string na numero.
var sNum = "20"; alert(typeof sNum); // maglathala "string" var iNum = +sNum; alert(typeof iNum); // maglathala "number"
Ang kodigo na ito ay magbabagong string na "20" sa tunay na numero. Kapag ang isang-salitang pagdagdag na operator ay magiging kasama sa string, ito ay magtatala ng string katulad ng parseInt(), ang pangunahing pagkakaiba ay ito ay maaring baguhing ang string na nagsisimula sa "0x" (nangangahulugan ng numero sa heksadecimal), ang isang-salitang operator ay maaring baguhing ito sa halaga sa decimal. Kaya, kapag ginagamit ang isang-salitang pagdagdag na operator upang baguhing "010", ang halaga na haharapin ay palaging 10, at "0xB" ay baguhing 11.
Sa kabilang banda, ang isang-salitang pagbawas ay ang pagiging negatibo ng numero (halimbawa, pagbaguhing 20 sa -20):
var iNum = 20; iNum = -iNum; alert(iNum); // maglathala "-20"
Katulad ng isang-salitang pagdagdag na operator, ang isang-salitang pagbawas na operator ay magbabagong string na malapit sa numero, at ito ay magiging negatibo din sa halaga. Halimbawa:
var sNum = "20"; alert(typeof sNum); // maglathala "string" var iNum = -sNum; alert(iNum); // maglathala "-20" alert(typeof iNum); // maglathala "number"
Sa itaas na kodigo, ang isang-salitang pagbawas na operator ay magbabagong string na "-20" sa -20 (ang paraan ng isang-salitang pagbawas na operator sa paghawak ng hexadecimal at decimal ay katulad ng isang-salitang pagdagdag na operator, ngunit ito ay magiging negatibo din sa halaga).
- Nakaraang Pahina ECMAScript Reference Types
- Susunod na Pahina Bitwise Operator