ãã®èšäºã§ã¯äž»èŠãªåºç€ã«ã€ããŠèª¬æããŸãããããã¯ãã¹ãŠã®JavaScriptãšã³ãžã³ã«å ±éã§ããããšã³ãžã³ã®äœæè ïŒ Benedictããã³Matias ïŒãåãçµãã§ããV8ã ãã«å ±éãããã®ã§ã¯ãããŸããã JavaScriptéçºè ãšããŠãJavaScriptãšã³ãžã³ã®åäœãããæ·±ãç解ããããšã¯ãå¹ççãªã³ãŒããèšè¿°ããæ¹æ³ãèŠã€ããã®ã«åœ¹ç«ã€ãšèšããŸãã
![](https://habrastorage.org/webt/14/ef/xe/14efxewawb3ttgslcsxyzicgjy0.png)
泚 ïŒèšäºãèªãããããã¬ãŒã³ããŒã·ã§ã³ãèŠããå Žåã¯ããã®ãããªãã芧ãã ãã ã ããã§ãªãå Žåã¯ãã¹ãããããŠèªã¿é²ããŠãã ããããã€ãã©ã€ã³ïŒãã€ãã©ã€ã³ïŒJavaScriptãšã³ãžã³
ããã¯ãã¹ãŠãJavaScriptã³ãŒããæžããšããäºå®ããå§ãŸããŸãã ãã®åŸãJavaScriptãšã³ãžã³ã¯ãœãŒã¹ã³ãŒããåŠçããæœè±¡æ§æããªãŒïŒASTïŒãšããŠæ瀺ããŸãã æ§ç¯ãããASTã«åºã¥ããŠãã€ã³ã¿ããªã¿ã¯æçµçã«äœæ¥ã«åãæããããã€ãã³ãŒãã®çæãéå§ã§ããŸãã ãããïŒ ããã¯ããšã³ãžã³ãJavaScriptã³ãŒããå®è¡ããç¬éã§ãã
![](https://habrastorage.org/webt/i6/8r/f2/i68rf23urqlxa20gzhubwz2-snq.jpeg)
ããé«éã«å®è¡ããããã«ããããã¡ã€ãªã³ã°ããŒã¿ãšãšãã«æé©åã³ã³ãã€ã©ã«ãã€ãã³ãŒããéä¿¡ã§ããŸãã æé©åã³ã³ãã€ã©ã¯ããããã¡ã€ãªã³ã°ããŒã¿ã«åºã¥ããŠç¹å®ã®ä»®å®ãè¡ããé«åºŠã«æé©åããããã·ã³ã³ãŒããçæããŸãã
ããæç¹ã§ä»®å®ãééã£ãŠããããšãå€æããå Žåãæé©åã³ã³ãã€ã©ãŒã¯ã³ãŒããæé©å解é€ããã€ã³ã¿ãŒããªã¿ãŒã¹ããŒãžã«æ»ããŸãã
JavaScriptãšã³ãžã³ã®ã€ã³ã¿ãŒããªã¿ãŒãã€ãã©ã€ã³/ã³ã³ãã€ã©ãŒ
ããã§ãJavaScriptã³ãŒããå®è¡ãããã€ãã©ã€ã³ã®éšåãã€ãŸãã³ãŒãã解éããã³æé©åãããéšåãããã³äž»èŠãªJavaScriptãšã³ãžã³éã®ããã€ãã®éãã詳ããèŠãŠã¿ãŸãããã
ãã¹ãŠã®äžå¿ã«ããã®ã¯ãã€ã³ã¿ãŒããªã¿ãŒãšæé©åã³ã³ãã€ã©ãŒãå«ããã€ãã©ã€ã³ã§ãã ã€ã³ã¿ãŒããªã¿ãŒã¯æé©åãããŠããªããã€ãã³ãŒããè¿ éã«çæããæé©åã³ã³ãã€ã©ãŒã¯ããé·ãåäœããŸãããåºåã¯é«åºŠã«æé©åããããã·ã³ã³ãŒããæã¡ãŸãã
![](https://habrastorage.org/webt/gh/ap/o6/ghapo68sxzyqniyjqw0v0xewpry.jpeg)
次ã¯ãChromeãšNode.jsã§äœ¿çšãããJavaScriptãšã³ãžã³ã§ããV8ã®åäœã瀺ããã€ãã©ã€ã³ã§ãã
![](https://habrastorage.org/webt/8i/nu/0w/8inu0wkuzc8_enexkp8o7pn7jgi.jpeg)
V8ã®ã€ã³ã¿ãŒããªã¿ãŒã¯IgnitionãšåŒã°ãããã€ãã³ãŒãã®çæãšå®è¡ãæ åœããŸãã ãã€ãã³ãŒãã®åŠçäžã«æ¬¡ã®ã¹ãããã§å®è¡ãé«éåããããã«äœ¿çšã§ãããããã¡ã€ãªã³ã°ããŒã¿ãåéããŸãã ããšãã°ãé¢æ°ãé »ç¹ã«èµ·åããå Žåãé¢æ°ãhotã«ãªããšãçæããããã€ãã³ãŒããšãããã¡ã€ãªã³ã°ããŒã¿ãTurboFanãã€ãŸãæé©åã³ã³ãã€ã©ã«è»¢éããããããã¡ã€ãªã³ã°ããŒã¿ã«åºã¥ããŠé«åºŠã«æé©åããããã·ã³ã³ãŒããçæãããŸãã
![](https://habrastorage.org/webt/ww/n5/zi/wwn5zi7l8vzzcfaik86qwhdtprc.jpeg)
ããšãã°ãFirefoxãšSpiderNodeã§äœ¿çšãããMozillaã®SpiderMonkey JavaScriptãšã³ãžã³ã¯ãå°ãç°ãªãåäœãããŸãã 1ã€ã§ã¯ãªãã2ã€ã®æé©åã³ã³ãã€ã©ããããŸãã ã€ã³ã¿ãŒããªã¿ãŒã¯ãæé©åãããã³ãŒããçæããåºæ¬ã³ã³ãã€ã©ãŒïŒããŒã¹ã©ã€ã³ã³ã³ãã€ã©ãŒïŒã«æé©åãããŸãã IonMonkeyã³ã³ãã€ã©ã¯ãã³ãŒãå®è¡äžã«åéããããããã¡ã€ãªã³ã°ããŒã¿ã«å ããŠãå€§å¹ ã«æé©åãããã³ãŒããçæã§ããŸãã ææ©çæé©åã倱æããå ŽåãIonMonkeyã¯ããŒã¹ã©ã€ã³ã³ãŒãã«æ»ããŸãã
![](https://habrastorage.org/webt/gu/ek/ps/guekpsu0p1nqwv-pynj7ts8skdo.jpeg)
Chakra-Edgeããã³Node-ChakraCoreã§äœ¿çšãããMicrosoftã®JavaScriptãšã³ãžã³ã¯ãéåžžã«ãã䌌ãæ§é ãæã¡ã2ã€ã®æé©åã³ã³ãã€ã©ãŒã䜿çšããŸãã ã€ã³ã¿ããªã¿ã¯SimpleJITã§æé©åãããŸãïŒJITã¯ãJust-In-Timeã³ã³ãã€ã©ãã®ç¥èªã§ãå€å°æé©åãããã³ãŒããçæããŸãããããã¡ã€ãªã³ã°ããŒã¿ãšãšãã«ãFullJITã¯ããã«æé©åãããã³ãŒããäœæã§ããŸãã
![](https://habrastorage.org/webt/z-/bl/0v/z-bl0va0qlsrvgandnxrb08q52g.jpeg)
Safariããã³React Nativeã§äœ¿çšãããAppleã®JavaScriptãšã³ãžã³ã§ããJavaScriptCoreïŒç¥ããŠJSCïŒã«ã¯ãäžè¬ã«3ã€ã®ç°ãªãæé©åã³ã³ãã€ã©ããããŸãã LLIntã¯ããŒã¹ã³ã³ãã€ã©ã«æé©åãããäœã¬ãã«ã€ã³ã¿ãŒããªã¿ã§ãããããŒã¹ã³ã³ãã€ã©ã¯DFGïŒããŒã¿ãããŒã°ã©ãïŒã³ã³ãã€ã©ã«æé©åããããã§ã«FTLïŒFaster Than LightïŒã³ã³ãã€ã©ã«æé©åãããŠããŸãã
äžéšã®ãšã³ãžã³ã«ã¯ãä»ã®ãšã³ãžã³ãããå€ãã®æé©åã³ã³ãã€ã©ãããã®ã¯ãªãã§ããïŒ åŠ¥åããã¹ãŠã§ãã ã€ã³ã¿ãŒããªã¿ãŒã¯ãã€ãã³ãŒãããã°ããåŠçã§ããŸããããã€ãã³ãŒãã ãã§ã¯ç¹ã«å¹ççã§ã¯ãããŸããã äžæ¹ãæé©åã³ã³ãã€ã©ã¯å°ãé·ãåäœããŸãããããå¹ççãªãã·ã³ã³ãŒããçæããŸãã ããã¯ãã³ãŒããè¿ éã«ååŸããïŒã€ã³ã¿ãŒããªã¿ãŒïŒããæ倧ã®ããã©ãŒãã³ã¹ã§ã³ãŒããåŸ æ©ããŠå®è¡ããïŒã³ã³ãã€ã©ãŒãæé©åããïŒéã®åŠ¥åç¹ã§ãã äžéšã®ãšã³ãžã³ã¯ãæéãšå¹çã®ç°ãªãç¹æ§ãæã€ããã€ãã®æé©åã³ã³ãã€ã©ãè¿œå ããããšãéžæããŸããããã«ããããã®åŠ¥åãœãªã¥ãŒã·ã§ã³ãæé©ã«å¶åŸ¡ããå éšããã€ã¹ã®è¿œå ã®è€éãã®ã³ã¹ããç解ã§ããŸãã å¥ã®ãã¬ãŒããªãã¯ã¡ã¢ãªäœ¿çšéã§ã;ããè¯ãç解ã®ããã«ãã®èšäºããã§ãã¯ããŠãã ãã ã
ã€ã³ã¿ããªã¿ãã€ãã©ã€ã³ãšããŸããŸãªJavaScriptãšã³ãžã³ã®ã³ã³ãã€ã©ã®æé©åã®äž»ãªéãã調ã¹ãŸããã ãããã®é«åºŠãªéãã«ããããããããã¹ãŠã®JavaScriptãšã³ãžã³ã¯åãã¢ãŒããã¯ãã£ãåããŠããŸãããã¹ãŠã®ããŒãµãŒãšãããçš®ã®ã€ã³ã¿ãŒããªã¿ãŒ/ã³ã³ãã€ã©ãã€ãã©ã€ã³ãåããŠããŸãã
JavaScriptãªããžã§ã¯ãã¢ãã«
JavaScriptãšã³ãžã³ã®å ±éç¹ãšãJavaScriptãªããžã§ã¯ãã®ããããã£ãžã®ã¢ã¯ã»ã¹ãé«éåããããã«äœ¿çšããããªãã¯ãèŠãŠã¿ãŸãããã ãã¹ãŠã®ã¡ã€ã³ãšã³ãžã³ãåæ§ã®æ¹æ³ã§ãããè¡ãããšãããããŸãã
ECMAScriptä»æ§ã§ã¯ã ããããã£å±æ§ã«äžèŽããæååããŒãæã€èŸæžãšããŠãã¹ãŠã®ãªããžã§ã¯ããå®çŸ©ããŠããŸãã
![](https://habrastorage.org/webt/7s/vv/qq/7svvqqqqfcqi2y-v88nlstidtik.jpeg)
[[Value]]
ã«å ããŠãä»æ§ã§ã¯æ¬¡ã®ããããã£ãå®çŸ©ããŠããŸãã
-
[[Writable]]
ã¯ãããããã£ãåå²ãåœãŠã§ãããã©ããã決å®ããŸãã -
[[Enumerable]]
ã¯ãããããã£ãfor-inã«ãŒãã§è¡šç€ºããããã©ããã決å®ããŸãã -
[[Configurable]]
ã¯ãããããã£ãåé€ã§ãããã©ããã決å®ããŸãã
è¡šèš
[[ ]]
ã¯å¥åŠã«èŠããŸãããããã¯ä»æ§ãJavaScriptã®ããããã£ãèšè¿°ããæ¹æ³ã§ãã
Object.getOwnPropertyDescriptor
APIã䜿çšããŠãJavaScriptã®ç¹å®ã®ãªããžã§ã¯ãããã³ããããã£ã®ãããã®ããããã£å±æ§ãåŒãç¶ãååŸã§ããŸãã
const object = { foo: 42 }; Object.getOwnPropertyDescriptor(object, 'foo'); // â { value: 42, writable: true, enumerable: true, configurable: true }
ãããJavaScriptããªããžã§ã¯ããå®çŸ©ããæ¹æ³ã§ãã é åã¯ã©ãã§ããïŒ
é åã¯ç¹å¥ãªãªããžã§ã¯ããšèããããšãã§ããŸãã å¯äžã®éãã¯ãé åã«ç¹å¥ãªã€ã³ããã¯ã¹åŠçãããããšã§ãã ããã§ãé åã€ã³ããã¯ã¹ã¯ECMAScriptä»æ§ã®ç¹å¥ãªçšèªã§ãã JavaScriptã§ã¯ãé åå ã®èŠçŽ ã®æ°ã«å¶éããããŸãïŒæ倧2³²â 1ïŒã é åã€ã³ããã¯ã¹ã¯ããã®ç¯å²ã®å©çšå¯èœãªã€ã³ããã¯ã¹ãã€ãŸã0ã2³²-2ã®æŽæ°å€ã§ãã
å¥ã®éãã¯ãé åã«ã¯
length
éæ³ã®ããããã£ãããããš
length
ã
const array = ['a', 'b']; array.length; // â 2 array[2] = 'c'; array.length; // â 3
ãã®äŸã§ã¯ãäœææã®é åã®é·ãã¯2ã§ãã 次ã«ãå¥ã®èŠçŽ ãã€ã³ããã¯ã¹2ã«å²ãåœãŠããšãé·ããèªåçã«å¢å ããŸãã
JavaScriptã¯ããªããžã§ã¯ãã ãã§ãªãé åãå®çŸ©ããŸãã ããšãã°ãé åã€ã³ããã¯ã¹ãå«ããã¹ãŠã®ããŒã¯ãæååãšããŠæ瀺çã«è¡šãããŸãã é åã®æåã®èŠçŽ ã¯ããŒã0ãã®äžã«ä¿åãããŸãã
![](https://habrastorage.org/webt/a0/nr/18/a0nr18etozy9wzmzzsd9zbykxt0.jpeg)
length
ããããã£ã¯ãåæäžå¯èœã§æ§æäžå¯èœã§ããããšãå€æããåãªãå¥ã®ããããã£ã§ãã
èŠçŽ ãé åã«è¿œå ããããšããã«ãJavaScriptã¯
length
ããããã£ã®
[[Value]]
ããããã£ã®å±æ§ãèªåçã«æŽæ°ããŸãã
![](https://habrastorage.org/webt/ws/hs/89/wshs896vflemplsrai-wqu5brkw.jpeg)
äžè¬çã«ãé åã¯ãªããžã§ã¯ããšåæ§ã«åäœãããšèšããŸãã
ããããã£ãžã®ã¢ã¯ã»ã¹ã®æé©å
JavaScriptã§ã®ãªããžã§ã¯ãã®å®çŸ©æ¹æ³ãããã£ãã®ã§ãJavaScriptãšã³ãžã³ã䜿çšããŠãªããžã§ã¯ããå¹ççã«æäœããæ¹æ³ãèŠãŠã¿ãŸãããã
æ¥åžžç掻ã§ã¯ãããããã£ãžã®ã¢ã¯ã»ã¹ãæãäžè¬çãªæäœã§ãã ãšã³ãžã³ããããè¿ éã«è¡ãããšã¯éåžžã«éèŠã§ãã
const object = { foo: 'bar', baz: 'qux', }; // Here, we're accessing the property `foo` on `object`: doSomething(object.foo); // ^^^^^^^^^^
ãã©ãŒã
JavaScriptããã°ã©ã ã§ã¯ãåãããããã£ããŒãå€ãã®ãªããžã§ã¯ãã«å²ãåœãŠãããšã¯éåžžã«äžè¬çãªæ¹æ³ã§ãã 圌ãã¯ãã®ãããªãªããžã§ã¯ãã¯åã圢ãããŠãããšèšããŸãã
const object1 = { x: 1, y: 2 }; const object2 = { x: 3, y: 4 }; // `object1` and `object2` have the same shape.
ãŸããéåžžã®ã¡ã«ããºã ã¯ãåã圢åŒã®ãªããžã§ã¯ãã®ããããã£ãžã®ã¢ã¯ã»ã¹ã§ãã
function logX(object) { console.log(object.x); // ^^^^^^^^ } const object1 = { x: 1, y: 2 }; const object2 = { x: 3, y: 4 }; logX(object1); logX(object2);
ãããç¥ã£ãŠããJavaScriptãšã³ãžã³ã¯ããã®åœ¢ç¶ã«åºã¥ããŠãªããžã§ã¯ãã®ããããã£ãžã®ã¢ã¯ã»ã¹ãæé©åã§ããŸãã ä»çµã¿ãã芧ãã ããã
ããããã£xãšyãæã€ãªããžã§ã¯ãããããå ã»ã©èª¬æããèŸæžã®ããŒã¿æ§é ã䜿çšãããšããŸãã ããããã®å±æ§ãæãããŒæååãå«ãŸããŠããŸãã
![](https://habrastorage.org/webt/ss/ne/v9/ssnev9md3jko58annrfjraz35ay.jpeg)
object.y,
ãªã©ã®ããããã£ã«ã¢ã¯ã»ã¹ãã
object.y,
ãJavaScriptãšã³ãžã³ã¯ããŒ
'y'
ã§JSObjectãæ€çŽ¢ãããã®ã¯ãšãªã«äžèŽããããããã£å±æ§ãããŒãããŠãæçµçã«
[[Value]]
è¿ããŸãã
ãããããããã®ããããã£å±æ§ã¯ã¡ã¢ãªã®ã©ãã«ä¿åãããŸããïŒ JSObjectã®äžéšãšããŠä¿åããå¿ èŠããããŸããïŒ ãããè¡ããšãåŸã§ãã®ãã©ãŒã ã®ãªããžã§ã¯ããããã«è¡šç€ºãããŸãããã®å Žåãããããã£åã¯åããã©ãŒã ã®ãã¹ãŠã®ãªããžã§ã¯ãã«å¯ŸããŠç¹°ãè¿ããããããJSObjectèªäœã®ããããã£ãšå±æ§ã®ååãå«ãå®å šãªãã£ã¯ã·ã§ããªãä¿åããã®ã¯ã¹ããŒã¹ã®ç¡é§ã§ãã ããã«ãããå€ãã®éè€ãçºçããã¡ã¢ãªã誀ã£ãŠå²ãåœãŠãããŸãã æé©åã®ããã«ããšã³ãžã³ã¯ãªããžã§ã¯ãã®åœ¢ç¶ãåå¥ã«ä¿åããŸãã
![](https://habrastorage.org/webt/mc/yr/mt/mcyrmt9jarqodgtvnwoxzatiwyy.jpeg)
ãã®
Shape
ã¯ã
[[Value]]
ãé€ããã¹ãŠã®ããããã£åãšå±æ§ãå«ãŸããŸãã 代ããã«ããã©ãŒã ã«ã¯JSObjectå ã®ãªãã»ããå€ãå«ãŸããŠãããããJavaScriptãšã³ãžã³ã¯å€ãæ¢ãå Žæãç¥ã£ãŠããŸãã å ±éã®ãã©ãŒã ãæã€åJSObjectã¯ããã©ãŒã ã®ç¹å®ã®ã€ã³ã¹ã¿ã³ã¹ã瀺ããŸãã ããã§ãåJSObjectã¯ããªããžã§ã¯ãã«åºæã®å€ã®ã¿ãä¿åããå¿ èŠããããŸãã
![](https://habrastorage.org/webt/-0/-q/t5/-0-qt5an58iyuoeskzaibbtgcno.jpeg)
å©ç¹ã¯ããªããžã§ã¯ãããããããããšããã«æããã«ãªããŸãã ãããã1ã€ã®ãã©ãŒã ãæã£ãŠããå Žåããã©ãŒã ãšããããã£ã«é¢ããæ å ±ãäžåºŠã ãä¿åããããããããã®æ°ã¯éèŠã§ã¯ãããŸããã
JavaScriptãšã³ãžã³ã¯ãã¹ãŠããã©ãŒã ãæé©åã®æ段ãšããŠäœ¿çšããŸããããã©ãŒã ã«çŽæ¥ååãä»ããããã§ã¯ãããŸããã
- ã¢ã«ãããã¯ããã¥ã¡ã³ãã§ã¯ãããããé衚瀺ã¯ã©ã¹ïŒJavaScriptã¯ã©ã¹ã«é¡äŒŒïŒãšåŒã³ãŸãã
- V8ã§ã¯ããããããããšåŒã³ãŸãã
- ãã£ã¯ã©ã¯ããããã¿ã€ããšåŒã³ãŸãã
- JavaScriptCoreã¯ããããæ§é äœãšåŒã³ãŸãã
- SpiderMonkeyã¯ããããShapesãšåŒã³ãŸãã
ãã®èšäºã§ã¯ãåŒãç¶ããããã
shapes
ãšåŒã³ãŸãã
é·ç§»ãã§ãŒã³ãšããªãŒ
ç¹å®ã®åœ¢ç¶ã®ãªããžã§ã¯ãããããæ°ããããããã£ãè¿œå ããå Žåã¯ã©ããªããŸããïŒ JavaScriptãšã³ãžã³ã¯æ°ãããã©ãŒã ãã©ã®ããã«å®çŸ©ããŸããïŒ
const object = {}; object.x = 5; object.y = 6;
ãã©ãŒã ã¯ãJavaScriptãšã³ãžã³ã§é·ç§»ãã§ãŒã³ãšåŒã°ãããã®ãäœæããŸãã 以äžã«äŸã瀺ããŸãã
![](https://habrastorage.org/webt/tm/tz/np/tmtznpiuyzkz9vpxqe6byhw2x-k.jpeg)
ãªããžã§ã¯ãã«ã¯æåã¯ããããã£ããªãã空ã®ãã©ãŒã ã«å¯Ÿå¿ããŠããŸãã 次ã®åŒã¯ãå€5ã®
'x'
ããããã£ããã®ãªããžã§ã¯ãã«è¿œå ãããšã³ãžã³ã¯
'x'
ããããã£ãå«ããã©ãŒã ã«ç§»åããå€5ã¯æåã®ãªãã»ãã0ã§JSObjectã«è¿œå ãããŸãã次ã®è¡ã¯
'y'
ããããã£ãè¿œå ãã次ã«ãšã³ãžã³
'x'
ãš
'y'
äž¡æ¹ããã§ã«å«ãã§ãããå€6ããªãã»ãã1ã§JSObjectã«è¿œå ãããã©ãŒã
泚 ïŒããããã£ãè¿œå ãããé åºã¯ããã©ãŒã ã«åœ±é¿ããŸãã ããšãã°ã{xïŒ4ãyïŒ5}ã¯{yïŒ5ãxïŒ4}ãšã¯ç°ãªã圢åŒã«ãªããŸãããã©ãŒã ããšã«ããããã£ããŒãã«å šäœãä¿åããå¿ èŠãããããŸããã 代ããã«ãåãã©ãŒã ã¯ãããã«å«ããããšããŠããæ°ããããããã£ã®ã¿ãç¥ãå¿ èŠããããŸãã ããšãã°ããã®å Žåããxãã«é¢ããæ å ±ãåŸè ã®åœ¢åŒã§ä¿åããå¿ èŠã¯ãããŸãããããã¯ããã§ãŒã³ã®åæ段éã§æ€åºã§ããããã§ãã ãããæ©èœããããã«ããã©ãŒã ã¯ä»¥åã®ãã©ãŒã ãšããŒãžãããŸãã
![](https://habrastorage.org/webt/ks/ou/pv/ksoupve8bep3jsp0v7u2ahyv9jg.jpeg)
JavaScriptã³ãŒãã§
ox
ãèšè¿°ããå ŽåãJavaScriptã¯ã
'x'
ããããã£ããã§ã«æã£ãŠãããã©ãŒã ãæ€åºãããŸã§ãé·ç§»ãã§ãŒã³ã«æ²¿ã£ãŠ
'x'
ããããã£ãæ¢ããŸãã
ããããé·ç§»ãã§ãŒã³ãäœæã§ããªãå Žåã¯ã©ããªããŸããïŒ ããšãã°ã2ã€ã®ç©ºã®ãªããžã§ã¯ããããããããã«ç°ãªãããããã£ãè¿œå ãããšã©ããªããŸããïŒ
const object1 = {}; object1.x = 5; const object2 = {}; object2.y = 6;
ãã®å Žåããã©ã³ãã衚瀺ãããé·ç§»ãã§ãŒã³ã®ä»£ããã«ãé·ç§»ããªãŒãååŸãããŸãã
![](https://habrastorage.org/webt/bc/ga/ax/bcgaaxeskfqwqt8geu_pxmqwdou.jpeg)
空ã®ãªããžã§ã¯ã
a
ãäœæããããããã£
'x'
è¿œå ããŸãã ãã®çµæãåäžã®å€ãš2ã€ã®ãã©ãŒã ãå«ã
JSObject
ããããŸãïŒç©ºãšåäžã®
'x'
ããããã£ãæã€ãã©ãŒã ã
2çªç®ã®äŸã¯ã空ã®ãªããžã§ã¯ã
b
ããããšããäºå®ããå§ãŸããŸãããå¥ã®ããããã£
'y'
ãè¿œå ããŸãã ãã®çµæãããã§ã¯ãã©ãŒã ã®2ã€ã®ãã§ãŒã³ãååŸããŸãããæçµçã«ã¯3ã€ã®ãã§ãŒã³ãååŸããŸãã
ããã¯ãåžžã«ç©ºã®ãã©ãŒã ã§éå§ãããšããããšã§ããïŒ å¿ ãããããã§ã¯ãããŸããã ãšã³ãžã³ã¯ããã§ã«ããããã£ãå«ãŸããŠãã
object literal
æé©åã䜿çšããŸãã 空ã®ãªããžã§ã¯ããªãã©ã«ã§å§ãŸãxãè¿œå ããããæ¢ã«
x
å«ããªããžã§ã¯ããªãã©ã«ããããšããŸãã
const object1 = {}; object1.x = 5; const object2 = { x: 6 };
æåã®äŸã§ã¯ã空ã®ãã©ãŒã ããå§ããå ã»ã©èŠãããã«
x
ãå«ããã§ãŒã³ã«ç§»åããŸãã
object2
ã®å Žåã空ã®ãªããžã§ã¯ããšãã©ã³ãžã·ã§ã³ã§éå§ããã®ã§ã¯ãªããæåããxããã§ã«ãããªããžã§ã¯ããçŽæ¥äœæããã®ãçã«ããªã£ãŠããŸãã
![](https://habrastorage.org/webt/qv/_0/l-/qv_0l-f5eekqflfmto7lfd-awwq.jpeg)
ããããã£
'x'
ãå«ããªããžã§ã¯ãã®ãªãã©ã«ã¯ãæåãã
'x'
ãå«ããã©ãŒã ã§å§ãŸãã空ã®ãã©ãŒã ã¯äºå®äžã¹ããããããŸãã ããã¯ïŒå°ãªããšãïŒV8ãšSpiderMonkeyãè¡ãããšã§ãã æé©åã«ãããé·ç§»ãã§ãŒã³ãççž®ããããªãã©ã«ãããªããžã§ã¯ããçµã¿ç«ãŠããããªããŸãã
Reactã®ã¢ããªã±ãŒã·ã§ã³ã®é©ãã¹ãå€æ æ§ã«é¢ããBenedictã®ããã°æçš¿ã§ã¯ããã®ãããªåŸ®åŠãªç¹ãããã©ãŒãã³ã¹ã«ã©ã®ããã«åœ±é¿ãããã«ã€ããŠèª¬æããŠããŸãã
ããã«ãããããã£
'x'
ã
'y'
ã
'z'
ãæã€3次å ãªããžã§ã¯ãã®ãã€ã³ãã®äŸã衚瀺ãããŸãã
const point = {}; point.x = 4; point.y = 5; point.z = 6;
åã«ç解ããããã«ãã¡ã¢ãªå ã«3ã€ã®ãã©ãŒã ãæã€ãªããžã§ã¯ããäœæããŸãïŒç©ºã®ãã©ãŒã ã¯ã«ãŠã³ãããŸããïŒã ããšãã°ãããã°ã©ã ã§
point.x
ãèšè¿°ããå Žåããã®ãªããžã§ã¯ãã®
'x'
ããããã£ã«ã¢ã¯ã»ã¹ããã«ã¯ãJavaScriptãšã³ãžã³ã¯ãªã³ã¯ããããªã¹ãã«åŸãå¿ èŠããããŸããäžçªäžã«ã
![](https://habrastorage.org/webt/tv/rn/mp/tvrnmp1s5p25dseplockgifr6x0.jpeg)
ç¹ã«ããªããžã§ã¯ãã®å€ãã®ããããã£ã䜿çšããŠé »ç¹ã«è¡ãå Žåãéåžžã«é ããªããŸãã ããããã£ã®æ»çæéã¯
O(n)
ãã€ãŸãããªããžã§ã¯ãã®ããããã£ã®æ°ãšçžé¢ããç·åœ¢é¢æ°ã§ãã ããããã£æ€çŽ¢ãé«éåããããã«ãJavaScriptãšã³ãžã³ã¯ShapeTableããŒã¿æ§é ãè¿œå ããŸãã ShapeTableã¯ãããŒããã©ãŒã ã«ç¹å®ã®æ¹æ³ã§ããããããç®çã®ããããã£ãçæããèŸæžã§ãã
![](https://habrastorage.org/webt/y8/vh/40/y8vh40rwdlx99jdv-rpumbe1u3u.jpeg)
ã¡ãã£ãšåŸ ã£ãŠãä»åºŠã¯èŸæžæ€çŽ¢ã«æ»ããŸã...ããã¯ãŸãã«ãã©ãŒã ãæåã«çœ®ãããšãã®æåã®ãã®ã§ãïŒ ã§ã¯ããªããã©ãŒã ããæ°ã«ããã®ã§ããããïŒ
å®éããã©ãŒã ã¯ã€ã³ã©ã€ã³ãã£ãã·ã¥ãšåŒã°ããå¥ã®æé©åã«è²¢ç®ããŸãã
èšäºã®ç¬¬2éšã§ã€ã³ã©ã€ã³ãã£ãã·ã¥ãŸãã¯ICã®æŠå¿µã«ã€ããŠèª¬æããŸãã4æ9æ¥ã«æåãªãŠã€ã«ã¹ã¢ããªã¹ãããã³éåžžå€æåž«ã§ããAlexander Kolesnikovãéå¬ããç¡æã®ãªãŒãã³ãŠã§ãããŒã«æåŸ ããŸãã