(A == 1 && a == 2 && a == 3) කවදා හෝ සත්‍ය ලෙස තක්සේරු කළ හැකිද?


2486

උපපරිපාලක සටහන: කරුණාකර කේතය සංස්කරණය කිරීමට හෝ මෙම දැන්වීම ඉවත් කිරීමට ඇති පෙලඹීමට එරෙහි වන්න. හිස් අවකාශයේ රටාව ප්‍රශ්නයේ කොටසක් විය හැකි අතර එම නිසා අනවශ්‍ය ලෙස එය අවුල් නොකළ යුතුය. ඔබ "සුදු අවකාශය නොවැදගත්" කඳවුරක සිටී නම්, ඔබට කේතය පිළිගැනීමට හැකි විය යුතුය.

ජාවාස්ක්‍රිප්ට් තුළ (a== 1 && a ==2 && a==3)තක්සේරු කළ හැකි කවදා හෝ කළ trueහැකිද?

මෙය ප්‍රධාන තාක්ෂණික සමාගමක් ඇසූ සම්මුඛ පරීක්ෂණ ප්‍රශ්නයකි. එය සිදුවී සති දෙකකට පෙර, නමුත් මම තවමත් පිළිතුර සොයා ගැනීමට උත්සාහ කරමි. අපගේ එදිනෙදා රැකියාවේදී අපි කිසි විටෙකත් එවැනි කේතයක් ලියන්නේ නැති බව මම දනිමි, නමුත් මට කුතුහලයක් ඇත.


9
අදහස් දීර් discussion සාකච්ඡාවක් සඳහා නොවේ; මෙම සංවාදය චැට් කිරීමට ගෙන ගොස් ඇත .
රැවටීම

109
පෙනෙන ආකාරයට මෙය ඉතා පුළුල් ලෙස ආවරණය කිරීමට ඡන්දය දුන් ජනතාවට : වලංගු පිළිතුරු ඕනෑ තරම් ඇති බව පවසමින් ජාවාස්ක්‍රිප්ට් හාරා බැලීමක්ද ?
ටොම්ස්මිං කිරීම

24
සමහර අය කළ හැකි දේ ගැන දාර්ශනිකව වාඩි වී සිටිති. තවත් සමහරු තම සේවාදායකයින් සඳහා ශක්‍ය, ව්‍යාපාර නිවැරදි නිෂ්පාදන ගොඩනඟන්නේද නැද්ද යන්න පිළිබඳව ඔවුන්ගේ උත්සාහයන් යොමු කරති. IMO, සම්මුඛ පරීක්ෂණයකදී ඔබ කිසි විටෙකත් මෙවැනි ප්‍රශ්න ඇසීමට හෝ මේ ආකාරයේ කේතයක් ලිවීමට වඩා ඔබ්බට මෙම ප්‍රශ්නයට ප්‍රායෝගික උපයෝගීතාවයක් නොමැත. එය වසා දැමිය යුත්තේ එබැවිනි. මම කිව්වේ ඇත්තටම, මේ දේවල් ගැන කතා කිරීමට ඔවුන් යම් කෙනෙකුට සැබෑ මුදල් ගෙවා ඇති බව ව්‍යාපාරයට වැටහෙනවාද?
පී. බ්‍රයන්.මැකී

15
පිළිතුරු කියවීමෙන් පසු, කතාවේ සදාචාරය නම්: ==ඔබ අදහස් කරන විට භාවිතා නොකරන්න ===, ASCII නොවන විචල්‍ය නම් තහනම් කරන කේතීකරණ ප්‍රමිතියක් සහ පෙර සදාචාරයන් දෙක ක්‍රියාත්මක කරන ලින්ටින් ක්‍රියාවලියක් තිබිය යුතුය.
ජෙසී සී. ස්ලයිසර්

87
Moderator note: Stack Overflow හි විවිධ භාෂාවලින් පිළිතුරු සපයන පුද්ගලයින්ට ඉතිහාසයක් ඇත. මෙම වන පරිදි එය විවිධ භාෂාවන් තුල වුවත්, ඔවුන් සාමාන්ය ගැටලුව සඳහා විසඳුම් නිසා ඒ සඳහා පිළිතුරු දීමට උත්සාහ. කරුණාකර ඒවා "පිළිතුරක් නොවේ" යනුවෙන් සලකුණු කිරීමෙන් වළකින්න. එසේ පැවසීමෙන් පසු කරුණාකර විවිධ භාෂාවලින් තවත් පිළිතුරු පළ කිරීමෙන් වළකින්න - මෙම ප්‍රශ්නය ජාවාස්ක්‍රිප්ට් සඳහා විශේෂිත වීමට හේතුවක් තිබේ, මෙම වෙනත් පිළිතුරු කිහිපයක් යටතේ අදහස් දැක්වීමෙන් පෙන්වා දී ඇති අතර, අපගේ භාෂා විශේෂිත ප්‍රශ්න වලට අප කැමති වීමට හේතුවක් තිබේ එසේ සිටීමට.
බෝල්ට් ක්ලොක්

Answers:


3326

ඔබ ප්රයෝජන ගන්න නම් කොහොමද ==වැඩ , ඔබ හුදෙක් චාරිත්රයක් සහිත වස්තුවක්, නිර්මාණය කළ හැක toString(හෝ valueOfඑය එවැනි එය යෝග්යභාවය කොන්දේසි තුනක් බව භාවිතා එක් එක් කාල නැවත දේ වෙනස් කළ හැකි) යන ශ්රිතය.

const a = {
  i: 1,
  toString: function () {
    return a.i++;
  }
}

if(a == 1 && a == 2 && a == 3) {
  console.log('Hello World!');
}


මෙය ක්‍රියාත්මක වීමට හේතුව ලිහිල් සමානාත්මතා ක්‍රියාකරු භාවිතා කිරීමයි. ලිහිල් සමානාත්මතාවය භාවිතා කරන විට, එක් ඔපෙරන්ඩ් එකක් අනෙකට වඩා වෙනස් ආකාරයේ නම්, එන්ජිම එකක් අනෙකට පරිවර්තනය කිරීමට උත්සාහ කරයි. වම්පස වස්තුවක් සහ දකුණු පසින් අංකයක් ඇති විට valueOf, එය ඇමතිය හැකි නම් පළමුව ඇමතීමෙන් වස්තුව අංකයක් බවට පරිවර්තනය කිරීමට උත්සාහ කරනු ඇති අතර එය අසමත් වුවහොත් එය අමතනු toStringඇත. මම toStringමේ අවස්ථාවේ දී භාවිතා කළේ එය මතකයට පැමිණි නිසා, valueOfවඩාත් අර්ථවත් වනු ඇත. මම ඒ වෙනුවට නූලක් ආපසු ලබා දුන්නොත් toString, එන්ජිම තරමක් දිගු මාවතක් තිබුණද, අපට එම අවසාන ප්‍රති result ලය ලබා දෙන අංකයක් බවට පරිවර්තනය කිරීමට උත්සාහ කරනු ඇත.


71
ගම්‍ය වන valueOf()මෙහෙයුම වෙනස් කිරීමෙන් ඔබට මෙය සාක්ෂාත් කරගත හැකිද ?
ස්ටර්ලින් ආචර්

44
ඔව්, එකම හේතුව නිසා toString වෙනුවට valueOf ක්‍රියා කරයි
කෙවින් බී

4
අදහස් දීර් discussion සාකච්ඡාවක් සඳහා නොවේ; මෙම සංවාදය චැට් කිරීමට ගෙන ගොස් ඇත .
රැවටීම

13
අනුව මෙම ගණනාවක් පරිවර්තනය මුලින් උත්සාහ කරනු ඇත valueOfතරමක් හොඳයි.
සල්මාන් ඒ

6
Ual සමානාත්මතාවයේ සැසඳීමේ වම්පස පිරිසිදු කරන්න වස්තුවක් මිස සංඛ්‍යාවක් නොවේ. එම වස්තුවට සංඛ්‍යා දේපලක් ඇති iබැවින් එන්ජිමට කරදරයක් නොවේ. ;)
tomsmeding

2057

මට විරුද්ධ විය නොහැක - අනෙක් පිළිතුරු නිසැකවම සත්‍ය ය, නමුත් ඔබට ඇත්ත වශයෙන්ම පහත කේතය පසුකර යා නොහැක:

var a = 1;
var a = 2;
var a = 3;
if(aᅠ==1 && a== 2 &&ᅠa==3) {
    console.log("Why hello there!")
}

ifප්‍රකාශයේ ඇති අමුතු පරතරය සැලකිල්ලට ගන්න (මම ඔබේ ප්‍රශ්නයෙන් පිටපත් කළෙමි). එය අර්ධ පළල හන්ගුල් (එය හුරුපුරුදු නොවන අයට කොරියානු ය) යුනිකෝඩ් අභ්‍යවකාශ අක්ෂරයක් වන අතර එය ECMA ස්ක්‍රිප්ට් මගින් අභ්‍යවකාශ චරිතයක් ලෙස අර්ථ නිරූපණය නොකෙරේ - මෙයින් අදහස් කරන්නේ එය හඳුනාගැනීමක් සඳහා වලංගු චරිතයක් බවයි. එබැවින් සම්පූර්ණයෙන්ම වෙනස් විචල්‍යයන් තුනක් ඇත, එකක් a ට පසු හන්ගුල් සමඟ, එකක් ඊට පෙර සහ අවසාන එක a සමඟ. _කියවීමේ හැකියාව සඳහා අවකාශය ප්‍රතිස්ථාපනය කිරීම , එකම කේතය මේ ආකාරයට පෙනේ:

var a_ = 1;
var a = 2;
var _a = 3;
if(a_==1 && a== 2 &&_a==3) {
    console.log("Why hello there!")
}

මතියස්ගේ විචල්‍ය නාම වලංගුකරණයේ වලංගුභාවය පරීක්ෂා කරන්න . එම අමුතු පරතරය සැබවින්ම ඔවුන්ගේ ප්‍රශ්නයට ඇතුළත් කර ඇත්නම්, එය මේ ආකාරයේ පිළිතුරක් සඳහා ඉඟියක් බව මට විශ්වාසයි.

මෙය නොකරන්න. බරපතල ලෙස.

සංස්කරණය කරන්න: (විචල්‍යයක් ආරම්භ කිරීමට අවසර නැතත්) ශුන්‍ය-පළල සම්බන්ධකය සහ ශුන්‍ය පළල සම්බන්ධ නොවන අක්ෂර ද විචල්‍ය නම් වලින් අවසර දී ඇති බව මගේ අවධානයට යොමු වී ඇත - ශුන්‍ය පළල අක්ෂර සහිත ජාවාස්ක්‍රිප්ට් අවුල් කිරීම බලන්න - වාසි සහ අවාසි ? .

මෙය පහත පරිදි වේ:

var a= 1;
var a‍= 2; //one zero-width character
var a‍‍= 3; //two zero-width characters (or you can use the other one)
if(a==1&&a‍==2&&a‍‍==3) {
    console.log("Why hello there!")
}


368
මුල් ප්‍රශ්නයේ ඇති අමුතු පරතරය අනුව විනිශ්චය කිරීම, සම්මුඛ පරීක්ෂණ ප්‍රශ්නය සොයන පිළිතුර මෙයයි - අවකාශයන් මෙන් පෙනෙන අභ්‍යවකාශ නොවන අක්ෂර සූරාකෑම. හොඳ තැනක්!
බරකස්

18
Ara බරකස් කෙවින්ගේ පිළිතුර පිළිබඳ ඔහුගේ අදහස් දැක්වීමේ අමුතු පරතරය දුටුවේ රොන් ජෝන් ය. මෙම (භයානක) තාක්‍ෂණය මට මතක් විය, එබැවින් එය හඳුනා ගැනීම ගැන මට ගෞරවය ලබා ගත නොහැක. මීට වසර කිහිපයකට පෙර කොහේ හෝ තැනක බ්ලොග් සටහනක් නිසා මගේ වැඩකටයුතු වටා යද්දී කිසිවෙකු මේ වන විටත් පිළිතුරු ලබා නොතිබීම ගැන මම පුදුමයට පත් වීමි - මම හිතන්නේ එය මේ වන විට සාමාන්‍ය දැනුමක් බවයි.
ජෙෆ්

102
ඇත්ත වශයෙන්ම, මෙය සම්මත ලිහිල් සිදුරක් ලෙස තහනම් කර ඇති අතර එය සම්මුඛ සාකච්ඡා සඳහා ද අදාළ වේ. [උපුටා දැක්වීම අවශ්‍යයි]
සැන්චයිසස්

13
මුල් පරතරය සලකා බැලීමේදී එය ඊටත් වඩා නරක විය හැකිය, එනම් විචල්‍යයක් var ᅠ2 = 3භාවිතා කර ඇත; එබැවින් විචල්යයන් තුන ඇත aᅠᅠ= 1, ᅠ2 = 3, a = 3( a␣ = 1, ␣2 = 3, a = 3, එසේ (a␣==1 && a==␣2 && a==3))…
හොල්ගර්

2
@ AL-zami විචල්යයන් දෙකක අතිරේක අක්ෂරයක් ඇත, එය ඔබේ තිරය මත අවකාශයක් ලෙස පෙන්වයි, නමුත් එය හඳුනාගැනීමේ කොටසක් ලෙස අර්ථ දැක්වේ, එනම් වෙනම විචල්යයන් තුනක් ඇත - a, a සහ a - අතිරේක අක්‍ෂරය හන්ගුල් අර්ධ පළල අවකාශය.
ජෙෆ්

620

එය කළ හැකි ය!

var i = 0;

with({
  get a() {
    return ++i;
  }
}) {
  if (a == 1 && a == 2 && a == 3)
    console.log("wohoo");
}

මෙය විවිධ අගයන් තුනකට ඇගයීමට withඉඩ දීම සඳහා ප්‍රකාශයක් ඇතුළත ලබා ගන්නෙකු භාවිතා කරයි a.

... මෙය තවමත් සැබෑ කේතයේ භාවිතා කළ යුතු යැයි අදහස් නොකෙරේ ...

ඊටත් වඩා භයානක දෙය නම්, මෙම උපක්‍රමය භාවිතය සමඟ ද ක්‍රියා කරනු ඇත ===.

  var i = 0;

  with({
    get a() {
      return ++i;
    }
  }) {
    if (a !== a)
      console.log("yep, this is printed.");
  }


65
ඔව්, මම උත්සාහ කළේ එකම දෙයකි :) එබැවින් සම්මුඛ පරීක්ෂණයේ නිවැරදි පිළිතුර වනුයේ, " මම කිසි විටෙකත් භාවිතා නොකරන නිසා එය මගේ කේතයේ සිදුවිය නොහැක with."
පොයින්ටි

7
පොයින්ටි - තවද, මම withඅවසර නොදෙන දැඩි ක්‍රමයකින් වැඩසටහන් කරමි .
jfriend00

6
The පිළිගත් පිළිතුරේ පොයින්ටි ඔවුන් එසේ නොකර withඑය සමාන දෙයක් කරයි
ජුන්ග්කුක්

2
කිසිවෙකු භාවිතා නොකරනු ඇත ==. හා ===ලොව පිළිගත් පිළිතුර වළක්වයි
Jonas Wilms

4
On ජොනාස් ඩබ්ලිව්. බොහෝ අය තවමත් භාවිතා කරන ==නමුත් මම withඑතැන් සිට දැක නැත ... ඇත්ත වශයෙන්ම ජේඑස් ප්‍රලේඛනයෙන් පිටත කිසි විටෙකත් "කරුණාකර එය භාවිතා නොකරන්න" යනුවෙන් එහි සඳහන් වේ. කෙසේ වෙතත්, හොඳ විසඳුමක්.
වර්ට්වාර්ට්

517

ලබා ගන්නන් හෝ අගය රහිත උදාහරණය:

a = [1,2,3];
a.join = a.shift;
console.log(a == 1 && a == 2 && a == 3);

මෙය ක්‍රියාත්මක වන්නේ ==අරාව ඉල්ලා toStringසිටින ආයාචනා නිසාය .join.

Symbol.toPrimitiveඊඑස් 6 ට සමාන තවත් විසඳුමක් toString/valueOf:

let i = 0;
let a = { [Symbol.toPrimitive]: () => ++i };

console.log(a == 1 && a == 2 && a == 3);


9
without valueOf, හොඳයි ... එහි වඩා වක්‍ර නමුත් මූලික වශයෙන් එකම දෙයයි.
ජොනස් විල්ම්ස්

11
මම මෙම විසඳුමට සැබවින්ම කැමතියි, නමුත් ඔබ කිසිවක් ඉක්මවා නොයන නමුත් වස්තූන්ගේම ක්‍රියාකාරිත්වයේ ක්‍රියාකාරිත්වය වන අතර, එය ඉතා පිරිසිදු හා පහසුවෙන් කියවිය හැකි හැක් එකක් වන අතර එමඟින් තර්කනය සත්‍ය ලෙස තක්සේරු කරයි.
ඇලෙක්ස් පෙඩර්සන්

28
අවංකවම මම හිතන්නේ මෙය හොඳම පිළිතුරයි. එයට සාමාන්‍යයෙන් කිසිවක් ඇතුළත් නොවේ, සාරධර්ම කිහිපයක් සැකසීම. මූලික JS දැනුමෙන් පවා තේරුම් ගැනීම ඉතා පහසුය. හොඳට කලා.
සැක් ඩෙල්වෙන්තල්

14
මෙය බොහෝ සෙයින් ප්‍රයෝජනවත් යැයි හැඟේ.
ඇන්ඩෲ

7
මම බොහෝ පිළිතුරු අතවර ගැන වනු දැන toStringහෝ valueOfනොව සම්පූර්ණයෙන්ම ආරක්ෂක පිටතට මේ එක මා අල්ලා. ඉතා දක්ෂ වන අතර එය .joinඅභ්‍යන්තරව ඇමතුමක් ගත් බව මා දැන සිටියේ නැත , නමුත් එය සම්පුර්ණයෙන්ම අර්ථවත් කරයි.
GBarroso

268

එය කළ හැකි දැයි විමසන්නේ නම් (MUST නොවේ), එයට අහඹු අංකයක් ආපසු ලබා දීමට "a" ඉල්ලා සිටිය හැකිය. එය අනුපිළිවෙලින් 1, 2 සහ 3 ජනනය කරන්නේ නම් එය සත්‍ය වේ.

with({
  get a() {
    return Math.floor(Math.random()*4);
  }
}){
  for(var i=0;i<1000;i++){
    if (a == 1 && a == 2 && a == 3){
      console.log("after " + (i+1) + " trials, it becomes true finally!!!");
      break;
    }
  }
}


102
මම වෙනත් විසඳුම් දැන සිටියත් මම හිතාමතාම මෙම පිළිතුර ලබා දෙමි, මන්ද එය ප්‍රශ්නයට පිළිතුරු සපයන නමුත් පැහැදිලිවම ඒවා පසුව ඇති දේ නොවේ. මෝඩ ක්‍රීඩා කරන්න, මෝඩ ත්‍යාග දිනා ගන්න.
ඊඑස්ආර්

2
අත්හදා බැලීම් 1000 කට වඩා ගත වුවහොත් කුමක් කළ යුතුද?
පියින්

9
Ipiyin අත්හදා බැලීම් 1000 කට වඩා ගත වුවහොත් ඔබ ත්‍යාගයක් දිනා ගනී!
ස්කීට්ස්

5
මම මේ පිළිතුර වැනි අන්ත කරා එය රැගෙන මෙම හැකි බව යෝජනා නිසා ඕනෑම භාෂාවක් එය cpu ගේ ලේඛන / වැඩසටහන ධාවනය වන අතර, අවශ්ය තරම් කොස්මික් කිරණ සමග පහර ලබා හැඹිලි නම්, හෝ එක් හිතාමතාම එවැනි අසාර්ථක ශාඛා බව විදුලි glitch සිදු නම් කොන්දේසි සහිත නම් ඇත්ත වශයෙන්ම පනින්නේ නැත.
පොන්කඩූඩ්ල්

අඩුම: 1, වැඩිම: 412.
කයිල් ෆෙයාර්න්ස්

211

සාමාන්‍ය ප්‍රකාශන නොමැතිව ඔබට කිසිවක් කළ නොහැකි විට:

var a = {
  r: /\d/g, 
  valueOf: function(){
    return this.r.exec(123)[0]
  }
}

if (a == 1 && a == 2 && a == 3) {
    console.log("!")
}

එය ක්‍රියාත්මක වන්නේ valueOfප්‍රාථමික (අංකය වැනි) සමඟ සසඳන විට වස්තුව හැඳින්වෙන අභිරුචි ක්‍රමය නිසා ය . ප්‍රධාන උපක්‍රමය නම් a.valueOfසෑම විටම නව අගයක් ලබා දෙන්නේ එය ධජය execසමඟ නිත්‍ය ප්‍රකාශනය ඉල්ලා සිටින නිසාය . එබැවින් පළමු වරට එය ගැලපෙන අතර යාවත්කාලීන වේ : එබැවින් ඊළඟ වතාවේ රීජෙක්ස් ගැලපෙනු ඇත .glastIndexthis.r.lastIndex == 01lastIndexthis.r.lastIndex == 12


22
B අබ්ඩිල්ලා රිජෙක්ස් වස්තුවක් එය ගැලපෙන අවසාන දර්ශකය මතක තබා execගනී , නැවත අමතන්න එම දර්ශකයෙන් සෙවීම ආරම්භ කරයි. MDN ඉතා පැහැදිලි නැත.
සයිමන් චෑන්

මට පෙනේ, එබැවින් this.rරීජෙක්ස් වස්තුව රාජ්‍ය / දර්ශකය මතක තබා ගනී. ස්තූතියි!
අබ්දුල්ලා

මම නිර්දේශ කරන්නේ නූල් සම්මත කිරීමට execනොව පූර්ණ සංඛ්‍යාවක් නොවේ.
බර්ගි

regex භාවිතා කරන්න, දැන් ඔබට ගැටළු දෙකක් තිබේ
ඇලෙක්සි සොලොවි

191

ගෝලීය විෂය පථයේ පහත සඳහන් දෑ භාවිතා කර එය ඉටු කළ හැකිය. පහත කේතය වෙනුවට nodejsභාවිතය සඳහා .globalwindow

var val = 0;
Object.defineProperty(window, 'a', {
  get: function() {
    return ++val;
  }
});
if (a == 1 && a == 2 && a == 3) {
  console.log('yay');
}

මෙම පිළිතුර ක්‍රියාත්මක කිරීමේ සන්දර්භය තුළ ගෝලීය විෂය පථය විසින් සපයන ලද ව්‍යංග විචල්‍යයන් අනිසි ලෙස භාවිතා කරයි.


මෙය උපකල්පනය කරන්නේ එය නොපෙනෙන aදේපලකි this. නම් a(එය වගේ වන) දේශීය විචල්ය විය, පසුව මෙම වැඩ නැහැ.
jfriend00

1
var jfriend00 ඔබ අදහස් කළේ ඔබ var a තැබුවහොත්; කොහේ හරි?
jontro

ඔව්. යොමු කිරීම a == 1යන්නෙන් ගම්‍ය aවන්නේ කොතැනක හෝ විචල්‍යයක් මිස දේපලක් නොවේ this. දෙකම සත්‍ය විය හැකි ගෝලීය වැනි අමුතු බෝල ස්ථානයක් ඇති අතර, සාමාන්‍යයෙන් විචල්‍යයක් ප්‍රකාශ කිරීම var aහෝ let aඑයින් අදහස් වන්නේ ඔබ කේත උපකල්පනය කරන දේපලක් ලෙස දේපලක් ලෙස thisප්‍රවේශ වීමට ඉඩ නොදෙන බවයි a. ඉතින්, ඔබේ කේතය පෙනෙන ආකාරයට අමුතු ගෝලීය විචල්‍ය දෙයක් උපකල්පනය කරයි. උදාහරණයක් ලෙස, ඔබේ කේතය node.js හි ක්‍රියා නොකරන අතර ශ්‍රිතයක් තුළ දැඩි ප්‍රකාරයේදී නොවේ. එය ක්‍රියාත්මක වන නිශ්චිත තත්වයන් ඔබ විසින් නියම කළ යුතු අතර එය ක්‍රියාත්මක වන්නේ ඇයිද යන්න පැහැදිලි කළ යුතුය. එසේ නොමැතිනම් එය නොමඟ යවන සුළුය.
jfriend00

friend jfriend00 හොඳින් විශ්වාසයි. දැනටමත් ලබා දී ඇති අනෙක් පිළිතුරු සමඟ සංයෝජනයෙන් එය තවත් වටිනාකමක් එක් කරන බවට විශ්වාස නැත. පිළිතුර යාවත්කාලීන කරනු ඇත
jontro

14
ප්‍රශ්නය වූයේ මෙය “කවදා හෝ” සත්‍ය විය හැකිද යන්නයි. පිළිතුර ඔව්, මෙය සත්‍ය විය හැකි එක් අවස්ථාවක්: aඑය දේශීය විචල්‍යයක් නොවන අතර එය වැඩිවන ග්‍රාහකයෙකු සමඟ ගෝලීය විෂය පථය මත අර්ථ දක්වා ඇත.
සැක් ඩෙල්වෙන්තල්

190

විචල්‍ය aප්‍රවේශයට ප්‍රවේශ විය හැකි අවස්ථාවකදී මෙය කළ හැකි බව SharedArrayBuffer හරහා වෙබ් සේවකයින් දෙදෙනෙකු මෙන්ම සමහර ප්‍රධාන ස්ක්‍රිප්ට් එකකින් කියන්න. හැකියාව අඩු වන නමුත් එය කේතය යාන්ත්රික කේත කිරීමට සකස් කරන විට, වෙබ් කම්කරුවන් විචල්ය යාවත්කාලීන බව හැකි ය aකොන්දේසි එසේ හුදෙක් කාලය තුළ a==1, a==2හා a==3සෑහීමකට පත් වේ.

වෙබ් සේවකයින් සහ ජාවාස්ක්‍රිප්ට් හි SharedArrayBuffer විසින් සපයනු ලබන බහු-නූල් පරිසරයක ධාවන තත්වයට මෙය උදාහරණයක් විය හැකිය.

ඉහත මූලික ක්‍රියාත්මක කිරීම මෙන්න:

main.js

// Main Thread

const worker = new Worker('worker.js')
const modifiers = [new Worker('modifier.js'), new Worker('modifier.js')] // Let's use 2 workers
const sab = new SharedArrayBuffer(1)

modifiers.forEach(m => m.postMessage(sab))
worker.postMessage(sab)

workers.js

let array

Object.defineProperty(self, 'a', {
  get() {
    return array[0]
  }
});

addEventListener('message', ({data}) => {
    array = new Uint8Array(data)
    let count = 0
    do {
        var res = a == 1 && a == 2 && a == 3
        ++count
    } while(res == false) // just for clarity. !res is fine
    console.log(`It happened after ${count} iterations`)
    console.log('You should\'ve never seen this')
})

modifier.js

addEventListener('message' , ({data}) => {
    setInterval( () => {
        new Uint8Array(data)[0] = Math.floor(Math.random()*3) + 1
    })
})

මගේ මැක්බුක් වාතය තුළ, එය සිදු වන්නේ පළමු උත්සාහයේදී බිලියන 10 ක් පමණ පුනරාවර්තනය කිරීමෙන් පසුව ය:

රූප විස්තරය මෙහි ඇතුළත් කරන්න

දෙවන උත්සාහය:

රූප විස්තරය මෙහි ඇතුළත් කරන්න

මා කී පරිදි, අවස්ථා අඩු වනු ඇත, නමුත් ප්‍රමාණවත් කාලයක් ලබා දීමෙන් එය තත්වයට පත්වනු ඇත.

ඉඟිය: ඔබේ පද්ධතියට වැඩි කාලයක් ගත වුවහොත්. පමණක් උත්සාහ a == 1 && a == 2කර වෙනස් Math.random()*3කරන්න Math.random()*2. ලැයිස්තුගත කිරීම සඳහා වැඩි වැඩියෙන් එකතු කිරීමෙන් පහර දීමේ අවස්ථාව පහත වැටේ.


50
අවංකවම, මෙය හොඳම පිළිතුරයි. අනෙක් සියලුම පිළිතුරු සඳහා ගැඹුරින් නොදැනුවත්ව යමක් කිරීමට හිතාමතා උත්සාහ කිරීම අවශ්‍ය වේ. මෙම පිළිතුර ඇත්ත වශයෙන්ම සැබෑ ලෝකයේ සිදුවිය හැකි දෙයක් පිළිබිඹු කරයි - තරඟ තත්වයක්.
ටොම් ස්වර්ලි

34
එපමණක් නොව - සැබෑ ලෝකයේ මෙය සිදුවන බව මම ඇත්ත වශයෙන්ම දැක ඇත්තෙමි. ප්‍රශ්නයේ නිශ්චිත කොන්දේසිය සමඟ නොව, නිසැකවම ශ්‍රිතයක් ආරම්භයේදී (a == 1) පරීක්ෂා කිරීමෙන් සහ (a == 2) පසුව ශ්‍රිතයේදී, සහ කේත තිබීම කොන්දේසි දෙකටම පහර දෙයි. FYI, මෙය සිදු වූ පළමු අවස්ථාව මා දුටුවේ කාර් එන්ජින් පාලකය තුළ වන අතර, අපි කේතීකරණ ප්‍රමිතීන් ක්‍රියාත්මක කළෙමු. දෙවන වතාවට හමුදා ගුවන් යානා සඳහා දහයියා සහ ගිනි දැල් බෙදා හැරීමේ පද්ධතියක සිටි අතර, මගේ පළමු දිනයේම මම මෙය සොයාගෙන එය සවි කළෙමි. අනෙක් කණ්ඩායම තවමත් ගැටලුව පිළිබඳව සාකච්ඡා කරමින් සිටියහ. (කුඩෝස් මට්ටම: ඉහළ! :)
ග්‍රැහැම්

38
ඉතින්, ඔබ වෙබ් සේවකයින් සමඟ ජාවාස්ක්‍රිප්ට් මඟින් වැඩසටහන්ගත කර ඇති “කාර් එන්ජින් පාලක” සහ “චෆ් සහ ෆ්ලෙයාර් ඩිස්පෙන්සර් පද්ධති” මත වැඩ කර තිබේද? මම හිතන්නේ නැහැ මම ආයෙත් එළියට යනවා කියලා.
psaxton

12
@psaxton :) ඇත්ත වශයෙන්ම නැත - නමුත් අප සතුව හවුල් දත්ත සහිත බහු-නූල් මෘදුකාංග තිබේ. මෙය ජාවාස්ක්‍රිප්ට් හෝ වෙබ් සේවකයින් සඳහා විශේෂිත නොවන සියලුම බහු-නූල් මෘදුකාංග සඳහා ප්‍රති-රටාවකි. ඔබ එකලස් කිරීමේ භාෂාවෙන්, බ්‍රයින්ෆ් * සීකේ, විෂුවල් බේසික්, සී හෝ ජාවාස්ක්‍රිප්ට් වලින් වැඩසටහන් කරන්නේද යන්න ගැටළුවක් නොවේ - ඔබ මෙය බහු-නූල් යෙදුමක හවුල් දත්ත සමඟ කළහොත් එය සැමවිටම අසාර්ථක වනු ඇත.
ග්‍රැහැම්

4
මම හිතන්නේ මෙය දැන් ජොන්ට්රෝගේ පිළිතුර වටා විස්තාරණ ආවරණයක්.
qntm

148

ස්වයං-නැවත ලිවීමේ මාලාවක් භාවිතා කරමින් මෙය කළ හැකිය:

(මෙය ජොන්ට්‍රෝගේ විසඳුමට සමානය, නමුත් ප්‍රති විචල්‍යයක් අවශ්‍ය නොවේ.)

(() => {
    "use strict";
    Object.defineProperty(this, "a", {
        "get": () => {
            Object.defineProperty(this, "a", {
                "get": () => {
                    Object.defineProperty(this, "a", {
                        "get": () => {
                            return 3;
                        }
                    });
                    return 2;
                },
                configurable: true
            });
            return 1;
        },
        configurable: true
    });
    if (a == 1 && a == 2 && a == 3) {
        document.body.append("Yes, it’s possible.");
    }
})();


61
ලබා ගන්නෙකු භාවිතා කිරීමේ ප්‍රවේශය ===පමණක් නොව, ක්‍රියා කරන බව සලකන්න ==.
මාකීන්

මෙම විසඳුම thisඊතල ශ්‍රිතයේ ශරීරය තුළ ඇති ගෝලීය වස්තුව වීම මත රඳා පවතී .
රෝයි ටින්කර්

Id මිඩ්නයිට්ස් මම වෙනත් පිළිතුරු "පිරමිඩ කේතය" ලෙස වර්ග නොකරමි .
පැට්‍රික් රොබට්ස්

මෙයද අත්තනෝමතික අනුපිළිවෙලින් ක්‍රියාත්මක වන බව සලකන්න. , වැනි (a == 3 && a == 2 && a == 1)?
ජොහැන්නස්

131

විකල්පයක් ලෙස, ඔබට ඒ සඳහා පන්තියක් සහ චෙක්පත සඳහා උදාහරණයක් භාවිතා කළ හැකිය.

function A() {
    var value = 0;
    this.valueOf = function () { return ++value; };
}

var a = new A;

if (a == 1 && a == 2 && a == 3) {
    console.log('bingo!');
}

සංස්කරණය කරන්න

ES6 පන්ති භාවිතා කිරීමෙන් එය මේ ආකාරයෙන් පෙනෙනු ඇත

class A {
  constructor() {
    this.value = 0;
    this.valueOf();
  }
  valueOf() {
    return this.value++;
  };
}

let a = new A;

if (a == 1 && a == 2 && a == 3) {
  console.log('bingo!');
}


5
හුදෙක් function A() {value = 0;ආරම්භයේ දී?
ඩේව් සී

valueOfඉක්මවනු කොට ඇත, this method is usually called automatically by JavaScript behind the scenes, and not explicitly in codeඅප එය ඇත්තටම වර්ධක අගය සසඳන විට එසේ ..
Danyal Sandeelo

130

මෙම පිළිතුර දැනටමත් පළ කර ඇති බවක් මට නොපෙනේ, එබැවින් මම මෙයද මිශ්‍රණයට විසි කරමි. මෙය අර්ධ පළල හන්ගුල් අවකාශය සමඟ ජෙෆ්ගේ පිළිතුරට සමානය .

var a = 1;
var  = 2;
var а = 3;
if(a == 1 &&  == 2 && а == 3) {
    console.log("Why hello there!")
}

දෙවැන්න සමඟ සුළු විෂමතාවයක් ඔබට පෙනෙනු ඇත, නමුත් පළමු හා තෙවන ඒවා පියවි ඇසට සමාන වේ. 3 ම එකිනෙකට වෙනස් අක්ෂර:

a- ලතින් කුඩා අකුර A
- සම්පූර්ණ පළල ලතින් කුඩා අකුර A
а- සිරිලික් කුඩා අකුරු A.

මේ සඳහා සාමාන්‍ය පදය වන්නේ "සමජාතීය" යන්නයි: එකම යුනිකෝඩ් අක්ෂර සමාන වේ. මුළුමනින්ම වෙන් කොට හඳුනාගත නොහැකි තුනක් ලබා ගැනීම සාමාන්‍යයෙන් දුෂ්කර ය , නමුත් සමහර අවස්ථාවල ඔබට වාසනාවන්ත විය හැකිය. ඒ, Α, А, සහ Ꭺ වඩා හොඳ (ලතින්-ඒ, වැඩ කරන ග්රීක ඇල්ෆා , සිරිලික්-ඒ , සහ චෙරොකී-ඒ පිළිවෙළින්; අවාසනාවකට ග්රීක හා චෙරොකී සිම්පල් අකුරු ලතින් ද වෙනස් a: α, , සහ අයෙක් සොයමින් එසේ ඉහත ස්නිපටයට උදව් නොකරන්න).

සමජාතීය හෝමොග්ලිෆ් ප්‍රහාර මාලාවක් ඇත, බොහෝ විට ව්‍යාජ ඩොමේන් නාම වලින් (උදා: wikipediа.org(සිරිලික්) එදිරිව wikipedia.org(ලතින්)), නමුත් එය කේතයෙන් ද පෙන්විය හැකිය; සාමාන්‍යයෙන් හඳුන්වනු ලබන්නේ යටපත් වී ඇති බවය ( විවරණයක සඳහන් කර ඇති පරිදි, [යටින් පවතින] ප්‍රශ්න දැන් PPCG හි මාතෘකාවෙන් බැහැරව ඇත , නමුත් මෙම ආකාරයේ දේවල් පෙන්වන අභියෝගයක් ලෙස භාවිතා කරයි). මෙම පිළිතුර සඳහා භාවිතා කරන සමජාතීයතා සොයා ගැනීමට මම මෙම වෙබ් අඩවිය භාවිතා කළෙමි .


19
“සුළු විෂමතාවයක්” යනු මා එය හඳුන්වන්නේ කෙසේද යන්න නොවේ.

4
vhvd මුලුමනින්ම රඳා පවතින්නේ ඔබේ අකුරු විදැහුම්කරණය මත ය. මෙය මා දකින දෙයයි .
Draco18s තවදුරටත් SE

1
Ake ජේක් ඔව්, සම්පූර්ණ පළල ලතින් කුඩා අකුර A විශාලතම සමජාතීය නොවේ (නමුත් ලොකු අකුරු ප්‍රභේද විශ්මයජනකයි). සාමාන්‍යයෙන් ඔබට අවශ්‍ය වන්නේ දෙකක් පමණි.
ඩ්‍රැකෝ 18 තවදුරටත් SE

Ra Draco18s එකඟ විය: නැවත අවශ්‍ය වන්නේ 2 ක් පමණි. අමතර තොරතුරු සඳහා හොඳ රැකියාවක්!
ජේක්ස්ටීම්

10
ඔබට යුනිකෝඩ් ප්‍රභේද තේරීම් (U + FE00..U + FE0F) භාවිතා කළ හැකිය. මේ කිසිවක් නොවේ a: a︀ a︁ a︂. විෂමතා ගැන තවදුරටත් කරදර විය යුතු නැත.
සල්මාන් ඒ

108

ඔව්, එය කළ හැකිය! 😎

»ජාවාස්ක්‍රිප්ට්

if‌=()=>!0;
var a = 9;

if‌(a==1 && a== 2 && a==3)
{
    document.write("<h1>Yes, it is possible!😎</h1>")
}

ඉහත කේතය කෙටි අනුවාදයකි (අදහස් දැක්වීමේ සටහන සඳහා or ෆොරිවින්ට ස්තූතියි) සහ පහත කේතය මුල් ය:

var a = 9;

if‌(a==1 && a== 2 && a==3)
{
    //console.log("Yes, it is possible!😎")
    document.write("<h1>Yes, it is possible!😎</h1>")
}

//--------------------------------------------

function if‌(){return true;}

ඔබ මගේ කේතයේ ඉහළ පැත්ත දැක එය ක්‍රියාත්මක කරන්නේ නම් ඔබ කියන්නේ වාව්, කෙසේද?

ඉතින් මම හිතන්නේ ඔව් යැයි පැවසීම ප්‍රමාණවත් යැයි ඔබට පැවසූ කෙනෙකුට එය කළ හැකිය : කිසිවක් කළ නොහැකි ය

උපක්‍රමය: ifඑහි නම සමාන වන ශ්‍රිතයක් සෑදීමට මම සැඟවුණු අක්ෂරයක් භාවිතා කළෙමි if. ජාවාස්ක්‍රිප්ට් හි අපට මූල පද ඉක්මවා යා නොහැක, එබැවින් මට මේ ආකාරයෙන් භාවිතා කිරීමට බල කෙරුනි. එය ව්‍යාජ ය if, නමුත් එය මේ අවස්ථාවේ දී ඔබ වෙනුවෙන් වැඩ කරයි!


» C #

එසේම මම C # අනුවාදයක් ලිවීමි ( දේපල වටිනාකම වැඩි කිරීමේ තාක්ෂණය සමඟ ):

static int _a;
public static int a => ++_a;

public static void Main()
{
    if(a==1 && a==2 && a==3)
    {
        Console.WriteLine("Yes, it is possible!😎");
    }
}

සජීවී නිරූපණය


56
ජාවාස්ක්‍රිප්ට් අනුවාදය මානව වර්ගයාට එරෙහි සැබෑ අපරාධයක් වන අතර මෙය කිරීමට ඇති හැකියාව එක්සත් ජාතීන්ගේ සම්මුතීන් විසින් නීති විරෝධී විය යුතුය. මම හිතන්නේ අපි ජාවාක්‍රිප්ට් පිළිබඳ සියලු දැනුමෙන් ලෝකය පිරිසිදු කරන කාලයයි.
සහ වගවීම

2
ශ්‍රිත ප්‍රකාශය ඊටත් වඩා කෙටි විය හැකිය. if‌=()=>!0
ෆෝවින්

4
ඔබ මිහිපිට භාවිතා කළේ ඇයි document.write? ඉතිරි පිළිතුර නොසලකා කුලියට නොගැනීමට එය ස්ථිර මාර්ගයකි.
සර්බ්‍රස්

3
Er සර්බ්‍රස්, ඔබේ සටහනට ස්තූතියි. මම මුලින්ම මගේ පිළිතුර ලිවූ console.logනමුත් මම එය document.write ලෙස වෙනස් කළෙමි. ඇත්ත වශයෙන්ම සෑම විටම මම console.logමගේ කේත වල භාවිතා කරන නමුත් මෙහි මට අවශ්‍ය වන්නේ ස්ටැක් ඕවර්ෆ්ලෝ කේත ස්නිපෙට් කොටුවේ පරිශීලකයින්ට පෙළක් පෙන්වීමයි. ඒ නිසා ජනනය කළ පණිවිඩයට වඩා මගේ පණිවිඩය ලස්සනට පෙන්වීමට මට අවශ්‍ය විය console.log. Run Code Snippetමගේ පිළිතුර සහ වෙනත් පිළිතුරු මත බොත්තම ක්ලික් කරන්න . SO කේත ස්නිපටය මට html සහ JS සහ CSS භාවිතා කිරීමට ඉඩ දී ඇති අතර එවිට මට අවශ්‍ය වූයේ එය මගේ පිළිතුරේ භාවිතා කර එය ලස්සන කිරීමටයි. මම හිතන්නේ එයට කිසිදු negative ණාත්මක අතුරු ආබාධයක් නොමැති අතර මගේ පිළිතුර විශාල හෝ සම්පූර්ණ කර නැත.
RAM

1
L පැහැදිලි කරන්න, එක්සත් ජාතීන්ගේ සම්මුතීන්ට ලෝකය effectively ලදායී ලෙස වෙනස් කළ හැකි නම්, අපට මීට වඩා හොඳ ලෝකයක් තිබිය යුතුය. එක්සත් ජාතීන්ගේ ප්‍රකාශයට වඩා වැඩි යමක් අපට අවශ්‍ය වන අතර එතෙක් මගේ ජාවාස්ක්‍රිප්ට් උපක්‍රමය භාවිතා කළ හැකි යැයි මම සිතමි.)
RAM

97

ජාවාස්ක්‍රිප්ට්

a == a +1

ජාවාස්ක්‍රිප්ට් හි පූර්ණ සංඛ්‍යා නොමැති නමුත් ඒවා පමණක් Numberද්විත්ව නිරවද්‍යතාවයකින් යුත් පාවෙන ලක්ෂ්‍ය සංඛ්‍යා ලෙස ක්‍රියාත්මක වේ.

එයින් අදහස් aවන්නේ සංඛ්‍යාවක් ප්‍රමාණවත් තරම් විශාල නම් එය අඛණ්ඩ සංඛ්‍යා තුනකට සමාන ලෙස සැලකිය හැකි බවයි:

a = 100000000000000000
if (a == a+1 && a == a+2 && a == a+3){
  console.log("Precision loss!");
}

ඇත්ත, එය සම්මුඛ පරීක්‍ෂකවරයා ඇසූ දේම නොවේ (එය සමඟ ක්‍රියා නොකරයි a=0), නමුත් එය සැඟවුණු කාර්යයන් හෝ ක්‍රියාකරු අධික ලෙස පැටවීම සමඟ කිසිදු උපක්‍රමයක් සම්බන්ධ නොවේ.

වෙනත් භාෂා

යොමු කිරීම සඳහා, a==1 && a==2 && a==3රූබි සහ පයිතන් හි විසඳුම් තිබේ. සුළු වෙනස් කිරීමකින්, එය ජාවාහි ද කළ හැකිය.

රූබි

චාරිත්රයක් සමඟ ==:

class A
  def ==(o)
    true
  end
end

a = A.new

if a == 1 && a == 2 && a == 3
  puts "Don't do this!"
end

හෝ වැඩි වීම a:

def a
  @a ||= 0
  @a += 1
end

if a == 1 && a == 2 && a == 3
  puts "Don't do this!"
end

පයිතන්

class A:
    def __eq__(self, who_cares):
        return True
a = A()

if a == 1 and a == 2 and a == 3:
    print("Don't do that!")

ජාවා

ජාවා Integerහැඹිලිය වෙනස් කිරීමට හැකිය :

package stackoverflow;

import java.lang.reflect.Field;

public class IntegerMess
{
    public static void main(String[] args) throws Exception {
        Field valueField = Integer.class.getDeclaredField("value");
        valueField.setAccessible(true);
        valueField.setInt(1, valueField.getInt(42));
        valueField.setInt(2, valueField.getInt(42));
        valueField.setInt(3, valueField.getInt(42));
        valueField.setAccessible(false);

        Integer a = 42;

        if (a.equals(1) && a.equals(2) && a.equals(3)) {
            System.out.println("Bad idea.");
        }
    }
}

27
@ cᴏʟᴅsᴘᴇᴇᴅ: Java, Javascript, potayto, potahto :) හොඳ JS පිළිතුරු දැනටමත් තිබේ. වෙනත් භාෂාවලින් එය කළ හැකි ආකාරය පෙන්වීම සිත්ගන්නාසුළු යැයි මම සිතුවෙමි, සමහර විට JS සංවර්ධකයින්ට යම් අදහස් ලබා දෙන්න.
එරික් ඩුමිනිල්

2
@ cᴏʟᴅsᴘᴇᴇᴅ: JS උදාහරණයක් සමඟ යාවත්කාලීන කරන ලදි.
එරික් ඩුමිනිල්

1
ජාවා අනුවාදය සමඟ ක්‍රියා නොකරන්නේ ඇයි Integer a = 42(හෝ එය කරන්නේ)? මට ස්වයංක්‍රීය Integer a = 42; a == 1 && a == 2 && a == 3බොක්සිං තේරෙන පරිදි, සියලු තීන්ත කොටු කළ යුතුය. නැතහොත් සැසඳීම් සඳහා මෙම අගුළු හැරීම a ද?
CAD97

AD CAD97: unboxing Integer == intවලට හේතු වන බව පෙනේ. නමුත් Integer#equals(int)බල ස්වයංක්‍රීය ඔටෝ බොක්සිං භාවිතා කිරීම නිසා එය ක්‍රියාත්මක වේ. අදහස් දැක්වීමට ස්තූතියි!
එරික් ඩුමිනිල්

Te ස්ටෙෆාන්බිජ්සිටර්: කරුණාකර පැහැදිලි කරන්න. මා දන්නා පරිදි, Numbersජේඑස් හි ඇත්තේ මූලික වශයෙන් doubles වැනි ය. ඒවාට පූර්ණ සංඛ්‍යා මෙන් පෙනිය හැකි අතර ඔබට ඒවා පූර්ණ සංඛ්‍යා මෙන් භාවිතා කළ හැකිය, නමුත් ඒවා තවමත් පූර්ණ සංඛ්‍යා නොවේ. n == n + 1ජාවා / පයිතන් / සී / රූබි / හි පූර්ණ සංඛ්‍යා සඳහා කිසි විටෙකත් සත්‍ය විය හැකි යැයි මම නොසිතමි
එරික් ඩුමිනිල්

80

මෙය @ ජෙෆ්ගේ පිළිතුරේ ප්‍රතිලෝම අනුවාදයකි, එහිදී සැඟවුණු අක්ෂරයක් (U + 115F, U + 1160 හෝ U + 3164) පෙනෙන විචල්‍යයන් නිර්මාණය කිරීමට භාවිතා කරයි 1, 2සහ 3.

var  a = 1;
var 1 = a;
var 2 = a;
var 3 = a;
console.log( a ==ᅠ1 && a ==ᅠ2 && a ==ᅠ3 );

* ශුන්‍ය පළල සම්බන්ධ නොවන (U + 200C) සහ ශුන්‍ය පළල සම්බන්ධක (U + 200D) භාවිතා කිරීමෙන් එම පිළිතුර සරල කළ හැකිය. මෙම අක්ෂර දෙකම හඳුනාගැනීම් තුළ අවසර දී ඇති නමුත් ආරම්භයේ දී නොවේ:

var a = 1;
var a = 2;
var a = 3;
console.log(a == 1 && a == 2 && a == 3);

/****
var a = 1;
var a\u200c = 2;
var a\u200d = 3;
console.log(a == 1 && a\u200c == 2 && a\u200d == 3);
****/

වෙනත් උපක්‍රම එකම අදහස භාවිතා කළ හැකිය. උදා: යුනිකෝඩ් විචල්‍යතා තේරීම් භාවිතා කරමින් හරියටම සමානව පෙනෙන විචල්‍යයන් නිර්මාණය කිරීම ( a︀ = 1; a︁ = 2; a︀ == 1 && a︁ == 2; // true).


75

සම්මුඛ පරීක්ෂණවල අංක එකේ රීතිය; කිසි විටෙකත් කළ නොහැකි යැයි නොකියන්න.

සැඟවුණු චරිත උපක්‍රම අවශ්‍ය නොවේ.

window.__defineGetter__( 'a', function(){
    if( typeof i !== 'number' ){
        // define i in the global namespace so that it's not lost after this function runs
        i = 0;
    }
    return ++i;
});

if( a == 1 && a == 2 && a == 3 ){
    alert( 'Oh dear, what have we done?' );
}


6
ඕච්. __defineGetter__ඇත්ත වශයෙන්ම js භාෂාවේ කොටසක් නොවේ, එය අවලස්සන අනුවාදයකි defineProperty. typeofශ්‍රිතයක් නොවන අතර මෙම ප්‍රකාශයට පත් නොකිරීම iභයානක ය. තවමත් ඉහළ අගයන් 40 ක් වටිනා බව පෙනේ: /
ජොනස් විල්ම්ස්

6
On ජොනාස් ඩබ්ලිව්. Upvotes 41 :-) __defineGetter__එක් සංවර්ධකයෙකුට අතහැර දැමූ බව මම දනිමි. Mozilla.org/en-US/docs/Web/JavaScript/Reference/… නමුත් එය මගේ ෆයර්ෆොක්ස් v 57.0.4 හි පැහැදිලිව ක්‍රියාත්මක වන බැවින් මම මෙය පෙන්වීමට තීරණය කළෙමි defineProperty()උරුම කේතය සත්‍ය වන අතර එය නොසලකා හැරිය නොහැක. කැතකම කුමක් වුවත්, iමා කළ ආකාරයට ප්‍රකාශ කිරීම ප්‍රසිද්ධ / ලේඛනගත හැසිරීමකි. සමහර විට මම PCG මනෝභාවයක සිටියා ¯ \ _ () _ / ¯
MonkeyZeus

68

අවංකවම, එය සත්‍යය ලෙස තක්සේරු කිරීමට ක්‍රමයක් තිබේද නැද්ද යන්න (සහ අනෙක් අය පෙන්වා ඇති පරිදි, විවිධ ක්‍රම තිබේ), මා සොයන පිළිතුර, සම්මුඛ සාකච්ඡා සිය ගණනක් පවත්වා ඇති අයෙකු ලෙස කථා කිරීම, පහත දැක්වෙන දෙයක්:

"හොඳයි, සමහර විට ඔව් මට ක්ෂණිකව නොපෙනෙන අමුතු තත්වයන් යටතේ විය හැකිය ... නමුත් මට මෙය සැබෑ කේතයකින් හමු වූවා නම්, එය කරන්නේ කෙසේද සහ ඇයි එය කරන්නේ කෙසේද යන්න සොයා ගැනීමට මම පොදු නිදොස් කිරීමේ ක්‍රම භාවිතා කරමි. එම තත්වය මඟහරවා ගැනීම සඳහා කේතය වහාම ප්‍රතිනිර්මාණය කරන්න ... නමුත් වඩා වැදගත් දෙය නම්: මම එම කේතය මුලින් ම ලිවීමට කිසිසේත් ඉඩ නොතබන හෙයින් එය කැටි ගැසුණු කේතයේ නිර්වචනය වන අතර මම කිසි විටෙකත් කැටිති කේත ලිවීමට උත්සාහ නොකරමි.

සමහර සම්මුඛ පරීක්‍ෂකවරුන් පැහැදිලිවම ඉතා ව්‍යාකූල ප්‍රශ්නයක් ලෙස හැඳින්වීමට වරදක් කරාවි යැයි මම සිතමි, නමුත් මතයක් ඇති සංවර්ධකයින්ට කමක් නැත, විශේෂයෙන් ඔවුන්ට තර්කානුකූල චින්තනයකින් එය උපස්ථ කළ හැකි අතර මගේ ප්‍රශ්නය විසඳා ගත හැකිය තමන් ගැන අර්ථවත් ප්‍රකාශයක්.


13
ප්‍රශ්නය (හෝ සියලුම සම්මුඛ පරීක්ෂණ ප්‍රශ්න) බොහෝ විට අපේක්ෂකයින් ගැටලුවක් ගැන සිතීමට ඇති කැමැත්ත පරීක්ෂා කිරීම ය. සිතීම ප්‍රතික්ෂේප කරන කෙනෙකු පිළිතුර “දන්නා” බව විශ්වාස කරන නිසා පිළිතුර හොඳ කුලී වැඩක් නොවේ.
ෂම්මු

5
On ඩොන් හැච් නෑ, ඔවුන් හොඳ විශ්වාසයකින් පිළිතුරු දුන්නොත් මම ඔවුන්ට ද ize ුවම් නොකරමි. විශේෂයෙන් ඔවුන් අනෙක් අය පෙන්වා ඇති ආකාරයට නිවැරදි පිළිතුරක් ලබා දුන්නේ නම් ... නමුත් මම පසු විපරමක් ඉල්ලා සිටිමි. කේත ලිවීමට හෝ නොකිරීමට හොඳ ක්‍රමයක්. දැනුවත්ව සිටීම සහ “නිවැරදි” පිළිතුරක් ඉදිරිපත් කිරීමට හැකිවීම හොඳ සංවර්ධකයෙකු වීමේ කොටසක් පමණි. "වෘත්තීය" සංවර්ධකයෙකුට වඩා වැදගත් වන්නේ තේරුම් ගත හැකි සහ නඩත්තු කළ හැකි කේත ලිවීමයි, බොහෝ විට අඩු හැකියාවන් ඇති සංවර්ධකයින් විසින්. ඕනෑවට වඩා දක්ෂ සංවර්ධකයින් IME තරම් අසමත් අය තරම් නරක ය.
ෆ්‍රෑන්ක් ඩබ්ලිව්. සමෙට්ටි

16
මෙය ප්‍රශ්නයට පිළිතුරු සපයන්නේ නැත.
ටයිලර් එච්

6
මෙම පිළිතුරේ ඇති කනගාටුදායක කාරණය නම්, 1rep පරිශීලකයෙකු ඊයේ එයට පිළිතුරු දුන් අතර ඔහුට මෙම ප්‍රශ්න මකා දැමීමට හේතු විය.
ජොනස් විල්ම්ස්

8
@ ජෝන් කෝල්මන් ප්‍රශ්නය අසන්නේ කේතය සත්‍ය ලෙස තක්සේරු කරන්නේ කෙසේද යන්නයි. සම්මුඛ පරීක්ෂක විසින් ප්‍රශ්නය මුලින් යෝජනා කළ හේතු එය අසන්නේ නැත. මෙම පිළිතුර අසනු ලබන ප්‍රශ්නය ආමන්ත්‍රණය කිරීමට පවා උත්සාහ නොකරන අතර ඒ වෙනුවට සම්මුඛ පරීක්‍ෂකවරයාගේ අරමුණ කුමක්දැයි අනුමාන කිරීමේ උත්සාහයක “මම කුමක් කරන්නද” යන අනුවාදය කෙරෙහි පූර්ණ අවධානය යොමු කරයි. අසන ලද ප්‍රශ්නය එය නම්, එය පුළුල් ය. එබැවින් මෙම පිළිතුර මෙහි හෝ වෙබ් අඩවියේ කොතැනකවත් අයත් නොවේ.
ටයිලර් එච්

43

ඔබට කවදා හෝ එවැනි සම්මුඛ පරීක්ෂණ ප්‍රශ්නයක් ලැබුනේ නම් (හෝ ඔබේ කේතයේ සමානව අනපේක්ෂිත හැසිරීමක් දුටුවහොත්) බැලූ බැල්මට කළ නොහැකි යැයි පෙනෙන හැසිරීමකට හේතු විය හැකි දේවල් මොනවාදැයි සිතා බලන්න:

  1. කේතීකරණය : මේ අවස්ථාවේ දී ඔබ බලන විචල්‍යය එය ඔබ සිතන ආකාරයට නොවේ. විචල්‍යයක නම වෙනත් එකක් මෙන් පෙනෙන්නට ඔබ හිතාමතාම සමජාතීය හෝ අභ්‍යවකාශ අක්ෂර භාවිතා කරමින් යුනිකෝඩ් සමඟ පටලවා ගන්නේ නම් මෙය සිදුවිය හැකිය , නමුත් කේතීකරණ ගැටළු අහම්බෙන් ද හඳුන්වා දිය හැකිය, උදා: අනපේක්ෂිත යුනිකෝඩ් කේත අඩංගු වෙබයෙන් කේත පිටපත් කර අලවන විට ලකුණු (උදා: අන්තර්ගත කළමනාකරණ පද්ධතියක් flයුනිකෝඩ් 'ලැටින් ස්මාල් ලිගේචර් එෆ්එල්' (යූ + එෆ්බී 02) වෙනුවට ආදේශ කිරීම වැනි "ස්වයංක්‍රීය හැඩතල ගැන්වීම්" කළ නිසා .

  2. ධාවන කොන්දේසි : තරඟ තත්වයක් ඇතිවිය හැකිය, එනම් සංවර්ධකයා අපේක්ෂා කරන අනුපිළිවෙලෙහි කේතය ක්‍රියාත්මක නොවන තත්වයක්. ධාවන තත්වයන් බොහෝ විට බහු-නූල් කේත වලින් සිදු වේ, නමුත් බහු කොන්දේසි නූල් වර්ග තත්වයන් සඳහා අවශ්‍ය නොවේ - අසමමුහුර්තතාවය ප්‍රමාණවත් වේ (සහ ව්‍යාකූල නොවන්න, අසින්ක් යන්නෙන් අදහස් කරන්නේ හුඩ් යටතේ බහු නූල් භාවිතා වන බවයි ).

    එබැවින් ජාවාස්ක්‍රිප්ට් තනි-නූල් නිසා පමණක් ධාවන තත්වයන්ගෙන් නිදහස් නොවන බව සලකන්න. සරල තනි නූල් සහිත නමුත් අසින්ක් - උදාහරණයක් සඳහා මෙහි බලන්න . තනි ප්‍රකාශයක සන්දර්භය තුළ ධාවන තත්වය කෙසේ වෙතත් ජාවාස්ක්‍රිප්ට් හි පහර දීමට අපහසු වනු ඇත.

    ඔබට බහු නූල් තිබිය හැකි බැවින් වෙබ් සේවකයින් සමඟ ජාවාස්ක්‍රිප්ට් ටිකක් වෙනස් ය. වෙබ් සේවකයින් භාවිතා කරමින් සංකල්පයේ සාක්‍ෂි සනාථ කිරීම සඳහා memehulmpt අපට පෙන්වා දී ඇත .

  3. අතුරු ආබාධ : සමානාත්මතා සංසන්දනය කිරීමේ මෙහෙයුමේ අතුරු ආබාධයක් (මෙහි උදාහරණවල තරම් පැහැදිලිව පෙනෙන්නට අවශ්‍ය නැත, බොහෝ විට අතුරු ආබාධ ඉතා සියුම් වේ).

ප්රශ්න මේ ආකාරයේ අපි සම්භාව්ය එක් දුටු නොමැත නම්, JavaScript පමණක් නොව, බොහෝ පරිගණක භාෂා ලෙස පෙනිය හැක JavaScript WTFs මෙතන 1 .

ඇත්ත වශයෙන්ම, සම්මුඛ පරීක්ෂණ ප්රශ්නය සහ මෙහි සාම්පල සියල්ලම ඉතා සංක්ෂිප්තව පෙනේ. නමුත් ඒවා හොඳ මතක් කිරීමකි:

  • අතුරු ආබාධ ඇත්තෙන්ම අප්රසන්න විය හැකි අතර හොඳින් සැලසුම් කරන ලද වැඩසටහනක් අනවශ්ය අතුරු ආබාධවලින් තොර විය යුතුය.
  • බහු නූල් දැමීම සහ විකෘති තත්වය ගැටළු සහගත විය හැකිය.
  • අක්ෂර කේතන කිරීම සහ නූල් සැකසීම නිවැරදිව සිදු නොකිරීම අප්රසන්න දෝෂ වලට හේතු විය හැක.

1 නිදසුනක් ලෙස, ඔබට සම්පූර්ණයෙන්ම වෙනස් ක්‍රමලේඛන භාෂාවකින් (C #) අතුරු ආබාධයක් (පැහැදිලි එකක්) ප්‍රදර්ශනය කළ හැකිය .


1
එවිට ප්‍රශ්නය ඉතා පුළුල් වේ. විවිධ භාෂාවන්ට මෙය විවිධාකාරයෙන් පහසුවෙන් ක්‍රියාත්මක කළ හැකිය. ප්‍රශ්නය JS විශේෂිත ප්‍රශ්නෝත්තරයක් වන නිසා ප්‍රශ්නය එතරම් කම්පනයකට ලක්ව ඇත, නමුත් එය මගේ 2c පමණි.
cs95

1
හේතු වෙනස් C # සහ ජාවාස්ක්‍රිප්ට් බැවින් මෙම පිළිතුර නීත්‍යානුකූල නොවේ.
එඩ්වින්

3
D එඩ්වින්: හේතු හරියටම එක හා සමානයි: සමාන පෙනුමක් ඇති ග්ලයිෆස් හෝ අභ්‍යවකාශ අක්ෂර, ධාවන තත්වයන් හෝ සංසන්දනාත්මක මෙහෙයුමේ අතුරු ආබාධ සහිත යුනිකෝඩ් විකාරය (දෙවැන්න මගේ උදාහරණයේ පෙන්වා ඇත).
ඩර්ක් වොල්මාර්

2
@ cᴏʟᴅsᴘᴇᴇᴅ: සමහර විට පුළුල් කෝණයකින් දේවල් බැලීම සැබෑ ගැටළුව බැලීමට උපකාරී වේ.
ඩර්ක් වොල්මාර්

3
මෙම පිළිතුර කිසියම් "මෙටා" ආකාරයකින් මෙම ප්‍රශ්නයට ටැග් කළ හැකි යැයි මම ප්‍රාර්ථනා කරමි. ඊට ඉහළින් ඇති සියලුම පිළිතුරු කියවීමෙන් පසු, ජේඑස් හි බොහෝ සිදුරු ඇති බව මට හැඟුණි, නමුත් ඔබ එකවර පිළිතුරු සියල්ලම සාරාංශ කර ඇත. ඔබ එය කළේ මගේ මතය අනුව මෙය තරු සම්මුඛ පරීක්ෂණ ප්‍රශ්නයක් බවට පත් කරන අයුරිනි (භාෂා විශේෂිත ටැගය ඉවත් කළ හොත්). බ්‍රාවෝ!
KCE

41

මෙන්න තවත් විචලනයක්, ඔබට අවශ්‍ය ඕනෑම අගයක් ඉවත් කිරීමට අරාව භාවිතා කිරීම.

const a = {
  n: [3,2,1],
  toString: function () {
    return a.n.pop();
  }
}

if(a == 1 && a == 2 && a == 3) {
  console.log('Yes');
}


31

හරි, උත්පාදක යන්ත්ර සමඟ තවත් හැක්:

const value = function* () {
  let i = 0;
  while(true) yield ++i;
}();

Object.defineProperty(this, 'a', {
  get() {
    return value.next().value;
  }
});

if (a === 1 && a === 2 && a === 3) {
  console.log('yo!');
}


ඔබ කියනවා හැක්, නමුත් මට විශ්වාසයි මෙය ජනක යන්ත්‍ර භාවිතා කිරීමේ අවස්ථාව බව ... :) (හොඳයි, මෙය thisජනේල වස්තුව වීම මත රඳා පවතී හැර )
කෝඩි G

29

ප්‍රොක්සි භාවිතා කිරීම :

var a = new Proxy({ i: 0 }, {
    get: (target, name) => name === Symbol.toPrimitive ? () => ++target.i : target[name],
});
console.log(a == 1 && a == 2 && a == 3);

ප්‍රොක්සි මූලික වශයෙන් ඉලක්කගත වස්තුවක් ලෙස (පළමු පරාමිතිය) මවා පෙන්වයි, නමුත් ඉලක්කගත වස්තුව මත මෙහෙයුම් වලක්වනු ලැබේ (මේ අවස්ථාවේ දී "දේපල ලබා ගන්න" මෙහෙයුම) එවිට සුපුරුදු වස්තු හැසිරීම හැර වෙනත් දෙයක් කිරීමට අවස්ථාවක් ලැබේ. මෙම අවස්ථාවෙහිදී, එක් එක් අංකයට සංසන්දනය කිරීම සඳහා එහි වර්ගය බල කරන aවිට "දේපල ලබා ගන්න" ක්‍රියාව කැඳවනු ලැබේ ==. මෙය සිදු වේ:

  1. අපි ඉලක්කගත වස්තුවක් නිර්මාණය කරමු { i: 0 }, එහිදී iදේපල අපගේ කවුන්ටරය වේ
  2. අපි ඉලක්කගත වස්තුව සඳහා ප්‍රොක්සියක් නිර්මාණය කර එය පවරන්නෙමු a
  3. සෑම a ==සංසන්දනයක් සඳහාම , aවර්ගය ප්‍රාථමික අගයකට බල කෙරේ
  4. මෙම ආකාරයේ බලහත්කාරය a[Symbol.toPrimitive]()අභ්‍යන්තරව ඇමතීමට හේතු වේ
  5. a[Symbol.toPrimitive]"ලබා ගන්න හසුරුවන්නා" භාවිතා කරමින් ක්‍රියාකාරීත්වය ලබා ගැනීමට ප්‍රොක්සි බාධා කරයි
  6. ප්‍රොක්සි හි "හෑන්ඩ් හෑන්ඩ්ලර්" පරික්ෂා කරන්නේ දේපල Symbol.toPrimitiveඋපයාගෙන ඇති බවයි, එම අවස්ථාවේ දී එය වැඩි වී ඉලක්කගත වස්තුවෙන් කවුන්ටරය ආපසු ලබා දෙයි : ++target.i. වෙනත් දේපලක් ලබා ගන්නේ නම්, අපි සුපුරුදු දේපල වටිනාකම ආපසු ලබා දීමට ආපසු යමු,target[name]

නිසා:

var a = ...; // a.valueOf == target.i == 0
a == 1 && // a == ++target.i == 1
a == 2 && // a == ++target.i == 2
a == 3    // a == ++target.i == 3

අනෙක් බොහෝ පිළිතුරු මෙන්ම, මෙය ක්‍රියාත්මක වන්නේ ලිහිල් සමානාත්මතා පරීක්‍ෂණයක් ( ==) සමඟ පමණි , මන්ද දැඩි සමානාත්මතා පරීක්‍ෂණයන් ( ===) ප්‍රොක්සියට බාධා කළ හැකි ආකාරයේ බලහත්කාරයක් නොකරන බැවිනි.


2
මේ සඳහා ප්‍රොක්සියක් භාවිතා කිරීමේ තේරුමක් නැත, නමුත් - Symbol.toPrimitiveවස්තුවක් එකම ආකාරයකින් නිර්වචනය කිරීමද එසේම ක්‍රියාත්මක වේ.
රයි-

27

ඇත්ත වශයෙන්ම ප්‍රශ්නයේ පළමු කොටසට පිළිතුර සෑම ක්‍රමලේඛන භාෂාවකම “ඔව්” වේ. උදාහරණයක් ලෙස, මෙය C / C ++ සම්බන්ධයෙන් වේ:

#define a   (b++)
int b = 1;
if (a ==1 && a== 2 && a==3) {
    std::cout << "Yes, it's possible!" << std::endl;
} else {
    std::cout << "it's impossible!" << std::endl;
}

27
සෑම ක්‍රමලේඛන භාෂාවකින්ම එය කළ හැකි යැයි මම නොසිතමි . සෑම භාෂාවකටම පෙර සැකසුම් නොමැත. ඒ සඳහා, සෑම භාෂාවක්ම &&තාර්කික "සහ" සඳහා භාවිතා නොකරයි .
කීත් තොම්සන්

3
ක්‍රියාකරු අධි බර පැටවීම භාවිතා කරන පයිතන් සහ සී ++ යන දෙවර්ගයේම ක්‍රියා කරන ක්‍රමයක් මම සොයා ගතිමි .
ඩොනල්ඩ් ඩක්

7
පරාවර්තනය භාවිතා කිරීමෙන් සහ පූර්ණ සංඛ්‍යා හැඹිලිය අවුල් කිරීමෙන් ඔබට එය ජාවා හි කළ හැකිය.
CAD97

7
එම ස්ථානයේ විකෘතියට සහාය නොදක්වන භාෂාවලින් එය කළ නොහැක, උදා: සැසඳිය හැකි කිසිවක් හැස්කල් හි නොමැත
ජේසන් කාර්

4
ප්‍රශ්නය අසන්නේ C ++ නොව ජාවාස්ක්‍රිප්ට් ගැන ය.
සියලුම කම්කරුවන් අත්‍යවශ්‍යයි

26

එකම, නමුත් වෙනස්, නමුත් තවමත් සමාන (කිහිප වතාවක් "පරීක්ෂා කළ හැකිය"):

const a = { valueOf: () => this.n = (this.n || 0) % 3 + 1}
    
if(a == 1 && a == 2 && a == 3) {
  console.log('Hello World!');
}

if(a == 1 && a == 2 && a == 3) {
  console.log('Hello World!');
}

මගේ අදහස ආරම්භ වූයේ අංක වස්තු වර්ග සමීකරණය ක්‍රියාත්මක වන ආකාරයෙනි.


4
දෙවන වරටත් වැඩ කරයි!
සල්මාන් ඒ

25

සංකේත භාවිතා කරන ECMAScript 6 පිළිතුර:

const a = {value: 1};
a[Symbol.toPrimitive] = function() { return this.value++ };
console.log((a == 1 && a == 2 && a == 3));

නිසා ==භාවිතය, JavaScript, බිය වද්දන කිරීමට නියමිත ව තිබේ aසමීප දෙවන කර්තව්ය (යමක් බවට 1, 2, 3මෙම නඩුවේ). නමුත් ජාවාස්ක්‍රිප්ට් බලහත්කාරයෙන් බලහත්කාරයෙන් ගණනය කිරීමට උත්සාහ කිරීමට පෙර එය ඇමතීමට උත්සාහ කරයි Symbol.toPrimitive. ඔබ Symbol.toPrimitiveජාවාස්ක්‍රිප්ට් ලබා දෙන්නේ නම් ඔබේ ශ්‍රිතය ලබා දෙන අගය භාවිතා කරයි. එසේ නොවේ නම්, ජාවාස්ක්‍රිප්ට් අමතනු valueOfඇත.


24

එය ක්‍රියාත්මක කිරීමට ඇති අවම කේතය මෙය යැයි මම සිතමි:

i=0,a={valueOf:()=>++i}

if (a == 1 && a == 2 && a == 3) {
  console.log('Mind === Blown');
}

සෑම ඇමතුමකම valueOfගෝලීය විචල්‍යතාවයක් වැඩි කරන චාරිත්‍රයක් සහිත ව්‍යාජ වස්තුවක් නිර්මාණය කිරීම i. අක්ෂර 23 ක්!


14

මෙය ගෝලීය විචල්‍යතාවයට හේතු වන හොඳ අතුරු ආබාධයක් සහිත ඩිෆයින් ප්‍රොපර්ටි භාවිතා කරයි!

var _a = 1

Object.defineProperty(this, "a", {
  "get": () => {
    return _a++;
  },
  configurable: true
});

console.log(a)
console.log(a)
console.log(a)


8
ඔබට වසා දැමීමක් භාවිතා කළ හැකිය a: get: (a => () => ++a)(0),ගෝලීය අවශ්‍ය නොවේ.
නීනා ෂෝල්ස්

13
Ina නිනාස්කෝල්ස් විශ්වාසයි, නමුත් අපි මෙහි කතා කරන්නේ නරක පුරුදු ගැනයි - මට මෙය ලබා දෙන්න: ඩී
බෙන් ඕබින්

1

valueOfපන්ති ප්‍රකාශයක් ඉක්මවා යාමෙන් එය කළ හැකිය:

class Thing {
    constructor() {
        this.value = 1;
    }

    valueOf() {
        return this.value++;
    }
}

const a = new Thing();

if(a == 1 && a == 2 && a == 3) {
    console.log(a);
}

සිදුවන්නේ valueOfඑක් එක් සංසන්දනාත්මක ක්‍රියාකරු තුළ එය හැඳින්වීමයි. පළමුවැන්න මත, aසමාන වනු ඇත 1, දෙවනුව, aසමාන වනු ඇත 2, සහ යනාදී වශයෙන්, සෑම වේලාවක්ම valueOfකැඳවනු ලබන නිසා, වටිනාකම aවැඩි වේ.

එම නිසා Thing: { value: 4}කොන්දේසිය සත්‍ය බව අඟවමින් console.log (කෙසේ හෝ මගේ පර්යන්තයේ) වෙඩි තබා ප්‍රතිදානය කරනු ඇත .

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.