forked from TypeScriptToLua/TypeScriptToLua.github.io
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
37 lines (37 loc) · 25.9 KB
/
index.html
File metadata and controls
37 lines (37 loc) · 25.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="generator" content="Docusaurus v2.0.0-alpha.70">
<link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="TypeScriptToLua Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="TypeScriptToLua Blog Atom Feed">
<link rel="search" type="application/opensearchdescription+xml" title="TypeScriptToLua" href="/opensearch.xml"><title data-react-helmet="true">Caveats | TypeScriptToLua</title><meta data-react-helmet="true" name="twitter:card" content="summary_large_image"><meta data-react-helmet="true" name="docsearch:language" content="en"><meta data-react-helmet="true" name="docsearch:version" content="current"><meta data-react-helmet="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-react-helmet="true" property="og:title" content="Caveats | TypeScriptToLua"><meta data-react-helmet="true" name="description" content="Feature support"><meta data-react-helmet="true" property="og:description" content="Feature support"><meta data-react-helmet="true" property="og:url" content="https://typescripttolua.github.io/docs/caveats"><link data-react-helmet="true" rel="shortcut icon" href="/images/favicon.ico"><link data-react-helmet="true" rel="preconnect" href="https://BH4D9OD16A-dsn.algolia.net" crossorigin="anonymous"><link data-react-helmet="true" rel="canonical" href="https://typescripttolua.github.io/docs/caveats"><link rel="stylesheet" href="/styles.dd4f4be3.css">
<link rel="stylesheet" href="/main.69618293.css">
<link rel="stylesheet" href="/1be78505.0edf629a.css">
<link rel="preload" href="/styles.9e960a30.js" as="script">
<link rel="preload" href="/runtime~main.a6dad94e.js" as="script">
<link rel="preload" href="/main.3eca3247.js" as="script">
<link rel="preload" href="/1.f61e14a0.js" as="script">
<link rel="preload" href="/3.25dbb900.js" as="script">
<link rel="preload" href="/1be78505.fd95f0c2.js" as="script">
<link rel="preload" href="/29.3d07cf4e.js" as="script">
<link rel="preload" href="/935f2afb.7b3a4519.js" as="script">
<link rel="preload" href="/25.3e7184fc.js" as="script">
<link rel="preload" href="/35000c2d.b575671b.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<nav aria-label="Skip navigation links"><button type="button" tabindex="0" class="skipToContent_11B0">Skip to main content</button></nav><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><div aria-label="Navigation bar toggle" class="navbar__toggle" role="button" tabindex="0"><svg aria-label="Menu" width="30" height="30" viewBox="0 0 30 30" role="img" focusable="false"><title>Menu</title><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></div><a class="navbar__brand" href="/"><img src="/images/logo.png" alt="TypeScriptToLua" class="themedImage_YANc themedImage--light_3CMI navbar__logo"><img src="/images/logo.png" alt="TypeScriptToLua" class="themedImage_YANc themedImage--dark_3ARp navbar__logo"><strong class="navbar__title">TypeScriptToLua</strong></a><a class="navbar__item navbar__link" href="/docs/getting-started">Docs</a><a class="navbar__item navbar__link" href="/play">Playground</a></div><div class="navbar__items navbar__items--right"><a href="https://discord.gg/BWAq58Y" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Discord</a><a href="https://github.com/TypeScriptToLua/TypeScriptToLua" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub</a><div class="react-toggle react-toggle--disabled displayOnlyInLargeViewport_2N3Q"><div class="react-toggle-track"><div class="react-toggle-track-check"><span class="toggle_3NWk">🌜</span></div><div class="react-toggle-track-x"><span class="toggle_3NWk">🌞</span></div></div><div class="react-toggle-thumb"></div><input type="checkbox" disabled="" aria-label="Dark mode toggle" class="react-toggle-screenreader-only"></div><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><div class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></div></button></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div><div class="navbar-sidebar"><div class="navbar-sidebar__brand"><a class="navbar__brand" href="/"><img src="/images/logo.png" alt="TypeScriptToLua" class="themedImage_YANc themedImage--light_3CMI navbar__logo"><img src="/images/logo.png" alt="TypeScriptToLua" class="themedImage_YANc themedImage--dark_3ARp navbar__logo"><strong class="navbar__title">TypeScriptToLua</strong></a></div><div class="navbar-sidebar__items"><div class="menu"><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" href="/docs/getting-started">Docs</a></li><li class="menu__list-item"><a class="menu__link" href="/play">Playground</a></li><li class="menu__list-item"><a href="https://discord.gg/BWAq58Y" target="_blank" rel="noopener noreferrer" class="menu__link">Discord</a></li><li class="menu__list-item"><a href="https://github.com/TypeScriptToLua/TypeScriptToLua" target="_blank" rel="noopener noreferrer" class="menu__link">GitHub</a></li></ul></div></div></div></nav><div class="main-wrapper"><div class="docPage_vMrn"><div class="docSidebarContainer_3Ak5" role="complementary"><div class="sidebar_3gvy"><div class="menu menu--responsive thin-scrollbar menu_1yIk"><button aria-label="Open Menu" aria-haspopup="true" class="button button--secondary button--sm menu__button" type="button"><svg aria-label="Menu" class="sidebarMenuIcon_1CUI" width="24" height="24" viewBox="0 0 30 30" role="img" focusable="false"><title>Menu</title><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" href="/docs/getting-started">Getting Started</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/configuration">Configuration</a></li><li class="menu__list-item"><a aria-current="page" class="menu__link menu__link--active active" href="/docs/caveats">Caveats</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/the-self-parameter">The Self Parameter</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/editor-support">Editor Support</a></li><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#!">Advanced</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/advanced/writing-declarations">Writing Declarations</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/advanced/compiler-annotations">Compiler Annotations</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/advanced/language-extensions">Language extensions</a></li></ul></li><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#!">API</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/api/overview">Overview</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/api/plugins">Plugins</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/api/printer">Printer</a></li></ul></li></ul></div></div></div><main class="docMainContainer_2iGs"><div class="container padding-vert--lg docItemWrapper_1bxp"><div class="row"><div class="col docItemCol_U38p"><div class="docItemContainer_a7m4"><article><header><h1 class="docTitle_Oumm">Caveats</h1></header><div class="markdown"><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_prK2" id="feature-support"></a>Feature support<a class="hash-link" href="#feature-support" title="Direct link to heading">#</a></h2><table><thead><tr><th>Feature</th><th align="center">Lua 5.1</th><th align="center">Lua 5.2</th><th align="center">Lua 5.3</th><th align="center">LuaJIT</th></tr></thead><tbody><tr><td><a href="https://github.com/TypeScriptToLua/TypeScriptToLua/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22missing+feature%22" target="_blank" rel="noopener noreferrer">Missing features</a></td><td align="center">❌</td><td align="center">❌</td><td align="center">❌</td><td align="center">❌</td></tr><tr><td><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators" target="_blank" rel="noopener noreferrer">Bitwise operators</a></td><td align="center">❌</td><td align="center">✔️</td><td align="center">✔️</td><td align="center">✔️</td></tr><tr><td><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch" target="_blank" rel="noopener noreferrer">Switch statement</a></td><td align="center">❌</td><td align="center">✔️</td><td align="center">✔️</td><td align="center">✔️</td></tr><tr><td><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/continue" target="_blank" rel="noopener noreferrer"><code>continue</code></a></td><td align="center">❌</td><td align="center">✔️</td><td align="center">✔️</td><td align="center">✔️</td></tr><tr><td>(everything else)</td><td align="center">✔️</td><td align="center">✔️</td><td align="center">✔️</td><td align="center">✔️</td></tr></tbody></table><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_prK2" id="differences-from-javascript"></a>Differences from JavaScript<a class="hash-link" href="#differences-from-javascript" title="Direct link to heading">#</a></h2><p>This project aims for both compilation results to have the same behavior as much as possible, but not at all costs. Since TypeScript is based on JavaScript it also inherited some of the quirks in JavaScript that are not present in Lua. This is where behavior between Lua and JavaScript compilation targets diverge. TypeScriptToLua aims to keep identical behavior as long as <strong>sane</strong> TypeScript is used: if JavaScript-specific quirks are used behavior might differ.</p><p>Below are some of the cases where resulting Lua intentionally behaves different from compiled JS.</p><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_prK2" id="type-directed-emit"></a>Type-directed emit<a class="hash-link" href="#type-directed-emit" title="Direct link to heading">#</a></h3><p>One of TypeScript's <a href="https://github.com/microsoft/TypeScript/wiki/TypeScript-Design-Goals" target="_blank" rel="noopener noreferrer">design goals</a> is <strong>not</strong> using type information to affect program runtime behavior. Though this has many advantages (such as gradual typing), TypeScriptToLua uses type information extensively. This allows us to emit a much more optimized, portable, and correct Lua code.</p><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_prK2" id="boolean-coercion"></a><a href="https://developer.mozilla.org/en-US/docs/Glossary/Falsy" target="_blank" rel="noopener noreferrer">Boolean coercion</a><a class="hash-link" href="#boolean-coercion" title="Direct link to heading">#</a></h3><p>JavaScript and Lua differ in what they evaluate to true/false. TypeScriptToLua adheres to the Lua evaluations.</p><table><thead><tr><th>TypeScript</th><th><em>JavaScript behavior</em></th><th><em>Lua behavior</em></th></tr></thead><tbody><tr><td><code>false</code></td><td><code>false</code></td><td><code>false</code></td></tr><tr><td><code>undefined</code></td><td><code>false</code></td><td><code>false</code></td></tr><tr><td><code>null</code></td><td><code>false</code></td><td><code>false</code></td></tr><tr><td><code>NaN</code></td><td><code>false</code></td><td>⚠️<code>true</code></td></tr><tr><td><code>""</code></td><td><code>false</code></td><td>⚠️<code>true</code></td></tr><tr><td><code>0</code></td><td><code>false</code></td><td>⚠️<code>true</code></td></tr><tr><td>(Everything else)</td><td><code>true</code></td><td><code>true</code></td></tr></tbody></table><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_prK2" id="loose-equality"></a><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#Loose_equality_using" target="_blank" rel="noopener noreferrer">Loose equality</a><a class="hash-link" href="#loose-equality" title="Direct link to heading">#</a></h3><p>TypeScriptToLua makes no difference between <code>==</code> and <code>===</code> when compiling to Lua, treating all comparisons as strict (<code>===</code>).</p><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_prK2" id="array-length"></a>Array Length<a class="hash-link" href="#array-length" title="Direct link to heading">#</a></h3><p><code>Array.prototype.length</code> is translated to Lua's <code>#</code> operator. Due to the way lists are implemented in Lua there can be differences between JavaScript's <code>list.length</code> and Lua's <code>#list</code>. The transpiler does not do anything to remedy these differences, so when working with lists, the transpiled Lua will use the standard Lua conventions. Generally speaking, the situation where these differences occur happen when adding/removing items to a list in a hacky way, or when setting list items to <code>undefined</code>/<code>null</code>.</p><p><strong>Examples:</strong></p><p><strong>Safe (no difference):</strong></p><div class="mdxCodeBlock_1zKU"><pre class="prism-code language-ts codeBlock_222H"><button type="button" aria-label="Copy code to clipboard" class="copyButton_ujp3">Copy</button><a aria-label="Open code on playground" class="playgroundButton_3DKR" target="_blank" href="/play/#code/MYewdgzgLgBAtgTwDIEtowLwwNoEYA0MATIQMwC6A3AFCKrQB0ADgK4QAWAFACwCUNdNFGYgmnfrWRCGEJgBsUwAKacCMXBID0m+FMZylYAOZR2mLESA">Playground</a><code class="codeBlockLines_3zpG" style="color:#393A34;background-color:#f6f8fa"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> myList </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span></div><div class="token-line" style="color:#393A34"><span class="token plain">myList</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">push</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">4</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span></div><div class="token-line" style="color:#393A34"><span class="token plain">myList</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">pop</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span></div><div class="token-line" style="color:#393A34"><span class="token plain">myList</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">splice</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// myList.length == 2</span></div></code></pre></div><p><strong>Differences might occur:</strong></p><div class="mdxCodeBlock_1zKU"><pre class="prism-code language-ts codeBlock_222H"><button type="button" aria-label="Copy code to clipboard" class="copyButton_ujp3">Copy</button><a aria-label="Open code on playground" class="playgroundButton_3DKR" target="_blank" href="/play/#code/MYewdgzgLgBAtgTwDIEtowLwwNoEYA0MATIQMwC6A3AFCKrR7mYwCuYAJgKYBmKYn7GgHoh8ZGigA6ADacwAcygALTFlwwAFKRh8YAKQCGANwMBlYACcUABygBKIA">Playground</a><code class="codeBlockLines_3zpG" style="color:#393A34;background-color:#f6f8fa"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> myList </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span></div><div class="token-line" style="color:#393A34"><span class="token plain">myList</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> undefined</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// myList.length == 1 (3 in JavaScript)</span></div></code></pre></div><div class="mdxCodeBlock_1zKU"><pre class="prism-code language-ts codeBlock_222H"><button type="button" aria-label="Copy code to clipboard" class="copyButton_ujp3">Copy</button><a aria-label="Open code on playground" class="playgroundButton_3DKR" target="_blank" href="/play/#code/MYewdgzgLgBAtgTwDIEtowLwwNoEYA0MATIQMwC6A3AFCKrTYAs5mMArDQPSfzJpQA6ADYBTMAHMoAC0xZSMABRsYKMDABSAQwBumgMrAATigAOUAJRA">Playground</a><code class="codeBlockLines_3zpG" style="color:#393A34;background-color:#f6f8fa"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> myList </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span></div><div class="token-line" style="color:#393A34"><span class="token plain">myList</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">4</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// myList.length == 3 (5 in JavaScript)</span></div></code></pre></div><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_prK2" id="key-iteration-order"></a>Key Iteration Order<a class="hash-link" href="#key-iteration-order" title="Direct link to heading">#</a></h3><p>Even though iterating over object keys with <code>for ... in</code> does not guarantee order in either JavaScript or Lua. Therefore, the iteration order in JavaScript is likely different from the order in Lua.</p><p><strong>Note:</strong> If a specific order is required, it is better to use ordered collections like lists instead.</p><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_prK2" id="iterating-an-array-with-for--in"></a>Iterating an array with <code>for ... in</code><a class="hash-link" href="#iterating-an-array-with-for--in" title="Direct link to heading">#</a></h3><p>Not allowed.</p></div></article><div class="margin-vert--xl"><div class="row"><div class="col"><a href="https://github.com/TypeScriptToLua/TypeScriptToLua.github.io/edit/source/docs/caveats.md" target="_blank" rel="noreferrer noopener"><svg fill="currentColor" height="1.2em" width="1.2em" preserveAspectRatio="xMidYMid meet" role="img" viewBox="0 0 40 40" class="iconEdit_2LL7"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div></div></div><div class="margin-vert--lg"><nav class="pagination-nav" aria-label="Blog list page navigation"><div class="pagination-nav__item"><a class="pagination-nav__link" href="/docs/configuration"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">« Configuration</div></a></div><div class="pagination-nav__item pagination-nav__item--next"><a class="pagination-nav__link" href="/docs/the-self-parameter"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">The Self Parameter »</div></a></div></nav></div></div></div><div class="col col--3"><div class="tableOfContents_2xL- thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#feature-support" class="table-of-contents__link">Feature support</a></li><li><a href="#differences-from-javascript" class="table-of-contents__link">Differences from JavaScript</a><ul><li><a href="#type-directed-emit" class="table-of-contents__link">Type-directed emit</a></li><li><a href="#boolean-coercion" class="table-of-contents__link">Boolean coercion</a></li><li><a href="#loose-equality" class="table-of-contents__link">Loose equality</a></li><li><a href="#array-length" class="table-of-contents__link">Array Length</a></li><li><a href="#key-iteration-order" class="table-of-contents__link">Key Iteration Order</a></li><li><a href="#iterating-an-array-with-for--in" class="table-of-contents__link">Iterating an array with <code>for ... in</code></a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container"><div class="row footer__links"><div class="col footer__col"><h4 class="footer__title">Docs</h4><ul class="footer__items"><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started">Getting Started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/configuration">Configuration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/advanced/writing-declarations">Advanced</a></li></ul></div><div class="col footer__col"><h4 class="footer__title">Community</h4><ul class="footer__items"><li class="footer__item"><a href="https://discord.gg/BWAq58Y" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord</a></li></ul></div><div class="col footer__col"><h4 class="footer__title">More</h4><ul class="footer__items"><li class="footer__item"><a href="https://github.com/TypeScriptToLua" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github</a></li><li class="footer__item"><a class="footer__link-item" href="/play">Playground</a></li></ul></div></div><div class="footer__bottom text--center"><div class="margin-bottom--sm"><a href="https://github.com/TypescriptToLua" target="_blank" rel="noopener noreferrer" class="footerLogoLink_31Aa"><img class="footer__logo" alt="TypescriptToLua Logo" src="/images/logo.png"></a></div><div class="footer__copyright">Copyright © 2021 TypescriptToLua Contributors</div></div></div></footer></div>
<script src="/styles.9e960a30.js"></script>
<script src="/runtime~main.a6dad94e.js"></script>
<script src="/main.3eca3247.js"></script>
<script src="/1.f61e14a0.js"></script>
<script src="/3.25dbb900.js"></script>
<script src="/1be78505.fd95f0c2.js"></script>
<script src="/29.3d07cf4e.js"></script>
<script src="/935f2afb.7b3a4519.js"></script>
<script src="/25.3e7184fc.js"></script>
<script src="/35000c2d.b575671b.js"></script>
</body>
</html>