<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>javascript qlik sense - Qlik Sense - Обучение, учебник, онлайн курс</title>
	<atom:link href="https://qliksense.ivan-shamaev.ru/tag/javascript-qlik-sense/feed/" rel="self" type="application/rss+xml" />
	<link>https://qliksense.ivan-shamaev.ru/tag/javascript-qlik-sense/</link>
	<description>Qlik Sense на русском языке. Пошаговые уроки для изучения Клик Сенс</description>
	<lastBuildDate>Sat, 16 Jan 2021 12:33:48 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.1</generator>

<image>
	<url>https://qliksense.ivan-shamaev.ru/wp-content/uploads/2018/07/QlikSense_ICON2-150x150.png</url>
	<title>javascript qlik sense - Qlik Sense - Обучение, учебник, онлайн курс</title>
	<link>https://qliksense.ivan-shamaev.ru/tag/javascript-qlik-sense/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Обзор функций Javascript в редакторе Qlik Sense Extensions</title>
		<link>https://qliksense.ivan-shamaev.ru/overview-javascript-functions-extensions/</link>
					<comments>https://qliksense.ivan-shamaev.ru/overview-javascript-functions-extensions/#respond</comments>
		
		<dc:creator><![CDATA[qliksense-expert]]></dc:creator>
		<pubDate>Sat, 09 Jan 2021 20:22:39 +0000</pubDate>
				<category><![CDATA[Уровень 2]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[javascript qlik sense]]></category>
		<category><![CDATA[qlik sense api]]></category>
		<category><![CDATA[Qlik Sense Extension]]></category>
		<category><![CDATA[Qlik Sense Extensions]]></category>
		<guid isPermaLink="false">https://qliksense.ivan-shamaev.ru/?p=2488</guid>

					<description><![CDATA[<p>== A == arguments &#8211; alert &#8211; показывает сообщение и ждёт, пока пользователь нажмёт кнопку «ОК» atob &#8211; Функция декодирует строку данных , которые были закодированы с помощью Base64 кодирования. var decodedData = scope.atob(encodedData); angular &#8211; addEventListener &#8211; способ назначения обработчиков на события с привязкой к элементу. Синтаксис: element.addEventListener(event, handler[, options]); event &#8211; Имя<a class="moretag" href="https://qliksense.ivan-shamaev.ru/overview-javascript-functions-extensions/"> Читать дальше&#8230;</a></p>
<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/overview-javascript-functions-extensions/">Обзор функций Javascript в редакторе Qlik Sense Extensions</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>== A ==</h2>
<ul>
<li><strong>arguments</strong> &#8211;</li>
<li><strong>alert </strong>&#8211; <span>показывает сообщение и ждёт, пока пользователь нажмёт кнопку «ОК»</span></li>
<li><strong>atob </strong>&#8211; <span>Функция декодирует строку данных , которые были закодированы с помощью </span><a href="https://developer.mozilla.org/en-US/docs/Glossary/Base64"><span>Base64</span></a><span> кодирования.</span>
<ul>
<li>
<pre class="brush: js notranslate"><code><span class="token keyword">var</span> decodedData <span class="token operator">=</span> scope<span class="token punctuation">.</span><span class="token function">atob</span><span class="token punctuation">(</span>encodedData<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
</li>
</ul>
</li>
<li><strong>angular </strong>&#8211;</li>
<li><strong>addEventListener </strong>&#8211; способ назначения обработчиков на события с привязкой к элементу. Синтаксис:
<ul>
<li><code>element.addEventListener(event, handler[, options]);</code>
<ul>
<li><code>event</code> &#8211; Имя события, например<span> </span><code>"click"</code></li>
<li><code>handler</code> &#8211; Ссылка на функцию-обработчик</li>
<li><code>options</code> &#8211; Дополнительный объект со свойствами: <code>once</code><span>, <code>capture</code>, <code>passive</code>.</span></li>
</ul>
</li>
<li><span>Метод </span><code>addEventListener</code><span> позволяет добавлять несколько обработчиков на одно событие одного элемента</span>
<ul>
<li>
<pre class="EnlighterJSRAW" data-enlighter-language="js">function handler1() {
  alert('Спасибо!');
};

function handler2() {
  alert('Спасибо ещё раз!');
}

elem.onclick = () =&gt; alert("Привет");
elem.addEventListener("click", handler1); // Спасибо!
elem.addEventListener("click", handler2); // Спасибо ещё раз!</pre>
<p><strong></strong></li>
</ul>
</li>
</ul>
</li>
<li><strong>app </strong>&#8211;</li>
</ul>
<h2>== B ==</h2>
<ul>
<li><strong>blur </strong>&#8211;</li>
<li><strong>btoa </strong>&#8211; <span>Метод создает </span><a href="https://developer.mozilla.org/en-US/docs/Glossary/Base64"><span>Base64</span></a><span> закодированную ASCII строку из </span><a href="https://developer.mozilla.org/en-US/docs/Web/API/DOMString/Binary"><span>двоичной строки</span></a> / Binary<span> (то есть </span><code>String</code> <span>объект , в котором каждый символ в строке рассматриваются как байты двоичных данных). Вы можете использовать этот метод для кодирования данных, которые в противном случае могут вызвать проблемы со связью, передать их, а затем использовать метод <code>atob()</code> для повторного декодирования данных.</span>
<ul>
<li>
<pre class="brush: js notranslate"><code><span class="token keyword">var</span> encodedData <span class="token operator">=</span> scope<span class="token punctuation">.</span><span class="token function">btoa</span><span class="token punctuation">(</span>stringToEncode<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
</li>
</ul>
</li>
<li><strong>break </strong>&#8211;</li>
<li><strong>backendApi </strong>&#8211;</li>
</ul>
<h2>== C ==</h2>
<ul>
<li><strong>customElements </strong>&#8211;</li>
<li><strong>closed </strong>&#8211;</li>
<li><strong>clientInformation </strong>&#8211;</li>
<li><strong>crypto </strong>&#8211;</li>
<li><strong>cancelAnimationFrame </strong>&#8211;</li>
<li><strong>cancelIdleCallback </strong>&#8211;</li>
<li><strong>captureEvents </strong>&#8211;</li>
<li><strong>clearInterval </strong>&#8211; <span>отменяет синхронизированное, повторяющееся действие, которое было ранее установлено вызовом </span><code>setInterval()</code><span>.</span></li>
<li><strong>clearTimeout </strong>&#8211; <span>отменяет тайм &#8211; аут ранее установленного вызовом метода </span><code>setTimeout()</code><span>.</span></li>
<li><strong>close </strong>&#8211;</li>
<li><strong>confirm </strong>&#8211; <span>отображает диалоговое окно, которое содержит две кнопки (OK и Cancel), а так же опциональное (необязательное) текстовое сообщение.</span>
<ul>
<li><code>result = confirm(message);</code>
<ul>
<li><code>message</code><span> </span>опциональная (необязательная) строка, которая будет отображена в диалоговом окне.</li>
<li><code>result</code><span> </span>булево значение, указывающее на нажатую кнопку OK или Cancel (<code>true</code> означает OK).</li>
</ul>
</li>
</ul>
</li>
<li><strong>createImageBitmap</strong> &#8211; <span>Метод создает bitmap из источника, при необходимости можно использовать только часть источника. Метод существует в глобальной области как в окнах, так и в рабочих процессах. Он принимает множество различных источников изображений и возвращает </span><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise" data-flaw-src="{{domxref(&quot;Promise&quot;)}}"><code>Promise</code></a>, <span>которое <strong>resolve</strong> в </span><a href="https://developer.mozilla.org/en-US/docs/Web/API/ImageBitmap"><code>ImageBitmap</code></a><span>.</span></li>
<li><strong>chrome </strong>&#8211;</li>
<li><strong>caches </strong>&#8211;</li>
<li><strong>case </strong>&#8211;</li>
<li><strong>catch </strong>&#8211;</li>
<li><strong>continue </strong>&#8211;</li>
</ul>
<h2>== D ==</h2>
<ul>
<li><strong>dimensionInfo </strong>&#8211;</li>
<li><strong>document </strong>&#8211;</li>
<li><strong>devicePixelRatio </strong>&#8211;</li>
<li><strong>defaultStatus </strong>&#8211;</li>
<li><strong>dragomanClosure </strong>&#8211;</li>
<li><strong>define </strong>&#8211;</li>
<li><strong>debounceTimer </strong>&#8211;</li>
<li><strong>dispatchEvent </strong>&#8211;</li>
<li><strong>debugger </strong>&#8211;</li>
<li><strong>default </strong>&#8211;</li>
<li><strong>delete </strong>&#8211;</li>
<li><strong>do </strong>&#8211;</li>
</ul>
<h2>== E ==</h2>
<ul>
<li><strong>external </strong>&#8211;</li>
<li><strong>engineModuleGlobal </strong>&#8211;</li>
<li><strong>else </strong>&#8211;</li>
</ul>
<h2>== F ==</h2>
<ul>
<li><strong>frames </strong>&#8211;</li>
<li><strong>frameElement </strong>&#8211;</li>
<li><strong>fetch </strong>&#8211; <span class="seoSummary"><span>Метод </span><code>WindowOrWorkerGlobalScope</code> <span>Mixin начинается процесс извлечения ресурса из сети, возвращая обещание , которое выполняется , как только отклик доступен. </span></span><span>Обещание преобразуется в </span><code>Response</code> <span>объект, представляющий ответ на ваш запрос. Обещание </span><em><span>не</span></em><span> отклоняется при ошибках HTTP &#8211; оно отклоняется только при ошибках сети. Вы должны использовать </span><code>then</code> <span>обработчики для проверки ошибок HTTP.</span></li>
<li><strong>find </strong>&#8211;</li>
<li><strong>focus </strong>&#8211;</li>
<li><strong>false </strong>&#8211;</li>
<li><strong>finally </strong>&#8211;</li>
<li><strong>for </strong>&#8211;</li>
<li><strong>function </strong>&#8211;</li>
</ul>
<h2>== G ==</h2>
<ul>
<li><strong>getComputedStyle </strong>&#8211;</li>
<li><strong>getSelection </strong>&#8211;</li>
</ul>
<h2>== H ==</h2>
<ul>
<li><strong>html </strong>&#8211;</li>
<li><strong>history </strong>&#8211;</li>
</ul>
<h2>== I ==</h2>
<ul>
<li><strong>innerWidth </strong>&#8211;</li>
<li><strong>innerHeight </strong>&#8211;</li>
<li><strong>isSecureContext </strong>&#8211;</li>
<li><strong>indexedDB </strong>&#8211;</li>
<li><strong>if </strong>&#8211;</li>
<li><strong>in </strong>&#8211;</li>
<li><strong>instanceof </strong>&#8211;</li>
</ul>
<h2>== L ==</h2>
<ul>
<li><strong>location </strong>&#8211;</li>
<li><strong>locationbar </strong>&#8211;</li>
<li><strong>length </strong>&#8211;</li>
<li><strong>localStorage </strong>&#8211;</li>
<li><strong>layout </strong>&#8211;</li>
</ul>
<h2>== M ==</h2>
<ul>
<li><strong>menubar </strong>&#8211;</li>
<li><strong>matchMedia </strong>&#8211;</li>
<li><strong>moveBy </strong>&#8211;</li>
<li><strong>moveTo </strong>&#8211;</li>
</ul>
<h2>== O ==</h2>
<ul>
<li><strong>opener </strong>&#8211; Свойство <b>opener</b> возвращает ссылку на окно, которое открыло текущее. Когда Вы открываете новое окно с помощью open() Вы можете воспользоваться этим свойством, чтобы взаимодействовать с родительским окном из нового окна.
<ul>
<li>
<pre class="EnlighterJSRAW" data-enlighter-language="js">//Создадим новое окно win 
win = window.open();
//Выведем в новое окно текст
win.document.write("Текст нового окна");
//Теперь выведем текст в родительское окно с помощью свойства opener
win.opener.document.write("Текст родительского окна");</pre>
<p>&nbsp;</li>
</ul>
</li>
<li><strong>origin </strong>&#8211;</li>
<li><strong>outerWidth </strong>&#8211;</li>
<li><strong>outerHeight </strong>&#8211;</li>
<li><strong>onsearch </strong>&#8211;</li>
<li><strong>onappinstalled </strong>&#8211;</li>
<li><strong>onbeforeinstallprompt </strong>&#8211;</li>
<li><strong>onabort </strong>&#8211;</li>
<li><strong>onblur </strong>&#8211;</li>
<li><strong>oncancel </strong>&#8211;</li>
<li><strong>oncanplay</strong> &#8211;</li>
<li><strong>oncanplaythrough </strong>&#8211;</li>
<li><strong>onchange </strong>&#8211;</li>
<li><strong>onclick </strong>&#8211;</li>
<li><strong>onclose </strong>&#8211;</li>
<li><strong>oncontextmenu </strong>&#8211;</li>
<li><strong>oncuechange </strong>&#8211;</li>
<li><strong>ondblclick </strong>&#8211;</li>
<li><strong>ondrag </strong>&#8211;</li>
<li><strong>ondragend </strong>&#8211;</li>
<li><strong>ondragenter </strong>&#8211;</li>
<li><strong>ondragleave </strong>&#8211;</li>
<li><strong>ondragover </strong>&#8211;</li>
<li><strong>ondragstart </strong>&#8211;</li>
<li><strong>ondrop</strong> &#8211;</li>
<li><strong>ondurationchange </strong>&#8211;</li>
<li><strong>onemptied </strong>&#8211;</li>
<li><strong>onended </strong>&#8211;</li>
<li><strong>onerror </strong>&#8211;</li>
<li><strong>onfocus </strong>&#8211;</li>
<li><strong>onformdata </strong>&#8211;</li>
<li><strong>oninput </strong>&#8211;</li>
<li><strong>oninvalid </strong>&#8211;</li>
<li><strong>onkeydown </strong>&#8211;</li>
<li><strong>onkeypress </strong>&#8211;</li>
<li><strong>onkeyup </strong>&#8211;</li>
<li><strong>onload </strong>&#8211;</li>
<li><strong>onloadeddata </strong>&#8211;</li>
<li><strong>onloadedmetadata </strong>&#8211;</li>
<li><strong>onloadstart </strong>&#8211;</li>
<li><strong>onmousedown </strong>&#8211;</li>
<li><strong>onmouseenter </strong>&#8211;</li>
<li><strong>onmouseleave </strong>&#8211;</li>
<li><strong>onmousemove </strong>&#8211;</li>
<li><strong>onmouseout </strong>&#8211;</li>
<li><strong>onmouseover </strong>&#8211;</li>
<li><strong>onmouseup </strong>&#8211;</li>
<li><strong>onmousewheel </strong>&#8211;</li>
<li><strong>onpause </strong>&#8211;</li>
<li><strong>onplay </strong>&#8211;</li>
<li><strong>onplaying </strong>&#8211;</li>
<li><strong>onprogress </strong>&#8211;</li>
<li><strong>onratechange </strong>&#8211;</li>
<li><strong>onreset </strong>&#8211;</li>
<li><strong>onresize </strong>&#8211;</li>
<li><strong>onscroll </strong>&#8211;</li>
<li><strong>onseeked </strong>&#8211;</li>
<li><strong>onseeking </strong>&#8211;</li>
<li><strong>onselect </strong>&#8211;</li>
<li><strong>onstalled </strong>&#8211;</li>
<li><strong>onsubmit </strong>&#8211;</li>
<li><strong>onsuspend </strong>&#8211;</li>
<li><strong>ontimeupdate </strong>&#8211;</li>
<li><strong>ontoggle </strong>&#8211;</li>
<li><strong>onvolumechange </strong>&#8211;</li>
<li><strong>onwaiting </strong>&#8211;</li>
<li><strong>onwebkitanimationend </strong>&#8211;</li>
<li><strong>onwebkitanimationiteration </strong>&#8211;</li>
<li><strong>onwebkitanimationstart </strong>&#8211;</li>
<li><strong>onwebkitanimationend </strong>&#8211;</li>
<li><strong>onwheel </strong>&#8211;</li>
<li><strong>onauxclick </strong>&#8211;</li>
<li><strong>ongotpointercapture </strong>&#8211;</li>
<li><strong>onlostpointercapture </strong>&#8211;</li>
<li><strong>onpointerdown </strong>&#8211;</li>
<li><strong>onpointermove </strong>&#8211;</li>
<li><strong>onpointerup </strong>&#8211;</li>
<li><strong>onpointercancel </strong>&#8211;</li>
<li><strong>onpointerover </strong>&#8211;</li>
<li><strong>onpointerout </strong>&#8211;</li>
<li><strong>onpointerenter </strong>&#8211;</li>
<li><strong>onpointerleave </strong>&#8211;</li>
<li><strong>onselectstart </strong>&#8211;</li>
<li><strong>onselectionchange </strong>&#8211;</li>
<li><strong>onanimationend </strong>&#8211;</li>
<li><strong>onanimationiteration </strong>&#8211;</li>
<li><strong>onanimationstart </strong>&#8211;</li>
<li><strong>ontransitionend </strong>&#8211;</li>
<li><strong>onafterprint </strong>&#8211;</li>
<li><strong>onbeforeprint </strong>&#8211;</li>
<li><strong>onbeforeunload </strong>&#8211;</li>
<li><strong>onhashchange </strong>&#8211;</li>
<li><strong>onlanguagechange </strong>&#8211;</li>
<li><strong>onmessage </strong>&#8211;</li>
<li><strong>onmessageerror </strong>&#8211;</li>
<li><strong>onoffline </strong>&#8211;</li>
<li><strong>ononline </strong>&#8211;</li>
<li><strong>onpagehide </strong>&#8211;</li>
<li><strong>onpageshow </strong>&#8211;</li>
<li><strong>onpopstate </strong>&#8211;</li>
<li><strong>onrejectionhandled </strong>&#8211;</li>
<li><strong>onstorage </strong>&#8211;</li>
<li><strong>onunhandledrejection </strong>&#8211;</li>
<li><strong>onunload </strong>&#8211;</li>
<li><strong>open </strong>&#8211;</li>
<li><strong>ondevicemotion </strong>&#8211;</li>
<li><strong>ondeviceorientation </strong>&#8211;</li>
<li><strong>ondeviceorientationabsolute </strong>&#8211;</li>
<li><strong>onpointerrawupdate </strong>&#8211;</li>
<li><strong>openDatabase </strong>&#8211;</li>
</ul>
<h2>== P ==</h2>
<ul>
<li><strong>personalbar </strong>&#8211;</li>
<li><strong>parent </strong>&#8211;</li>
<li><strong>pageXOffset </strong>&#8211;</li>
<li><strong>pageYOffset </strong>&#8211;</li>
<li><strong>performance </strong>&#8211;</li>
<li><strong>postMessage </strong>&#8211;</li>
<li><strong>print </strong>&#8211;</li>
<li><strong>prompt </strong>&#8211; отображает диалоговое окно с необязательным запросом на ввод текста<span>: <code>result <span class="token operator">=</span> <span class="token function">prompt</span><span class="token punctuation">(</span>title<span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token keyword">default</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></span>
<ul>
<li><span>Этот код отобразит модальное окно с текстом, полем для ввода текста и кнопками OK/Отмена.</span>
<ul>
<li><code>result</code> — это строка, содержащая текст, поступивший от пользователя или null.</li>
<li><code>title</code> &#8211; Текст для отображения в окне.</li>
<li><code>default</code> &#8211; Необязательный второй параметр, который устанавливает начальное значение в поле для текста в окне.</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2>== Q ==</h2>
<ul>
<li><strong>queueMicrotask </strong>&#8211; <span class="seoSummary"><span>Метод, который подвергается воздействие на </span><a href="https://developer.mozilla.org/en-US/docs/Web/API/Window"><code>Window</code></a> <span>или </span><a href="https://developer.mozilla.org/en-US/docs/Web/API/Worker"><code>Worker</code></a> <span>интерфейсе, в очередь microtask , которая будет выполнено в безопасное время до контроля возвращения в цикл обработки событий браузера. </span></span><span><strong>Микрозадача</strong> &#8211; это короткая функция, которая будет выполняться после того, как текущая задача завершит свою работу, и когда нет другого кода, ожидающего запуска, до того, как управление контекстом выполнения будет возвращено в цикл событий браузера. Это позволяет вашему коду выполняться без вмешательства в любой другой ожидающий выполнения код с потенциально более высоким приоритетом, но до того, как браузер восстановит контроль над контекстом выполнения, что может зависеть от работы, которую вам нужно выполнить.</span>
<ul>
<li>
<pre class="brush: js notranslate"><code>scope<span class="token punctuation">.</span><span class="token function">queueMicrotask</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
</li>
</ul>
</li>
<li><strong>qJsonp </strong>&#8211;</li>
<li><strong>qvangularGlobal </strong>&#8211;</li>
<li><strong>qListObject </strong>&#8211; <span>является базовым списком и подходит, если вы хотите создать список всех значений из поля. Объект списка &#8211; это визуализация, содержащая одно измерение. При получении макета объекта списка ( <code><span class="syntax">qListObjectDef</span></code> ) <span class="syntax">отображаются</span> все значения. Если выбор применяется к объекту списка, выбранные значения отображаются вместе с исключенными и дополнительными значениями.</span>
<ul>
<li><strong><span class="autonumber">Пример:</span> горизонтальный </strong><span class="syntax"><span><strong>список</strong> <code>initialProperties</code></span></span></li>
<li>
<pre class="EnlighterJSRAW" data-enlighter-language="js">initialProperties : {  
            version : 1.0,  
            qListObjectDef : {  
                qShowAlternatives : true,  
                qFrequencyMode : "V",  
                qSortCriterias : {  
                    qSortByState : 1  
                },  
                qInitialDataFetch : [{  
                    qWidth : 2,  
                    qHeight : 50  
                }]  
            },  
            fixed: true,  
            width: 25,  
            percent: true,  
            selectionMode: "CONFIRM"  
}</pre>
<p>&nbsp;</li>
</ul>
</li>
<li><strong>qHyperCube </strong>&#8211;</li>
<li><strong>qlik </strong>&#8211;</li>
</ul>
<h2>== R ==</h2>
<ul>
<li><strong>rows </strong>&#8211;</li>
<li><strong>releaseEvents </strong>&#8211;</li>
<li><strong>requestAnimationFrame </strong>&#8211;</li>
<li><strong>requestIdleCallback </strong>&#8211;</li>
<li><strong>resizeBy </strong>&#8211;</li>
<li><strong>resizeTo </strong>&#8211;</li>
<li><strong>regeneratorRuntime </strong>&#8211;</li>
<li><strong>require </strong>&#8211;</li>
<li><strong>requirejs </strong>&#8211;</li>
<li><strong>removeEventListener </strong>&#8211;</li>
<li><strong>return </strong>&#8211;</li>
<li><strong>reply </strong>&#8211;</li>
</ul>
<h2>== S ==</h2>
<ul>
<li><strong>self </strong>&#8211;</li>
<li><strong>scrollbars </strong>&#8211;</li>
<li><strong>statusbar </strong>&#8211;</li>
<li><strong>status </strong>&#8211;</li>
<li><strong>screen </strong>&#8211;</li>
<li><strong>scrollX </strong>&#8211;</li>
<li><strong>scrollY </strong>&#8211;</li>
<li><strong>screenX </strong>&#8211;</li>
<li><strong>screenY </strong>&#8211;</li>
<li><strong>screenLeft </strong>&#8211;</li>
<li><strong>screenTop </strong>&#8211;</li>
<li><strong>styleMedia </strong>&#8211;</li>
<li><strong>sessionStorage </strong>&#8211;</li>
<li><strong>scroll </strong>&#8211;</li>
<li><strong>scrollBy </strong>&#8211;</li>
<li><strong>scrollTo </strong>&#8211;</li>
<li><strong>setInterval </strong>&#8211; <span class="seoSummary"><span>Метод, предложенный на </span><a href="https://developer.mozilla.org/en-US/docs/Web/API/Window"><code>Window</code></a> <span>и </span><a href="https://developer.mozilla.org/en-US/docs/Web/API/Worker"><code>Worker</code></a> <span>интерфейсах, неоднократно вызывает функцию или выполняет фрагмент кода, с фиксированной задержкой по времени между каждым вызовом. </span></span><span>Он возвращает идентификатор интервала, который однозначно определяет интервал, поэтому вы можете удалить его позже, позвонив </span><code>clearInterval()</code><span>. Этот метод определяется </span><a href="https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope"><code>WindowOrWorkerGlobalScope</code></a> <span>миксином.</span>
<ul>
<li>
<pre class="brush: js notranslate"><code><span class="token keyword">var</span> intervalID <span class="token operator">=</span> scope<span class="token punctuation">.</span><span class="token function">setInterval</span><span class="token punctuation">(</span>func<span class="token punctuation">,</span> <span class="token punctuation">[</span>delay<span class="token punctuation">,</span> arg1<span class="token punctuation">,</span> arg2<span class="token punctuation">,</span> <span class="token operator">...</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
</li>
</ul>
</li>
<li><strong>setTimeout </strong>&#8211; <span>Метод </span><code>WindowOrWorkerGlobalScope</code> <span>Mixin (и преемника </span><code>Window.setTimeout()</code><span>) устанавливает таймер , который выполняет функцию или указанный фрагмент кода один раз, когда таймер истекает.</span>
<ul>
<li>
<pre class="brush: js notranslate"><code><span class="token keyword">var</span> timeoutID <span class="token operator">=</span> scope<span class="token punctuation">.</span><span class="token function">setTimeout</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">[</span><span class="token punctuation">,</span> delay<span class="token punctuation">,</span> arg1<span class="token punctuation">,</span> arg2<span class="token punctuation">,</span> <span class="token operator">...</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
</li>
</ul>
</li>
<li><strong>stop </strong>&#8211;</li>
<li><strong>showDirectory </strong>&#8211;</li>
<li><strong>showOpenFilePicker </strong>&#8211;</li>
<li><strong>showSaveFilePicker </strong>&#8211;</li>
<li><strong>speechSynthesis </strong>&#8211;</li>
<li><strong>switch </strong>&#8211;</li>
</ul>
<h2>== T ==</h2>
<ul>
<li><strong>this </strong>&#8211;</li>
<li><strong>toolbar </strong>&#8211;</li>
<li><strong>top </strong>&#8211;</li>
<li><strong>trustedTypes </strong>&#8211;</li>
<li><strong>throw </strong>&#8211;</li>
<li><strong>true </strong>&#8211;</li>
<li><strong>try </strong>&#8211;</li>
<li><strong>typeof </strong>&#8211;</li>
</ul>
<h2>== V ==</h2>
<ul>
<li><strong>visualViewport </strong>&#8211;</li>
<li><strong>var </strong>&#8211;</li>
<li><strong>void </strong>&#8211;</li>
</ul>
<h2>== W ==</h2>
<ul>
<li><strong>window </strong>&#8211;</li>
<li><strong>webkitStorageInfo </strong>&#8211;</li>
<li><strong>webkitCancelAnimationFrame </strong>&#8211;</li>
<li><strong>webkitRequestAnimationFrame </strong>&#8211;</li>
<li><strong>webkitRequestFileSystem </strong>&#8211;</li>
<li><strong>webkitResolveLocalFileSystemURL </strong>&#8211;</li>
<li><strong>webpackJsonpsensei_codearea </strong>&#8211;</li>
<li><strong>while </strong>&#8211;</li>
<li><strong>with </strong>&#8211;</li>
</ul>
<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/overview-javascript-functions-extensions/">Обзор функций Javascript в редакторе Qlik Sense Extensions</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://qliksense.ivan-shamaev.ru/overview-javascript-functions-extensions/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Работа с визуализацией JS. Обзор основных концепций JavaScript</title>
		<link>https://qliksense.ivan-shamaev.ru/work-with-visualization-js-overview-of-key-concepts/</link>
					<comments>https://qliksense.ivan-shamaev.ru/work-with-visualization-js-overview-of-key-concepts/#respond</comments>
		
		<dc:creator><![CDATA[qliksense-expert]]></dc:creator>
		<pubDate>Sun, 13 Oct 2019 22:51:46 +0000</pubDate>
				<category><![CDATA[Уровень 2]]></category>
		<category><![CDATA[javascript qlik sense]]></category>
		<category><![CDATA[Обзор основных концепций JavaScript]]></category>
		<category><![CDATA[Работа с визуализацией JS]]></category>
		<guid isPermaLink="false">https://qliksense.ivan-shamaev.ru/?p=1802</guid>

					<description><![CDATA[<p>Что такое Virtual DOM? Что такое виртуальный DOM? Виртуальный DOM (VDOM) — это концепция программирования, в которой идеальное или «виртуальное» представление пользовательского интерфейса хранится в памяти и синхронизируется с «настоящим» DOM при помощи библиотеки, такой как ReactDOM. Этот процесс называется согласованием. Такой подход и делает API React декларативным: вы указываете,<a class="moretag" href="https://qliksense.ivan-shamaev.ru/work-with-visualization-js-overview-of-key-concepts/"> Читать дальше&#8230;</a></p>
<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/work-with-visualization-js-overview-of-key-concepts/">Работа с визуализацией JS. Обзор основных концепций JavaScript</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h1 class="question__title" itemprop="name ">Что такое Virtual DOM? Что такое виртуальный DOM?</h1>
<p><strong>Виртуальный DOM (VDOM)</strong> — это концепция программирования, в которой идеальное или «виртуальное» представление пользовательского интерфейса хранится в памяти и синхронизируется с «настоящим» DOM при помощи библиотеки, такой как ReactDOM. Этот процесс называется согласованием.</p>
<p>Такой подход и делает API React декларативным: вы указываете, в каком состоянии должен находиться пользовательский интерфейс, а React добивается, чтобы DOM соответствовал этому состоянию. Это абстрагирует манипуляции с атрибутами, обработку событий и ручное обновление DOM, которые в противном случае пришлось бы использовать при разработке приложения.</p>
<p><strong>Поскольку «виртуальный DOM»</strong> — это скорее паттерн, чем конкретная технология, этим термином иногда обозначают разные понятия. В мире React «виртуальный DOM» обычно ассоциируется с React-элементами , поскольку они являются объектами, представляющими пользовательский интерфейс. Тем не менее, React также использует внутренние объекты, называемые «волокнами» (fibers), чтобы хранить дополнительную информацию о дереве компонентов. Их также можно считать частью реализации «виртуального DOM» в React.</p>
<h2>Теневой DOM похож на виртуальный DOM?</h2>
<p>Нет, они совсем разные. Теневой DOM (Shadow DOM) — это браузерная технология, предназначенная в основном для определения переменных и CSS в веб-компонентах. Виртуальный DOM — это концепция, реализованная библиотеками в JavaScript поверх API браузера.</p>
<h2>Что такое «React Fiber»?</h2>
<p>Fiber — новый механизм согласования в React 16, основная цель которого сделать рендеринг виртуального DOM инкрементным.</p>
<h2>Пояснение с Toster.RU</h2>
<p><span>Ну вот есть DOM. Он медленный, и дергать его просто так не стоит. А есть виртуальный DOM, что-то типа прослойки между вашим кодом и реальным DOM. Вы можете дергать виртуальный DOM сколько вам душе угодно, а прослойка эта соберет всю инфу о том как вы чего делали, и попробует оптимизировать взаимодействие с реальным DOM что бы вышло как можно меньше действий.</span><br /><br /><span>Пример &#8211; задача простая, у вас есть таблица и нужно постоянно обновлять ячейки новым значением. Значение приходят из апишки раз в пару десятков милисекунд (какая-то реалтайм статистика к примеру). Значения эти &#8211; просто массив данных.</span><br /><br /><span>Решение в лоб &#8211; каждый раз когда приходят данные, дропать старую таблицу, проходить циклом по массиву и формировать новую. Это куча операций с DOM. У вас каждые n милисекунд будет полностью перестраиваться вся эта штука, дропаться и создаваться новые элементы и все это будет ужасно долго пересчитываться и перерисовываться.</span><br /><br /><span>А теперь добавим между всем этим виртуальную апишку, которая запоминает что она там в прошлый раз создала и что надо в этот раз создать. Вы все так же влоб проходите циклом по массиву и просите виртуальный дом построить новую апишку, а виртуальный дом будет стараться переиспользовать то что у него уже есть, ну и все в таком духе. За счет этого получается нефиговый прирост производительности (но есть потери на работу самого виртуального DOM, зато можно фигачить как хочешь).</span><br /><br /><span>Если же прослойку эту сделать со своим интерфейсом, можно получить слой абстракции для работы с UI. Именно это предлагает тот же React. Слой абстракции над UI. Вы можете работать с реактом, но UI будет отрисовываться не через DOM а скажем&#8230; это может быть нативный интерфейс мобильной платформы (гуглить native-react). Ну и т.д.</span></p>
<h1>Рендеринг – отображение конечного результата</h1>
<p><strong>Javascript фреймворки</strong> в первую очередь стоит сравнить по рендерингу страницы. Современная архитектура допускает два вида:</p>
<ul>
<li><strong>на стороне клиента</strong> (страница отрисовывается за счет мощностей ПК пользователя)</li>
<li>или <strong>на стороне сервера</strong>.</li>
</ul>
<p><strong>DOM – Document Object Model</strong> – объектная модель документа, позволяющая считывать и менять содержимое, оформление и даже структуру html-документов. Каждый из фреймворков подходит по-своему к обработке DOM что и оказывает влияние на рендеринг конечной страницы, отображаемой на экране пользователя.</p>
<p>Vue.js и React создают копию DOM, обрабатывают ее, а затем результат сравнивается с исходной версией. В конечном документе (то есть на экране пользователя) заменяются только те части страницы, которые отличаются от результатов обработки.</p>
<p>Это значительно ускоряет загрузку и рендеринг страницы. Соответственно сокращается объем трафика, что особенно важно для пользователей мобильных устройств.</p>
<p>В корне отличается подход к обработке DOM фреймворком Angular версии 1.x и выше. Здесь происходит разделение на два потока, причем за рендеринг DOM «отвечает» браузер (клиентская часть), а за создание директив, загрузку кода и сервисов – общий поток (серверная часть).</p>
<p>Но это совсем не значит, что рендеринг происходит на стороне клиента – визуализация по-прежнему производится серверами. Следовательно, SEO оптимизация не вызовет затруднений. Поисковым роботам будет предоставлена корректная страница при индексации.</p>
<h1>Model-View-Controller (MVC) &#8211; шаблон проектирования Модель-Представление-Контроллер</h1>
<p><strong>Что такое шаблон проектирования Model-View-Controller?</strong> MVC включает в себя три главных его части:</p>
<ul>
<li><strong>Model (Модель)</strong> &#8211; хранит данные приложения (предоставляет данные и реагирует на команды контроллера, изменяя своё состояние);</li>
<li><strong>View (Представление)</strong> &#8211; представляет модель клиенту (отвечает за отображение данных модели пользователю, реагируя на изменения модели);</li>
<li><strong>Controller (Контроллер)</strong> &#8211; модифицирует модель, реагируя на события от клиента (интерпретирует действия пользователя, оповещая модель о необходимости изменений).</li>
</ul>
<p><img fetchpriority="high" decoding="async" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/10/mvc_javascript_qliksense_review.jpg" alt="" width="329" height="323" class="aligncenter size-full wp-image-1813" srcset="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/10/mvc_javascript_qliksense_review.jpg 329w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2019/10/mvc_javascript_qliksense_review-300x295.jpg 300w" sizes="(max-width: 329px) 100vw, 329px" /></p>
<h1>HTML Canvas</h1>
<p><strong>HTML Canvas</strong> — это удивительная технология для рисования, встроенная во все современные браузеры. С помощью Canvas вы можете рисовать фигуры, управлять фотографиями, создавать игры и анимировать фактически что угодно — всё это с правильными веб-стандартами. Вы даже можете делать мобильные приложения.</p>
<p><strong>Тег &lt;canvas&gt;</strong> &#8211; это элемент HTML 5, который предназначен для создания растрового изображения при помощи JavaScript.</p>
<h1>Node.JS</h1>
<p>Node.js разработал Райан Даль (англ. Ryan Dahl) в 2009 году.</p>
<p>Node.js — это среда выполнения JavaScript. Это JavaScript фреймворк, основанный на движке V8 от Google, созданный для решения проблемы одновременной обработки большого количества запросов.</p>
<p>Движок принимает код JavaScript и компилирует его в C++, который выполняется с молниеносной скоростью. Движок V8 ( он транслирует JavaScript в машинный код) делает это «на лету».</p>
<h1>Frontend и Backend &#8211; что это такое и как они взаимодействуют?</h1>
<ul>
<li><strong>Фронтенд</strong> &#8211; все, что браузер может читать, выводить на экран и / или запускать. То есть это HTML, CSS и JavaScript. <strong>Frontend</strong> &#8211; это разработка пользовательского интерфейса и функциональности, которые работают на клиентской стороне веб-сайта или приложения.<br />
<ul style="list-style-type: circle;">
<li class="stk-reset stk-list-item stk-theme_20067__mb_05 stk-theme_20067__color_20067_custom_color_1"><strong class="stk-reset">HTML (HyperText Markup Language)</strong> — язык разметки документов, при помощи которого формируется структура страницы: заголовки, абзацы, списки и так далее;</li>
<li class="stk-reset stk-list-item stk-theme_20067__mb_05 stk-theme_20067__color_20067_custom_color_1"><strong class="stk-reset">CSS (Cascading Style Sheets)</strong> — язык для описания и стилизации внешнего вида документа. Благодаря CSS-коду ваш браузер понимает, как именно отображать элементы. CSS задает цвета и параметры шрифтов, определяет, как будут располагаться разные блоки сайта, и так далее. Еще он позволяет выводить один и тот же документ в разных стилях, например, для печати (обычной или шрифтом Брайля), вывода передачи на экран или чтения голосом;</li>
<li class="stk-reset stk-list-item stk-theme_20067__mb_05 stk-theme_20067__color_20067_custom_color_1"><strong class="stk-reset">JavaScript</strong> — это язык, который создавался для того, чтобы оживить веб-страницы. Его задача — реагировать на действия пользователя, обрабатывать клики мышкой, перемещения курсора, нажатия клавиш. Еще он посылает запросы на сервер и загружает данные без перезагрузки страницы, позволяет вводить сообщения и многое другое.</li>
</ul>
</li>
<li><strong>Бэкенд</strong> &#8211; все, что работает на сервере, то есть «не в браузере» или «на компьютере/клиенте».<br /><strong>Backend</strong> &#8211; это серверная логика веб-приложения. Здесь реализуется работа с хранилищем данных, поэтому человек, занимающийся разработкой серверной логики, должен иметь навыки работы с базами данных.
<ul style="list-style-type: circle;">
<li><strong>Backend-разработчик</strong> может применять любые инструменты, доступные на его сервере: Ruby, PHP, Python, Java, Node.JS, C# и т.д.</li>
<li>Для backend-разработки используются разные системы управления базами данных: MySQL, PostgreSQL, SQLite, MongoDB и т.п.</li>
</ul>
</li>
<li><span><strong>Взаимодействие frontend и backend</strong> происходит по кругу: frontend отправляет пользовательскую информацию в backend, там она обрабатывается и возвращается обратно, приняв понятную форму.</span></li>
</ul>
<h1>Что такое FizzBizz тест</h1>
<p><strong>FizzBizz</strong> &#8211; как правило, небольшой тест, направленный на отсеивание неопытных разработчиков. Я думаю, вы будете удивленны как много javascript разработчиков не умеют писать такие тесты.</p>
<p>Как правило, такие тесты не несут в себе большой смысловой нагрузки. Он направлен исключительно на проверку способностей потенциальных кандидатов.</p>
<h1>Тестирование JavaScript</h1>
<p><strong>Автоматизированное тестирование</strong> – это когда тесты написаны отдельно от кода, и можно в любой момент запустить их и проверить все важные случаи использования.</p>
<h2>BDD (Behaviour Driven Development) – поведенческие тесты кода</h2>
<p>BDD предполагает описание тестировщиком или аналитиком пользовательских сценариев на естественном языке — если можно так выразиться, на языке бизнеса.</p>
<p>туду</p>
<h2>TDD (Test Driven Development) &#8211; Разработка через тестирование</h2>
<p>TDD — это больше о программировании и тестировании на уровне технической реализации продукта, когда тесты создают сами разработчики.</p>
<p>туду</p>
<h2>Karma</h2>
<p><strong>Karma</strong> &#8211; это консольный инструмент для запуска тестов, который умеет следить за изменениями исходного кода и отображать процент покрытия кода тестами.</p>
<h2>Jasmine</h2>
<p><strong>Jasmine</strong><span> &#8211; фреймворк для написания js-тестов.</span></p>



<h1>Источники для обзора</h1>
<ol>
<li>https://ru.reactjs.org/docs/faq-internals.html</li>
<li>https://toster.ru/q/211004</li>
<li>https://mkdev.me/posts/sravnenie-javascript-freymvorkov-vue-js-react-i-angular-2019</li>
<li>https://skillbox.ru/media/code/frontend_i_backend_razrabotka</li>
<li>https://devacademy.ru/article/javascript/</li>
<li>https://jazzteam.org/ru/technical-articles/karma-and-jasmine-test-running-manual/</li>
<li>https://habr.com/ru/company/jugru/blog/329468/</li>
</ol>
<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/work-with-visualization-js-overview-of-key-concepts/">Работа с визуализацией JS. Обзор основных концепций JavaScript</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://qliksense.ivan-shamaev.ru/work-with-visualization-js-overview-of-key-concepts/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Разработка web приложений AngularJS &#038; Qlik Sense API. Frontend &#038; Backend</title>
		<link>https://qliksense.ivan-shamaev.ru/web-application-development-angularjs-qlik-api/</link>
					<comments>https://qliksense.ivan-shamaev.ru/web-application-development-angularjs-qlik-api/#respond</comments>
		
		<dc:creator><![CDATA[qliksense-expert]]></dc:creator>
		<pubDate>Wed, 09 Oct 2019 03:23:51 +0000</pubDate>
				<category><![CDATA[Уровень 2]]></category>
		<category><![CDATA[angular.js qlik engine api]]></category>
		<category><![CDATA[angular.js qlik sense engine api]]></category>
		<category><![CDATA[angularjs]]></category>
		<category><![CDATA[API Qlik Engine]]></category>
		<category><![CDATA[javascript qlik sense]]></category>
		<category><![CDATA[qlik sense engine api]]></category>
		<category><![CDATA[Qlik Sense Mashup]]></category>
		<guid isPermaLink="false">https://qliksense.ivan-shamaev.ru/?p=1752</guid>

					<description><![CDATA[<p>Краткий 5 минутное AngularJS Guide для Qlik Sense Developer Angular.js сравнительно новый проект в мире JavaScript фреймворков. Впервые он был представлен в 2012 году сотрудником Google, и с тех пор стал проектом, поддерживаемым Google. Его цель &#8211; упростить одностраничные приложения, предоставив разработчикам MVC-подобную структуру для JavaScript. Он в основном работает,<a class="moretag" href="https://qliksense.ivan-shamaev.ru/web-application-development-angularjs-qlik-api/"> Читать дальше&#8230;</a></p>
<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/web-application-development-angularjs-qlik-api/">Разработка web приложений AngularJS &#038; Qlik Sense API. Frontend &#038; Backend</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Краткий 5 минутное AngularJS Guide для Qlik Sense Developer</h2>



<p><strong>Angular.js</strong> сравнительно новый проект в мире JavaScript фреймворков. Впервые он был представлен в 2012 году сотрудником Google, и с тех пор стал проектом, поддерживаемым Google. Его цель &#8211; упростить одностраничные приложения, предоставив разработчикам MVC-подобную структуру для JavaScript. Он в основном работает, предоставляя пользовательские теги HTML, которые помогают связывать элементы DOM с моделью, через переменные JavaScript или данные JSON. Вы можете лучше использовать свой JavaScript, разбив его на контроллеры, а также модули.</p>
<p>С Angular вы получаете более чистый код JavaScript и автоматическое двухстороннее связывание данных, что идеально подходит для тяжелых сайтов AJAX.</p>
<h3><span>Скачать Angular</span></h3>
<p>Начнем с добавления Angular.js в наши проекты, поэтому зайдите на сайт <a href="http://angularjs.org" target="_blank" rel="noopener noreferrer">http://angularjs.org</a> и загрузите копию файла js в свой проект (директория с файлами html). Добавьте в разделе Head обращение к файлу js.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">&lt;script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.2/angular.min.js"&gt;&lt;/script&gt;</pre>
<h2>Создайте файл Javascript с именем app.js</h2>
<p>&#8230;</p>
<p>https://www.thatsoftwaredude.com/content/6100/a-quick-5-minute-guide-to-angular-js</p>



<h2 class="wp-block-heading">Использование Angular.JS для работы с Qlik Sense Engine API</h2>



<p><span class="strong"><strong><span>AngularJS</span></strong></span><span> является структурной основой</span><span> для </span><span>построения динамических веб-приложений на JavaScript. Он расширяет классический синтаксис HTML, внедряя динамические angular выражения (angular expressions), которые обновляют или модифицируют DOM на основе кода. Он очень удобен для динамического связывания данных на веб-странице HTML (отправка данных на страницу и отправка данных к api). <strong>Qlik Sense&#8217;s native Straight Table</strong> (стандартная прямая таблица) была разработана на основе Angular.</span></p>
<p><span>Как и любая полезная библиотека, AngularJS упрощает разработку приложений, предоставляя разработчику более высокий уровень абстракции написания кода.</span></p>
<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/web-application-development-angularjs-qlik-api/">Разработка web приложений AngularJS &#038; Qlik Sense API. Frontend &#038; Backend</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://qliksense.ivan-shamaev.ru/web-application-development-angularjs-qlik-api/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>JavaScript для разработчиков Qlik Sense за 10 минут</title>
		<link>https://qliksense.ivan-shamaev.ru/javascript-for-qlik-sense-developers-in-5-minutes/</link>
					<comments>https://qliksense.ivan-shamaev.ru/javascript-for-qlik-sense-developers-in-5-minutes/#respond</comments>
		
		<dc:creator><![CDATA[qliksense-expert]]></dc:creator>
		<pubDate>Thu, 22 Aug 2019 06:08:17 +0000</pubDate>
				<category><![CDATA[Уровень 2]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[javascript qlik sense]]></category>
		<category><![CDATA[js qlik sense]]></category>
		<guid isPermaLink="false">https://qliksense.ivan-shamaev.ru/?p=1517</guid>

					<description><![CDATA[<p>Источник: https://learnxinyminutes.com/docs/ru-ru/javascript-ru/</p>
<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/javascript-for-qlik-sense-developers-in-5-minutes/">JavaScript для разработчиков Qlik Sense за 10 минут</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><strong>Источник:</strong>  <a rel="noreferrer noopener" aria-label=" (opens in a new tab)" href="https://learnxinyminutes.com/docs/ru-ru/javascript-ru/" target="_blank">https://learnxinyminutes.com/docs/ru-ru/javascript-ru/</a> </p>



<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// Си-подобные комментарии. Однострочные комментарии начинаются с двух символов слэш,
/* а многострочные комментарии начинаются с последовательности слэш-звёздочка
   и заканчиваются символами звёздочка-слэш */

// Инструкции могут заканчиваться точкой с запятой ;
doStuff();

// ... но она необязательна, так как точки с запятой автоматически вставляются
// везде, где есть символ новой строки, за некоторыми исключениями.
doStuff()

// Так как эти исключения могут привести к неожиданным результатам, мы будем всегда
// использовать точку с запятой в этом руководстве.

///////////////////////////////////
// 1. Числа, Строки и Операторы

// В JavaScript только один тип числа (64-bit IEEE 754 double).
// Он имеет 52-битную мантиссу, которой достаточно для хранения целых чисел
// с точностью вплоть до 9✕10¹⁵.
3; // = 3
1.5; // = 1.5

// Некоторые простые арифметические операции работают так, как вы ожидаете.
1 + 1; // = 2
0.1 + 0.2; // = 0.30000000000000004 (а некоторые - нет)
8 - 1; // = 7
10 * 2; // = 20
35 / 5; // = 7

// Включая деление с остатком.
5 / 2; // = 2.5

// Побитовые операции также имеются; когда вы проводите такую операцию,
// ваше число с плавающей запятой переводится в целое со знаком 
// длиной *до* 32 разрядов.
1 &lt;&lt; 2; // = 4

// Приоритет в выражениях можно явно задать скобками.
(1 + 3) * 2; // = 8

// Есть три специальных значения, которые не являются реальными числами:
Infinity; // "бесконечность", например, результат деления на 0
-Infinity; // "минус бесконечность", результат деления отрицательного числа на 0
NaN; // "не число", например, результат деления 0/0

// Существует также логический тип.
true;
false;

// Строки создаются при помощи двойных или одинарных кавычек.
'абв';
"Привет, мир!";

// Для логического отрицания используется восклицательный знак.
!true; // = false
!false; // = true

// Строгое равенство ===
1 === 1; // = true
2 === 1; // = false

// Строгое неравенство !==
1 !== 1; // = false
2 !== 1; // = true

// Другие операторы сравнения
1 &lt; 10; // = true
1 > 10; // = false
2 &lt;= 2; // = true
2 >= 2; // = true

// Строки объединяются при помощи оператора +
"привет, " + "мир!"; // = "Привет, мир!"

// и сравниваются при помощи &lt; и >
"a" &lt; "b"; // = true

// Проверка равенства с приведением типов осуществляется двойным символом равно
"5" == 5; // = true
null == undefined; // = true

// ...если только не использовать ===
"5" === 5; // = false
null === undefined; // = false 

// ...приведение типов может привести к странному поведению...
13 + !0; // 14
"13" + !0; // '13true'

// Вы можете получить доступ к любому символу строки, используя метод charAt
"Это строка".charAt(0);  // = 'Э'

// ...или используйте метод substring, чтобы получить более крупные части
"Привет, мир".substring(0, 6); // = "Привет"

// length - это свойство, для его получения не нужно использовать ()
"Привет".length; // = 6

// Также есть null и undefined
null; // Намеренное отсутствие значения
undefined; // используется для обозначения переменных, не имеющих
           // присвоенного значения (хотя непосредственно undefined
           // является значением)

// false, null, undefined, NaN, 0 и "" — это ложь; всё остальное - истина.
// Следует отметить, что 0 — это ложь, а "0" — истина, несмотря на то, что
// 0 == "0".

///////////////////////////////////
// 2. Переменные, Массивы и Объекты

// Переменные объявляются при помощи ключевого слова var. JavaScript — язык с
// динамической типизацией, поэтому не нужно явно указывать тип. Для присваивания
// значения переменной используется символ =
var someVar = 5;

// если вы пропустите слово var, вы не получите сообщение об ошибке, ...
someOtherVar = 10;

// ...но ваша переменная будет создана в глобальном контексте, а не в текущем,
// где вы ее объявили.

// Переменным, объявленным без присвоения, устанавливается значение undefined.
var someThirdVar; // = undefined

// У математических операций есть сокращённые формы:
someVar += 5; // как someVar = someVar + 5; someVar теперь имеет значение 10
someVar *= 10; // теперь someVar имеет значение 100

// Ещё более краткая запись увеличения и уменьшения на единицу:
someVar++; // теперь someVar имеет значение 101
someVar--; // вернулись к 100

// Массивы — это нумерованные списки, содержащие значения любого типа.
var myArray = ["Привет", 45, true];

// Их элементы могут быть доступны при помощи синтаксиса с квадратными скобками.
// Индексы массивов начинаются с нуля.
myArray[1]; // = 45

// Массивы можно изменять, как и их длину,
myArray.push("Мир");
myArray.length; // = 4

// добавлять и редактировать определённый элемент
myArray[3] = "Привет";

// Объекты в JavaScript похожи на словари или ассоциативные массивы в других
// языках: неупорядоченный набор пар ключ-значение.
var myObj = {key1: "Привет", key2: "Мир"};

// Ключи — это строки, но кавычки необязательны, если строка удовлетворяет
// ограничениям для имён переменных. Значения могут быть любых типов.
var myObj = {myKey: "myValue", "my other key": 4};

// Атрибуты объектов можно также получить, используя квадратные скобки
myObj["my other key"]; // = 4

// или через точку, при условии, что ключ является допустимым идентификатором.
myObj.myKey; // = "myValue"

// Объекты изменяемы; можно изменять значения и добавлять новые ключи.
myObj.myThirdKey = true;

// Если вы попытаетесь получить доступ к несуществующему значению,
// вы получите undefined.
myObj.myFourthKey; // = undefined

///////////////////////////////////
// 3. Логика и управляющие конструкции.

// Синтаксис для этого раздела почти такой же, как в Java.

// Условная конструкция работает, как и следовало ожидать,
var count = 1;
if (count == 3) {
    // выполняется, если count равен 3
} else if (count == 4) {
    // выполняется, если count равен 4
} else {
    // выполняется, если не 3 и не 4
}

// ...как и цикл while.
while (true){
    // Бесконечный цикл!
}

// Цикл do-while такой же, как while, но он всегда выполняется хотя бы раз.
var input
do {
    input = getInput();
} while (!isValid(input))

// цикл for такой же, как в C и Java:
// инициализация; условие; шаг.
for (var i = 0; i &lt; 5; i++) {
    // выполнится 5 раз
}

// &amp;&amp; — это логическое И, || — это логическое ИЛИ
if (house.size == "big" &amp;&amp; house.color == "blue") {
    house.contains = "bear";
}
if (color == "red" || color == "blue") {
    // цвет красный или синий
}

// &amp;&amp; и || используют сокращённое вычисление, что полезно
// для задания значений по умолчанию.
var name = otherName || "default";

// Оператор switch выполняет проверку на равенство при помощи ===
// используйте break, чтобы прервать выполнение после каждого case, 
// или выполнение пойдёт далее даже после правильного варианта. 
grade = 4;
switch (grade) {
  case 5:
    console.log("Отлично");
    break;
  case 4:
    console.log("Хорошо");
    break;
  case 3:
    console.log("Можете и лучше");
    break;
  default:
    console.log("Ой-вей!");
    break;
}


///////////////////////////////////
// 4. Функции, Область видимости и Замыкания

// Функции в  JavaScript объявляются при помощи ключевого слова function.
function myFunction(thing) {
    return thing.toUpperCase();
}
myFunction("foo"); // = "FOO"

// Обратите внимание, что значение, которое будет возвращено, должно начинаться
// на той же строке, что и ключевое слово return, в противном случае вы будете
// всегда возвращать undefined по причине автоматической вставки точки с запятой.
// Следите за этим при использовании стиля форматирования Allman.
function myFunction()
{
    return // &lt;- здесь точка с запятой вставится автоматически
    {
        thisIsAn: 'object literal'
    }
}
myFunction(); // = undefined

// В JavaScript функции — это объекты первого класса, поэтому они могут быть
// присвоены различным именам переменных и передаваться другим функциям 
// в качестве аргументов, например, когда назначается обработчик события:
function myFunction() {
    // этот код будет вызван через 5 секунд
}
setTimeout(myFunction, 5000);
// Примечание: setTimeout не является частью языка, но реализован в браузерах и Node.js

// Функции не обязательно должны иметь имя при объявлении — вы можете написать
// анонимное определение функции непосредственно в аргументе другой функции.
setTimeout(function() {
    // этот код будет вызван через 5 секунд
}, 5000);

// В JavaScript есть область видимости; функции имеют свою область
// видимости, а другие блоки — нет.
if (true) {
    var i = 5;
}
i; // = 5, а не undefined, как ожидалось бы в языках с блочной областью видимости

// Это привело к общепринятому шаблону "самозапускающихся анонимных функций",
// которые препятствуют проникновению переменных в глобальную область видимости
(function() {
    var temporary = 5;
    // Мы можем получить доступ к глобальной области для записи в «глобальный объект»,
    // который в веб-браузере всегда window. Глобальный объект может иметь другое
    // имя в таких платформах, как Node.js
    window.permanent = 10;
})();
temporary; // вызовет сообщение об ошибке с типом ReferenceError
permanent; // = 10

// Одной из самых мощных возможностей JavaScript являются замыкания. Если функция
// определена внутри другой функции, то внутренняя функция имеет доступ к 
// переменным внешней функции даже после того, как контекст выполнения выйдет из
// внешней функции.
function sayHelloInFiveSeconds(name) {
    var prompt = "Привет, " + name + "!";
    // Внутренние функции по умолчанию помещаются в локальную область видимости,
    // как если бы они были объявлены с помощью var.
    function inner() {
        alert(prompt);
    }
    setTimeout(inner, 5000);
    // setTimeout асинхронна, поэтому функция sayHelloInFiveSeconds сразу выйдет,
    // после чего setTimeout вызовет функцию inner. Однако поскольку функция inner
    // «замкнута» вокруг sayHelloInFiveSeconds, она по-прежнему имеет доступ к переменной prompt
    // на то время, когда она наконец будет вызвана.
}
sayHelloInFiveSeconds("Адам"); // Через 5 с откроется окно «Привет, Адам!»

///////////////////////////////////
// 5. Подробнее об объектах; Конструкторы и Прототипы

// Объекты могут содержать в себе функции.
var myObj = {
    myFunc: function() {
        return "Привет, мир!";
    }
};
myObj.myFunc(); // = "Привет, мир!"

// Когда вызываются функции, прикреплённые к объекту, они могут получить доступ
// к этому объекту с помощью ключевого слова this.
myObj = {
    myString: "Привет, мир!",
    myFunc: function() {
        return this.myString;
    }
};
myObj.myFunc(); // = "Привет, мир!"

// Значение this зависит от того, как функция вызывается, 
// а не от того, где она определена. Таким образом, наша функция не работает, 
// если она вызывается не в контексте объекта.
var myFunc = myObj.myFunc;
myFunc(); // = undefined

// И наоборот, функция может быть присвоена объекту и получать доступ к нему
// через this, даже если она не была прикреплена к нему при объявлении.
var myOtherFunc = function() {
    return this.myString.toUpperCase();
}
myObj.myOtherFunc = myOtherFunc;
myObj.myOtherFunc(); // = "ПРИВЕТ, МИР!"

// Мы можем также указать контекст для выполнения функции при её вызове,
// используя call или apply.
var anotherFunc = function(s) {
    return this.myString + s;
}
anotherFunc.call(myObj, " И привет, Луна!"); // = "Привет, мир! И привет, Луна!"

// Функция apply почти такая же, но принимает в качестве списка аргументов массив.
anotherFunc.apply(myObj, [" И привет, Солнце!"]); // = "Привет, мир! И привет, Солнце!"

// Это полезно при работе с функцией, которая принимает последовательность
// аргументов, а вы хотите передать массив.
Math.min(42, 6, 27); // = 6
Math.min([42, 6, 27]); // = NaN (Ой-ой!)
Math.min.apply(Math, [42, 6, 27]); // = 6

// Но call и apply — только временные. Когда мы хотим связать функцию с объектом, 
// мы можем использовать bind.
var boundFunc = anotherFunc.bind(myObj);
boundFunc(" И привет, Сатурн!"); // = "Привет, мир! И привет, Сатурн!"

// Bind также может использоваться для частичного применения (каррирования) функции
var product = function(a, b) { return a * b; }
var doubler = product.bind(this, 2);
doubler(8); // = 16

// Когда вы вызываете функцию с помощью ключевого слова new, создается новый объект,
// доступный функции при помощи this. Такие функции называют конструкторами.
var MyConstructor = function() {
    this.myNumber = 5;
}
myNewObj = new MyConstructor(); // = {myNumber: 5}
myNewObj.myNumber; // = 5

// У каждого объекта в JavaScript есть прототип. Когда вы хотите получить
// доступ к свойству объекта, которое не существует в этом объекте, интерпретатор
// будет искать это свойство в прототипе.

// Некоторые реализации языка позволяют получить доступ к прототипу объекта
// через «магическое» свойство __proto__. Несмотря на то, что это может быть полезно
// для понимания прототипов, это не часть стандарта; мы увидим стандартные способы
// использования прототипов позже.
var myObj = {
    myString: "Привет, мир!"
};
var myPrototype = {
    meaningOfLife: 42,
    myFunc: function() {
        return this.myString.toLowerCase()
    }
};

myObj.__proto__ = myPrototype;
myObj.meaningOfLife; // = 42

// Для функций это тоже работает.
myObj.myFunc(); // = "Привет, мир!"

// Если интерпретатор не найдёт свойство в прототипе, то продожит поиск
// в прототипе прототипа и так далее.
myPrototype.__proto__ = {
    myBoolean: true
};
myObj.myBoolean; // = true

// Здесь не участвует копирование; каждый объект хранит ссылку на свой прототип.
// Это означает, что мы можем изменить прототип, и наши изменения будут отражены везде.
myPrototype.meaningOfLife = 43;
myObj.meaningOfLife; // = 43

// Мы упомянули, что свойство __proto__ нестандартно, и нет никакого стандартного
// способа, чтобы изменить прототип существующего объекта. Однако есть два
// способа создать новый объект с заданным прототипом.

// Первый способ — это Object.create, который появился в JavaScript недавно,
// а потому доступен ещё не во всех реализациях языка.
var myObj = Object.create(myPrototype);
myObj.meaningOfLife; // = 43

// Второй способ, который работает везде, имеет дело с конструкторами.
// У конструкторов есть свойство с именем prototype. Это *не* прототип
// функции-конструктора; напротив, это прототип для новых объектов, которые
// будут созданы с помощью этого конструктора и ключевого слова new.
MyConstructor.prototype = {
    myNumber: 5,
    getMyNumber: function() {
        return this.myNumber;
    }
};
var myNewObj2 = new MyConstructor();
myNewObj2.getMyNumber(); // = 5
myNewObj2.myNumber = 6
myNewObj2.getMyNumber(); // = 6

// У встроенных типов, таких, как строки и числа, также есть конструкторы, которые
// создают эквивалентные объекты-обёртки.
var myNumber = 12;
var myNumberObj = new Number(12);
myNumber == myNumberObj; // = true

// За исключением того, что они не в точности равны.
typeof myNumber; // = 'number'
typeof myNumberObj; // = 'object'
myNumber === myNumberObj; // = false
if (0) {
    // Этот код не выполнится, потому что 0 - это ложь.
}

// Впрочем, объекты-обёртки и встроенные типы имеют общие прототипы,
// поэтому вы можете расширить функционал строк, например:
String.prototype.firstCharacter = function() {
    return this.charAt(0);
}
"abc".firstCharacter(); // = "a"

// Это часто используется в т.н. полифилах, которые реализуют новые возможности
// JavaScript в старой реализации языка, так что они могут быть использованы в
// старых средах, таких, как устаревшие браузеры.

// Например, мы упомянули, что Object.create доступен не во всех реализациях, но
// мы сможем использовать его с помощью такого полифила:
if (Object.create === undefined) { // не перезаписываем метод, если он существует
    Object.create = function(proto) {
        // создаём временный конструктор с правильным прототипом
        var Constructor = function(){};
        Constructor.prototype = proto;
        // затем используем его для создания нового,
        // правильно прототипированного объекта
        return new Constructor();
    }
}</pre>
<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/javascript-for-qlik-sense-developers-in-5-minutes/">JavaScript для разработчиков Qlik Sense за 10 минут</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://qliksense.ivan-shamaev.ru/javascript-for-qlik-sense-developers-in-5-minutes/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
