Javascript-language senso-concept-Mcs
(lagJsgn)

overview of lagJsgn

description::
· Javascript (lagJsgn) is the GENERIC language of browser-Javascript (Jsbr, client-side), Node-Javascript (Jsnd, server-side), desktop-Javascript (Ljd) and other differentiations.

· Javascript was originally developed in {1995} by Brendan-Eich, at Netscape-Communications-Corporation. [en.wikipedia.org]

· my goal here is my text to be MONOSEMANTIC as possible, in contrast to existing texts, by defining most of the-names of my sentences.
· ALSO, my text differs than the traditional one.
· I publish STRUCTURED-CONCEPTS|ModelConceptStructureds (MCS) in contrast to traditional text, that describes concepts.

· this is a living concept (= an evolving concept), see and reference by version.
· last-version is dynamic (do not reference with it), all others are static.
· even-though the-work I have-put on this webpage-concept is NOT a small amount, much more is-needed.

name::
* McsEngl.McsTchInf000010.last.html//dirTchInf//dirMcs!⇒lagJsgn,
* McsEngl.dirMcs/dirTchInf/McsTchInf000010.last.html!⇒lagJsgn,
* McsEngl.JavaScript!⇒lagJsgn,
* McsEngl.Javascript!⇒lagJsgn, {2019-03-05},
* McsEngl.Javascript.generic!⇒lagJsgn,
* McsEngl.JavascriptGeneric!⇒lagJsgn,
* McsEngl.Js-(Javascript)!⇒lagJsgn,
* McsEngl.Jsgn!⇒lagJsgn,
* McsEngl.Ljs!⇒lagJsgn,
* McsEngl.lagJsgn!=McsTchInf000010,
* McsEngl.lagJsgn!=JavaScript-language,
* McsEngl.lagJs!⇒lagJsgn, {2019-07-04},
* McsEngl.lagJsgn, {2021-03-23},
* McsEngl.lagJsgn!=generic-Javascript,
* McsEngl.language.Javascript!⇒lagJsgn,

history-of-name:
Although it was developed under the name Mocha, the language was officially called LiveScript when it first shipped in beta releases of Netscape Navigator 2.0 in September 1995, but it was renamed JavaScript when it was deployed in the Netscape browser version 2.0B3.
The change of name from LiveScript to Javascript roughly coincided with Netscape adding support for Java technology in its Netscape Navigator Web browser.
The final choice of name caused confusion, giving the impression that the language was a spin-off of the Java programming language, and the choice has been characterized as a marketing ploy by Netscape to give Javascript the cachet of what was then the hot new Web programming language.

[https://en.wikipedia.org/wiki/Javascript#Beginnings_at_Netscape]

"JavaScript" is a trademark of Oracle Corporation.
It is used under license for technology invented and implemented by Netscape Communications and current entities such as the Mozilla Foundation.

[https://en.wikipedia.org/wiki/JavaScript#Trademark]
===
THEN, JavaScript (with JS capital) is the-Javascript of Mozilla.
I am-using the-names 'Javascript' and 'Jsgn' for the generic language.
[HmnSgm.2016-07-22]

archetype (input) of lagJsgn

description::
· all languages, human and computer, MAP (represent | translate) one entity (the-archetype) to another (model|code|algorithm), for a-communication reason.
· programing-languages map human-information-processing in a-format that machines can-process.
· lagJsgn-ARCHETYPE is a-document describing a-process of information as done by humans.
· a-programer MUST-KNOW an-archetype first, in order to create a-program.

name::
* McsEngl.lagJsgn'archetype,
* McsEngl.lagJsgn'problem,

specific::
* Jsbr-archetype,
* Jsnd-archetype,

algorithm (output) of lagJsgn

description::
· algorithm of lagJsgn is source-algo mapping a-lagJsgn-archetype.

name::
* McsEngl.algo.Javascript!⇒Jsalgo,
* McsEngl.lagJsgn'algo!⇒Jsalgo,
* McsEngl.lagJsgn'algorithm!⇒Jsalgo,
* McsEngl.lagJsgn'model!⇒Jsalgo,
* McsEngl.lagJsgn'source-doc!⇒Jsalgo,
* McsEngl.lagJsgn-algo!⇒Jsalgo,
* McsEngl.Jsalgo, {2021-05-22},
* McsEngl.Javascript-nalgo!⇒Jsalgo,
* McsEngl.Jsgnalgo!⇒Jsalgo,
* McsEngl.lagJsgn-source-doc!⇒Jsalgo,

code of algo

description::
· Jsgncode is any part of an-Jsgncode-doc.

name::
* McsEngl.Jsgncode,
* McsEngl.Jsalgo'code!⇒Jsgncode,
* McsEngl.code-of-Javascript!⇒Jsgncode,

syntax-tree of algo

description::
· THE-STRUCTURE of a-source-document is a-WHOLE-PART-TREE of units, semantic-units, phrases, sentences, sections of the-language which parts we define in the-next sections.
· this whole-part-tree is the-syntax-tree of the-source-document.
· in contrast, the-API of the-language, is structured in a-whole-part-tree and in a-generic-part-tree.
[HmnSgm.2018-03-02]

name::
* McsEngl.lagJsgn'syntax-tree,
* McsEngl.lagJsgn'syntax-whole-part-tree,
* McsEngl.Jsalgo'syntax-tree,
* McsEngl.syntax-tree--of-Javascript,

Jsalgo'UNIT of lagJsgn

description::
· in order to create an-algorithm in any format, we must use other entities[1], that[1] REPRESENT NOTHING in archetype and which[1] are INDIVISIBLE.
· these are the-units of the-algorithm, and the entire algorithm is a whole-part-tree system of constructs of these units.
· natural-languages use sounds or symbols.
· flowcharts use graphs.
· source-code uses the-Unicode character-set.
Jsbr and Jsnd use the same code-units.

name::
* McsEngl.Jsalgo'unit,
* McsEngl.lagJsgn'unit,
* McsEngl.unit--of-Jsalgo,

Jsalgo'WORD of lagJsgn

description::
Words are combinations of units, that REPRESENT NOTHING, the-language uses to create whole constructs with meaning (= denote archetype).

name::
* McsEngl.Jsalgo'word,
* McsEngl.lagJsgn'word,
* McsEngl.lagJsgn-word,

Jsalgo'SEMANTIC-UNIT of lagJsgn

description::
· an-algorithm is a-document with a-whole-part-tree-structure created by combining simpler parts.
· the-units (indivisible parts) that DENOTE ARCHETYPE, used to create an-algorithm, are the-semantic-units.
· programing-languages use different semantic-units and combinations of semantic-units to create algorithms that map the same archetype.

name::
* McsEngl.Jsalgo'Jssut!⇒Jssut,
* McsEngl.Jsgnsut!⇒Jssut,
* McsEngl.Jssut,
* McsEngl.Jssut!=Javascript--semantic-unit,
* McsEngl.Jssut-of--Javascript-code!⇒Jssut,
* McsEngl.data-type.Jsgn!⇒Jssut,
* McsEngl.data-structure.Jsgn!⇒Jssut,
* McsEngl.lagJsgn'data-type!⇒Jssut,
* McsEngl.lagJsgn'data-structure!⇒Jssut,
* McsEngl.lagJsgn'semantic-unit!⇒Jssut,
* McsEngl.lagJsgn'sut!⇒Jssut,
* McsEngl.lagJsgn'Sunit!⇒Jssut,
* McsEngl.lagJsgn'untSmc!⇒Jssut,
* McsEngl.lagJsgn'unit.semantic!⇒Jssut,
* McsEngl.lagJsgn-Sunt!⇒Jssut,
* McsEngl.semantic-unit--of-Javascript-code!⇒Jssut,

whole-chain::
=== (syntax--whole-part-tree)
* lagJsgn-phrase,
* lagJsgn-sentence,
* lagJsgn-section,
* lagJsgn-library,
* lagJsgn-program,
=== (API--whole-part-tree)
* another semantic-unit,
...
* most-whole-object,

generic-chain::
* object,
or
* object-pmNo,

part::
* lagJsgn-word,
* lagJsgn-unit,

name of Jssut (identifier)

description::
· most semantic-units are anonymous.
· the-code below, shows how we give names to semantic-units.
· the-name we give to a-semantic-unit when we create a-name-value-pair, I call REFERENCE-NAME.
· a-semantic-unit can have many reference-names.
· the other name that a-semantic-unit can-have (as a-member of it) I call INTERNAL-NAME.

code.Jsgn::
> function f(){} //function with internal-name
> var f = function(){} //anonymous function, with reference-name
> var f = function f2(){} //function with internal and reference name
> [1,2] //anonymous array, lost in global
> var a = [1,2] //anonymous array, with reference-name
> a.name = 'sgm' //array with internal and reference name
> b = a //another reference-name for sgm-array
> c = b //another reference-name for sgm-array
> c.name //gives 'sgm'

name::
* McsEngl.lagJsgn'identifier!⇒Jssut-name,
* McsEngl.lagJsgn'name-of-semantic-unit!⇒Jssut-name,
* McsEngl.Jssut'name!⇒Jssut-name,
* McsEngl.Jssut-name, {2019-03-18},
* McsEngl.name-of-semantic-unit.Javascript!⇒Jssut-name,

Jssut-name.EXTERNAL (reference)

description::
· we can-assign|bind a-name to a-semantic-unit.
· this name it is-not a-member of the-semantic-unit.
· I call it EXTERNAL-NAME.
· a-semantic-unit can-have many external-names.
[HmnSgm.2018-01-06]
===
The-name of a-name-value-pair is-called idenfier.
An-identifier must start with a letter, underscore (_), or dollar sign ($); subsequent characters can also be digits (0-9).

name::
* McsEngl.external-name--of--semantic-unit//Javascript,
* McsEngl.lagJsgn'reference,
* McsEngl.lagJsgn'reference-name,
* McsEngl.Jssut'reference-name,
* Jssut-name.external,
* Jssut-name.reference,
* McsEngl.lagJsgn'variable-name,
* McsEngl.lagJsgn'variable-reference,
* McsEngl.reference-name--of--semantic-unit//Javascript,

Jssut-name.external.TYPENAME

description::
· valuename|typename is an-identifier which denotes its value|type.
· since {2014-08-05} I am-using typenames in my code, which makes the-code much more readable.

name::
* McsEngl.lagJsgn'typename,
* McsEngl.lagJsgn'valuename,
* McsEngl.typename//Javascript,
* McsEngl.valuename//Javascript,

specific::
In Javascript we need only 11 typenames to denote ALL its types:
01) aName for Arrays,
02) bName for Booleans,
03) fName for Functions,
04) lName for nuLl,
05) mName for Modules,
06) nName for Numbers,
07) oName for Objects,
08) rName for Regexps,
09) sName for Strings,
10) uName for Undefined,
11) xName for miXed-name-value-pairs,

Jssut-name.INTERNAL

description::
· a-semantic-unit can-have a-name which is a-member of it.
· I call it, INTERNAL-NAME.
> function f(){} //function with internal-name
> f.name // "f"

[HmnSgm.2018-01-06]

name::
* McsEngl.internal-name--of--semantic-unit//Javascript,
* McsEngl.Jssut'internal-name,
* Jssut-name.Internal,

member of Jssut

description::
· member-of-semantic-unit is a-part of it.
> let a = [1,2] < undefined
> a.m = "member" < "member"
> a.m < "member"

name::
* McsEngl.Jssut'member,

scope of Jssut

description::
· scope-of-a-semantic-unit is the-region of the-program in which it is accessible|visible.
· the-scope determines the-whole-part-tree-API.
· in other words, the-scope-of-a-semantic-unit is its whole-relation.
[HmnSgm.2018-01-05]

name::
* McsEngl.lagJsgn'scope,
* McsEngl.scope-of--semantic-unit//Javascript,
====== langoGreek:
* McsElln.εμβέλεια-μονάδας-σημασίας-Javascript,

specific::
* block-scope,
* function-scope,
* object-scope,
* module-scope,

Jssut.SPECIFIC

specific::
lagJsgn uses only 11 semantic-units to create algorithms:
01) a - Array,
02) b - Boolean,
03) f - Function,
04) l - nuLl,
05) m - Module,
06) n - Number,
07) o - Object,
08) r - Regexp,
09) s - String,
10) u - Undefined,
11) x - miXed,

specific.alphabetically::
* array--semantic-unit,
* boolean--semantic-unit,
* custom--semantic-unit,
* customNo--semantic-unit,
* function--semantic-unit,
* Jsbr-semantic-unit,
* Jsnd-semantic-unit,
* name-semantic-unit,
* nameNo-semantic-unit,
* name-value-pair-mixed--semantic-unit,
* name-value-pair-mixedNo--semantic-unit,
* name-value-pair-No--semantic-unit,
* null--semantic-unit,
* number--semantic-unit,
* object--semantic-unit,
* object-pmNo--semantic-unit,
* regexp--semantic-unit,
* string--semantic-unit,
* undefined--semantic-unit,

Jssut.Code

description::
Code-semantic-unit is a-semantic-unit written in code-format.

name::
* McsEngl.lagJsgn'semantic-unit.code,
* McsEngl.lagJsgn'semantic-unit.code,
* McsEngl.lagJsgn'code-semantic-unit,

Jssut.SPECIFIC-DIVISION.dialect

specific::
* Jsbr-semantic-unit,
* Jsnd-semantic-unit,

Jssut.SPECIFIC-DIVISION.object-pm

specific::
* object-pm-semantic-unit,
* object-pmNo-semantic-unit,

Jssut.SPECIFIC-DIVISION.creator

specific::
* custom-semantic-unit,
* customNo-semantic-unit,

Jssut.Custom

description::
A-semantic-unit created by a-programer.

name::
* McsEngl.lagJsgn'builtinNo-semantic-unit,
* McsEngl.lagJsgn'custom-semantic-unit,
* McsEngl.lagJsgn'nativeNo-semantic-unit,
* McsEngl.lagJsgn'standardNo-semantic-unit,
* McsEngl.Jssut.custom,

Jssut.custom.OWN (dependencyNo)

description::
A-semantic-unit created by a-programer in a specific program|library.

name::
* McsEngl.lagJsgn'customInternal-semantic-unit,
* McsEngl.lagJsgn'customOwn-semantic-unit,
* McsEngl.lagJsgn'dependencyNo-semantic-unit,
* McsEngl.lagJsgn'dependentNo-semantic-unit,
* McsEngl.lagJsgn'independent-semantic-unit,
* McsEngl.lagJsgn'ownCustom-semantic-unit,
* McsEngl.Jssut.customOwn,

Jssut.custom.OWN.NO (dependency)

description::
A-semantic-unit created by a-programer in ANOTHER program|library.

name::
* McsEngl.lagJsgn'customExternal-semantic-unit,
* McsEngl.lagJsgn'customOwnNo-semantic-unit,
* McsEngl.lagJsgn'dependency-semantic-unit,
* McsEngl.lagJsgn'dependent-semantic-unit,
* McsEngl.lagJsgn'independentNo-semantic-unit,
* McsEngl.lagJsgn'ownNoCustom-semantic-unit,
* McsEngl.Jssut.customOwnNo,

Jssut.CustomNo (native)

description::
A-semantic-unit created by the-language-creator.

name::
* McsEngl.lagJsgn'builtin-semantic-unit,
* McsEngl.lagJsgn'built-in-semantic-unit,
* McsEngl.lagJsgn'customNo-semantic-unit,
* McsEngl.lagJsgn'native-semantic-unit,
* McsEngl.lagJsgn'standard-semantic-unit,
* McsEngl.Jssut.customNo,

Jssut.Internal

description::
A-semantic-unit created inside a-program|library.

name::
* McsEngl.lagJsgn'exteranlNo-semantic-unit,
* McsEngl.lagJsgn'internal-semantic-unit,
* McsEngl.lagJsgn'own-semantic-unit,
* McsEngl.lagJsgn'own-semantic-unit,

Jssut.InternalNo (external)

description::
A-semantic-unit created OUTSIDE of a-program|library, native or custom.

name::
* McsEngl.lagJsgn'exteranal-semantic-unit,
* McsEngl.lagJsgn'internalNo-semantic-unit,
* McsEngl.lagJsgn'ownNo-semantic-unit,
* McsEngl.Jssut.external,

Jssut.SPECIFIC-DIVISION.reference

specific::
* referenced--semantic-unit,
* referencedNo--semantic-unit,

Jssut.INSTANCE

description::
· instance--semantic-unit is a-semantic-unit which is unique.
· in literature you see to call them 'values' but what anyone call value is-NOT identical with what I call instance-sut.
* null,
* undefined,
* 25,
* 'string',
* [1,2],
* {a:1, b:2},
* /re/,

name::
* McsEngl.Jssut.instance,
* McsEngl.instance-Jssut,

Jssut.INSTANCE.NO

description::
· instanceNo--semantic-unit is a-semantic-unit which is-NOT unique but have specifics.
· in literature you see to call them 'data-types', 'data-structures' but what anyone uses to call them is-NOT identical with what I call instanceNo-sut.

name::
* McsEngl.Jssut.instanceNo,
* McsEngl.generic-Jssut,
* McsEngl.instanceNo-Jssut,

Jssut.OBJECT-PM

description::
· object-pm (prototype|member) is a-semantic-unit which:
a) it is specific (= inherits the-members) of Object.prototype
> let a = [1,2] < undefined
> a.__proto__ === Array.prototype < true

AND
b) have members:
> let a = [1,2] < undefined
> a.m = "member" < "member"
> a.m < "member"

· 'object-pm' is a-name I USE in-order-to distinguish it from 'object-semantic-unit'

name::
* McsEngl.Jssut.object-pm,
* McsEngl.object-pm//lagJsgn,
* McsEngl.object-pm:Jssut,
* McsEngl.objectpm//lagJsgn,

Jssut.OBJECT-PM.NO

description::
· objectpmNo is a-semantic-unit which is-NOT object-pm:
a) it is-NOT specific of Object.prototype
OR
b) it has-NO members.
· 2 semantic-units are-not specifics of Object.prototype: null, undefined, then are-not objects.


· and numbers, strings, and booleans LITERALS have-no members, and THEN these are-NOT objects-pm using the-above definition of object-pm.
· the-famous statement 'EVERYTHING IS AN OBJECT[a]' is wrong, meaning by 'object[a]' either 'object-pm' or 'object'.

name::
* McsEngl.Jssut.object-pmNo,
* McsEngl.Jssut.objectpmNo,
* McsEngl.everything-is-an-object//lagJsgn,
* McsEngl.lagJsgn'objectpmNo-semantic-unit,
* McsEngl.object-pmNo-Jssut,
* McsEngl.objectpmNo-Jssut,

Jssut.REFERENCED (Jsgnnvp)

created:: {2017-06-11},

description::
· referenced-semantic-unit is a-semantic-unit which HAS a-reference-name associated with it.
[HmnSgm.2018-01-07]

name::
* McsEngl.named-semantic-unit--of-lagJsgn!⇒Jsgnnvp,
* McsEngl.lagJsgn'SutRef!⇒Jsgnnvp,
* McsEngl.lagJsgn'Nvp!⇒Jsgnnvp,
* McsEngl.lagJsgn'anonymousNo-semantic-unit!⇒Jsgnnvp,
* McsEngl.lagJsgn'name-value-pair!⇒Jsgnnvp,
* McsEngl.lagJsgn'referenced-semantic-unit!⇒Jsgnnvp,
* McsEngl.lagJsgn'variable!⇒Jsgnnvp,
* McsEngl.Jsgnnvp, {2019-03-16},
* McsEngl.Jsgnnvp!=Javascript--name-value-pair,
* McsEngl.Jssut.referenced!⇒Jsgnnvp,
* McsEngl.lagJsgn-v!⇒Jsgnnvp,
* McsEngl.name-value-pair//Javascript!⇒Jsgnnvp,
* McsEngl.referenced-semantic-unit.Javascript!⇒Jsgnnvp,
* McsEngl.variable//Javascript!⇒Jsgnnvp,

name of Nvp

description::
· the-external-name of a-referenced-semantic-unit.
[HmnSgm.2018-01-07]

name::
* McsEngl.Jsgnnvp'name,

value of Jsgnnvp

description::
The-information we assign in the-name of a-name-value-pair is-called value.

name::
* McsEngl.lagJsgn'value,
* McsEngl.Jsgnnvp'value,

definition of Jsgnnvp (link)

Jsgnnvp.SPECIFIC

specific::
=== SPECIFIC-DIVISION-on-different-type-of-values
* mixed--referenced-semantic-unit,
* mixedNo--referenced-semantic-unit,
=== SPECIFIC-DIVISION-on-one-value
* constant--referenced-semantic-unit,
* constantNo--referenced-semantic-unit,
===
* array-nvp (var a = []),
* boolean-nvp (var b = true),
* function-nvp (var f = function(){}),
* module-nvp (var m = require('os')),
* number-nvp (var n = 3),
* object-nvp (var o = {}),
* regexp-nvp (var r = /x/),
* string-nvp (var s = 'a-string'),

Jsgnnvp.MIXED (Jsgnx)

description::
· mixed is a-name-value-pair that contains different semantic-units.
· this attribute makes the-Javascript a-dynamic-language.
[HmnSgm.2018-01-07]

name::
* McsEngl.lagJsgn'mixed--semantic-unit!⇒Jsgnx,
* McsEngl.Jsgnnvp.mixed!⇒Jsgnx,
* McsEngl.Jssut.mixed!⇒Jsgnx,
* McsEngl.Jsgnx,
* McsEngl.Jsgnx!=mixed-sunit,
* McsEngl.lagJsgn-x!⇒Jsgnx,
* McsEngl.mixed--semantic-unit--of-Javascript!⇒Jsgnx,

Jsgnnvp.MIXED.NO

description::
· mixedNo-name-value-pair is a-name-value-pair which ASSOCIATES only ONE type of value with its-name.
[HmnSgm.2018-01-07]

name::
* McsEngl.lagJsgn'mixedNo-name-value-pair--semantic-unit,
* McsEngl.lagJsgn'mixedNo-semantic-unit,
* McsEngl.Jsgnnvp.mixedNo,
* McsEngl.Jssut.mixedNo,

Jsgnnvp.CONSTANT

description::
The const declaration creates a read-only reference to a value.
It does not mean the value it holds is immutable, just that the variable identifier cannot be reassigned.
[https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/const]

name::
* McsEngl.const//Javascript,
* McsEngl.lagJsgn'constant-name-value-pair,
* McsEngl.lagJsgn'const-name-value-pair,
* McsEngl.lagJsgn'constant,
* McsEngl.Jsgnnvp.constant,
* McsEngl.Jssut.constant,

addressWpg::
* https://stackoverflow.com/questions/33040703/proper-use-of-const-for-defining-functions-in-javascript,

Jsgnnvp.CONSTANT.NO

description::
The scope of a variable declared with var is its current execution context, which is either the enclosing function or, for variables declared outside any function, global. [https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/var]

name::
* McsEngl.lagJsgn'constantNo-name-value-pair,
* McsEngl.Jsgnnvp.constantNo,
* McsEngl.Jsgnnvp.variable,
* McsEngl.Jssut.constantNo-name-value-pair,

Jssut.REFERENCED.NO

description::
NamedNo is a-semantic-unit which HAS NO a-name associated with it.

name::
* McsEngl.lagJsgn'anonymous-semantic-unit,
* McsEngl.lagJsgn'namedNo-semantic-unit,
* McsEngl.lagJsgn'referencedNo-semantic-unit,
* McsEngl.Jssut.referencedNo,

Jssut.FIRST-CLASS

description::
· first-class--semantic-unit is a-semantic-unit which can-have members.
[https://developer.mozilla.org/en-US/docs/Web/Javascript/Reference/Functions]

name::
* McsEngl.Jssut.first-class,
* McsEngl.lagJsgn'first-class--semantic-unit,
* McsEngl.lagJsgn'firstclass--semantic-unit,
* McsEngl.lagJsgn'first-class-object,
* McsEngl.lagJsgn'firstclass-object,

specific::
* array,
* function,
* regexp,
* number-non-literal, (var n = new Number(2))
* string-non-literal, (var s = new String('string'))

Jssut.FIRST-CLASS.NO

description::
· first-class-no--semantic-unit is a-semantic-unit which has-no members.
[https://developer.mozilla.org/en-US/docs/Web/Javascript/Reference/Functions]

name::
* McsEngl.Jssut.first-class-no,
* McsEngl.first-class-no-semantic-unit//lagJsgn,
* McsEngl.lagJsgn'first-class-no-semantic-unit,
* McsEngl.lagJsgn'firstclass-no-semantic-unit,

specific::
* boolean,
* number-literal, (var n = 2)
* string-literal, (var s = 'string')

Jssut.LITERAL

description::
· literal-semantic-unit is a-semantic-unit created directly by the-programer.
· Jscode:
var o = {
 a: [1, 's'],
 b: true,
 f: function(){},
 n: 2,
 o2: {n:1, s:'s'},
 r: /d/,
 s: 'string',
}

name::
* McsEngl.Jssut.literal,
* McsEngl.lagJsgn'literal--semantic-unit,
* McsEngl.literal--semantic-unit//lagJsgn,

generic-chain::
* Object.prototype,

Jssut.LITERAL.NO

description::
· literalNo-semantic-unit is a-semantic-unit created directly by the-programer.

name::
* McsEngl.Jssut.literalNo,
* McsEngl.lagJsgn'literalNo--semantic-unit,
* McsEngl.lagJsgn'non-literal--semantic-unit,
* McsEngl.literalNo--semantic-unit//lagJsgn,

specific::
* constructor-object,
* var o = Object.create(o2);
* object created as a return of a-function,

Jssut.COMPOUND

description::
· compound--semantic-unit is a-semantic-unit WITH parts other semantic-units.
* array,
* function,
* object,

name::
* McsEngl.Jssut.compound,
* McsEngl.compound-Jssut,

Jssut.COMPOUND.NO

description::
· compoundNo--semantic-unit is a-semantic-unit WITHOUT parts other semantic-units.
* boolean,
* null,
* number,
* regular-expression,
* string,
* udefined,
· in literature you see to call them 'primitives' BUT what they call primitives is-NOT identical with what I call compoundNo.

name::
* McsEngl.Jssut.compoundNo,
* McsEngl.compoundNo-Jssut,
* McsEngl.simple-Jssut,

Jssut.array (Jsa)

description::
· array is an-ordered-collection of other semantic-units.
· code-example:
var a = [true, 1, {n:1}, /d/, 's'];

name::
* McsEngl.Jsa, {2021-05-22},
* McsEngl.Jsa!=Javascript-array,
* McsEngl.Jsgna!⇒Jsa, {2019-03-15},
* McsEngl.Jsnd'array!⇒Jsa,
* McsEngl.Jsnd-a!⇒Jsa,
* McsEngl.Jssut.array!⇒Jsa,
* McsEngl.array--semantic-unit--of-Javascript!⇒Jsa,
* McsEngl.array//Javascript!⇒Jsa,
* McsEngl.lagJsgn'array!⇒Jsa,
* McsEngl.lagJsgn'array--semantic-unit!⇒Jsa,
* McsEngl.lagJsgn-array!⇒Jsa,

generic-chain::
* Array.prototype, ([].__proto__ === Array.prototype //true)
* Object.prototype, ([].__proto__.__proto__ === Object.prototype //true)

Jsa'element

description::
· elements|items are the-entities an-array contains.
To access them lagJsgn uses the-code:
a[nIndex]

name::
* McsEngl.Jsa'element,
* McsEngl.Jsa'item,

Jsa'index

description::
· index-of-array is a-number (starts with 0) that denotes the-order of one of its elements.

name::
* McsEngl.Jsa'index,

Jsa'member

description::
· arrays are-considered objects of the-Array-constructor-function, with generic the-Array.prototype-object.
In other words, the-members-of-the-Array.prototype-object are-inherited by all arrays.
Also, any array[1] can-have extra members in addition to its[1] inherited members and to its[1] elements.
· Jscode:
a.n = 3;

name::
* McsEngl.Jsa'member,

member::
// Chrome62 Object.getOwnPropertyNames([]).sort()).join(', '))
[length]
// Object.getOwnPropertyNames([].__proto__).sort()).join(', '))
[concat, constructor, copyWithin, entries, every, fill, filter, find, findIndex, forEach, includes, indexOf, join, keys, lastIndexOf, length, map, pop, push, reduce, reduceRight, reverse, shift, slice, some, sort, splice, toLocaleString, toString, unshift]
// Object.getOwnPropertyNames([].__proto__.__proto__).sort()).join(', '))
[__defineGetter__, __defineSetter__, __lookupGetter__, __lookupSetter__, __proto__, constructor, hasOwnProperty, isPrototypeOf, propertyIsEnumerable, toLocaleString, toString, valueOf]

Jsa'Array-function

description::
Array is a-built-in-function and is-considered the-constructor, of all arrays.
Then, Array.prototype is the-parent-generic-object of all arrays.

name::
* McsEngl.lagJsgn'Array-constructor,
* McsEngl.Jsa'Array-function,
* McsEngl.Jsf.Array,

generic-chain::
* Function.prototype (Array.__proto__ === Function.prototype //true),
* Object.prototype (Array.__proto__.__proto__ === Object.prototype //true),

Jsa'Array.prototype

description::
Array.prototype[1] is the-generic-object, of all arrays.
In other words, its[1] members are-inherited by all arrays.

name::
* McsEngl.Array.prototype//Javascript,
* McsEngl.lagJsgn'Array.prototype-object,
* McsEngl.Jsa'Array.prototype-object,
* McsEngl.lagJsgn-o.Array.prototype,

generic-chain::
* Object.prototype (Array.prototype.__proto__ === Object.prototype //true),

Array.prototype'member

member::
Code
(Jsnd.6-2-2):
> Object.getOwnPropertyNames(Array.prototype).sort()
[ 'concat', 'constructor', 'copyWithin', 'entries', 'every', 'fill', 'filter', 'find', 'findIndex', 'forEach', 'includes', 'indexOf', 'join', 'keys', 'lastIndexOf', 'length', 'map', 'pop', 'push', 'reduce', 'reduceRight', 'reverse', 'shift', 'slice', 'some', 'sort', 'splice', 'toLocaleString', 'toString', 'unshift' ]

(Chrome.50):
> Object.getOwnPropertyNames(Array.prototype).sort()
["concat", "constructor", "copyWithin", "entries", "every", "fill", "filter", "find", "findIndex", "forEach", "includes", "indexOf", "join", "keys", "lastIndexOf", "length", "map", "pop", "push", "reduce", "reduceRight", "reverse", "shift", "slice", "some", "sort", "splice", "toLocaleString", "toString", "unshift"]

(Firefox.45):
> Object.getOwnPropertyNames(Array.prototype).sort()
["concat", "constructor", "copyWithin", "entries", "every", "fill", "filter", "find", "findIndex", "forEach", "includes", "indexOf", "join", "keys", "lastIndexOf", "length", "map", "pop", "push", "reduce", "reduceRight", "reverse", "shift", "slice", "some", "sort", "splice", "toLocaleString", "toSource", "toString", "unshift"]

(Edge.20):
> Object.getOwnPropertyNames(Array.prototype).sort()
["concat", "constructor", "copyWithin", "entries", "every", "fill", "filter", "find", "findIndex", "forEach", "indexOf", "join", "keys", "lastIndexOf", "length", "map", "pop", "push", "reduce", "reduceRight", "reverse", "shift", "slice", "some", "sort", "splice", "toLocaleString", "toString", "unshift", "values"]

(Safari.5-1-7):
> Object.getOwnPropertyNames(Array.prototype).sort()
["concat", "constructor", "every", "filter", "forEach", "indexOf", "join", "lastIndexOf", "length", "map", "pop", "push", "reduce", "reduceRight", "reverse", "shift", "slice", "some", "sort", "splice", "toLocaleString", "toString", "unshift"]

Array.prototype.concat-function

description::
The concat() method is used to merge two or more arrays. This method does not change the existing arrays, but instead returns a new array.
var arr1 = ["a", "b", "c"];
var arr2 = ["d", "e", "f"];
var arr3 = arr1.concat(arr2);
// results in a new array [ "a", "b", "c", "d", "e", "f" ]

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat]

name::
* McsEngl.Array.prototype.concat-function,
* McsEngl.Jsa'concat-function,
* McsEngl.Jsaalgo.merge-arrays,
* McsEngl.lagJsgn'concat-array-function,
* McsEngl.concat--Javascript-array-function,

Array.prototype.copyWithin-function

description::
The copyWithin() method shallow copies part of an array to another location in the same array and returns it, without modifying its size.
["alpha", "bravo", "charlie", "delta"].copyWithin(2, 0);
// results in ["alpha", "bravo", "alpha", "bravo"]

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/copyWithin]
===
["alpha", "bravo", "charlie", "delta"].copyWithin(1);
// results in ["alpha", "alpha", "bravo", "charlie"]

name::
* McsEngl.Array.prototype.copyWithin-function,
* McsEngl.Jsa'copyWithin-function,
* McsEngl.lagJsgn'copyWithin-array-function,
* McsEngl.copyWithin--Javascript-array-function,

Array.prototype.entries-function

description::
The entries() method returns a new Array Iterator object that contains the key/value pairs for each index in the array.
var a = ['a', 'b', 'c'];
var iterator = a.entries();
console.log(iterator.next().value); // [0, 'a']
console.log(iterator.next().value); // [1, 'b']
console.log(iterator.next().value); // [2, 'c']

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/entries]

name::
* McsEngl.Array.prototype.entries-function,
* McsEngl.Jsa'entries-function,
* McsEngl.lagJsgn'entries-array-function,
* McsEngl.entries--Javascript-array-function,

Array.prototype.every-function

description::
The every() method tests whether all elements in the array pass the test implemented by the provided function.
function isBigEnough(element, index, array) {
  return element >= 10;
}
[12, 5, 8, 130, 44].every(isBigEnough); // false
[12, 54, 18, 130, 44].every(isBigEnough); // true

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every]

name::
* McsEngl.Array.prototype.every-function,
* McsEngl.Jsa'every-function,
* McsEngl.Jsaalgo.test-elements-on-criterion,
* McsEngl.lagJsgn'every-array-function,
* McsEngl.every--Javascript-array-function,

Array.prototype.fill-function

description::
The fill() method fills all the elements of an array from a start index to an end index with a static value.
var numbers = [1, 2, 3]
numbers.fill(1);
// results in [1, 1, 1]

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/fill]

name::
* McsEngl.Array.prototype.fill-function,
* McsEngl.Jsa'fill-function,
* McsEngl.Jsaalgo.fill-an-array-with-static-value,
* McsEngl.lagJsgn'fill-array-function,
* McsEngl.fill--Javascript-array-function,

Array.prototype.filter-function

description::
The filter() method creates a new array with all elements that pass the test implemented by the provided function.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter]
===
> ['a', false, 'b', undefined, 'c', null, NaN, 3].filter(Number)
< [3]

===
> Object.getOwnPropertyNames(Math).sort().filter(function(sM){return sM.match(/^[s-z]/)})
< [ 'sign', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc' ]

name::
* McsEngl.Array.prototype.filter-function,
* McsEngl.Jsa'filter-function,
* McsEngl.Jsaalgo.return-array-filtered,
* McsEngl.lagJsgn'filter-array-function,
* McsEngl.filter--Javascript-array-function,

Array.prototype.find-function

description::
The find() method returns a value of the first element in the array that satisfies the provided testing function. Otherwise undefined is returned.
function isBigEnough(element) {
  return element >= 15;
}
[12, 5, 8, 130, 44].find(isBigEnough); // 130

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find]

name::
* McsEngl.Array.prototype.find-function,
* McsEngl.Jsa'find-function,
* McsEngl.Jsaalgo'find-value-on-test,
* McsEngl.lagJsgn'find-array-function,
* McsEngl.find--Javascript-array-function,

Array.prototype.findIndex-function

description::
The findIndex() method returns an index of the first element in the array that satisfies the provided testing function. Otherwise -1 is returned.
function isBigEnough(element) {
  return element >= 15;
}
[12, 5, 8, 130, 44].findIndex(isBigEnough); // 3

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex]

name::
* McsEngl.Array.prototype.findIndex-function,
* McsEngl.Jsa'findIndex-function,
* McsEngl.Jsaalgo.find-index-on-test,
* McsEngl.lagJsgn'findIndex-array-function,
* McsEngl.findIndex--Javascript-array-function,

Array.prototype.forEach-function

description::
The forEach() method executes a provided function once for each array element.
var a = ["a", "b", "c"];
a.forEach(function(element) {
  console.log(element);
});
// a
// b
// c

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach]
===
var a = ["a", "b", "c"];
a.forEach(function(element, index, array) {
  console.log(element + index);
  //array is a
});
// a0
// b1
// c2

name::
* McsEngl.Array.prototype.forEach-function,
* McsEngl.forEach--Javascript-array-function,
* McsEngl.Jsa'forEach-function,
* McsEngl.lagJsgn'forEach-array-function,

Array.prototype.includes-function

description::
The includes() method determines whether an array includes a certain element, returning true or false as appropriate.
var a = [1, 2, 3];
a.includes(2); // true
a.includes(4); // false

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes]

name::
* McsEngl.Array.prototype.includes-function,
* McsEngl.Jsa'includes-function,
* McsEngl.Jsaalgo.test-if-includes-element,
* McsEngl.lagJsgn'includes-array-function,
* McsEngl.includes--Javascript-array-function,

Array.prototype.indexOf-function

description::
The indexOf() method returns the first index at which a given element can be found in the array, or -1 if it is not present.
var a = [2, 9, 9];
a.indexOf(2); // 0
a.indexOf(7); // -1
if (a.indexOf(7) === -1) {
  // element doesn't exist in array
}

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf]
===
> [1,2,3].indexOf(3)
2
> [1,2,3].indexOf(4)
-1
> [1,2,3].indexOf(0)
-1

name::
* McsEngl.Array.prototype.indexOf-function,
* McsEngl.Jsa'indexOf-function,
* McsEngl.Jsaalgo.find-indexOf-element,
* McsEngl.lagJsgn'indexOf-array-function,
* McsEngl.indexOf--Javascript-array-function,

Array.prototype.join-function

description::
The join() method joins all elements of an array into a string.
var a = ['Wind', 'Rain', 'Fire'];
a.join(); // 'Wind,Rain,Fire'
a.join('-'); // 'Wind-Rain-Fire'

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/join]
===
> [1,2,3].join()
"1,2,3"
> [1,2,3].join(' ')
"1 2 3"
> [1,2,3].join(' and ')
"1 and 2 and 3"

name::
* McsEngl.Array.prototype.join-function,
* McsEngl.Jsa'join-function,
* McsEngl.Jsaalgo.join-elements-into-string,
* McsEngl.lagJsgn'join-array-function,
* McsEngl.join--Javascript-array-function,

Array.prototype.keys-function

description::
The keys() method returns a new Array Iterator that contains the keys for each index in the array.
var arr = ["a", "b", "c"];
var iterator = arr.keys();
console.log(iterator.next()); // { value: 0, done: false }
console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: undefined, done: true }

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/keys]

name::
* McsEngl.Array.prototype.keys-function,
* McsEngl.Jsa'keys-function,
* McsEngl.lagJsgn'keys-array-function,
* McsEngl.keys--Javascript-array-function,

Array.prototype.lastIndexOf-function

description::
The lastIndexOf() method returns the last index at which a given element can be found in the array, or -1 if it is not present. The array is searched backwards, starting at fromIndex.
var numbers = [2, 5, 9, 2];
numbers.lastIndexOf(2); // 3
numbers.lastIndexOf(7); // -1

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf]

name::
* McsEngl.Array.prototype.lastIndexOf-function,
* McsEngl.Jsa'lastIndexOf-function,
* McsEngl.Jsaalgo.finds-last-index-of-element,
* McsEngl.lagJsgn'lastIndexOf-array-function,
* McsEngl.lastIndexOf--Javascript-array-function,

Array.prototype.length-number

description::
> ['a', 'b', 'c'].length
3

===
The maximum length until "it gets sluggish" is totally dependent on your target machine and your actual code, so you'll need to test on that (those) platform(s) to see what is acceptable.
However, the maximum length of an array according to the ECMA-262 5th Edition specification is bound by an unsigned 32-bit integer due to the ToUint32 abstract operation, so the longest possible array could have 232-1 = 4,294,967,295 = 4.29 billion elements.

[http://stackoverflow.com/a/6155063]

name::
* McsEngl.Array.prototype.length-number,
* McsEngl.Jsa'length-number,
* McsEngl.Jsaalgo.finds-length-of-arry,
* McsEngl.lagJsgn'length-array-number-member,
* McsEngl.length--Javascript-array-number-member,

Array.prototype.map-function

description::
The map() method creates a new array with the results of calling a provided function on every element in this array.
var numbers = [1, 5, 10, 15];
var roots = numbers.map(function(x){
  return x * 2;
});
// roots is now [2, 10, 20, 30]
// numbers is still [1, 5, 10, 15]

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map]

name::
* McsEngl.Array.prototype.map-function,
* McsEngl.Jsaalgo.create-array-from-another,
* McsEngl.lagJsgn'map-array-function,
* McsEngl.map--Javascript-array-function,

Array.prototype.pop-function

description::
The pop() method removes the last element from an array and returns that element. This method changes the length of the array.
var a = [1, 2, 3];
a.pop();
console.log(a); // [1, 2]

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/pop]

name::
* McsEngl.Array.prototype.pop-function,
* McsEngl.Jsa'pop-function,
* McsEngl.Jsaalgo.remove-last-element,
* McsEngl.lagJsgn'pop-array-function,
* McsEngl.pop--Javascript-array-function,

Array.prototype.push-function

description::
The push() method adds one or more elements to the end of an array and returns the new length of the array.
var numbers = [1, 2, 3];
numbers.push(4);
console.log(numbers); // [1, 2, 3, 4]
numbers.push(5, 6, 7);
console.log(numbers); // [1, 2, 3, 4, 5, 6, 7]

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push]

name::
* McsEngl.Array.prototype.push-function,
* McsEngl.Jsa'push-function,
* McsEngl.Jsaalgo.adds-elements-in-the-beggining,
* McsEngl.lagJsgn'push-array-function,
* McsEngl.push--Javascript-array-function,

Array.prototype.reduce-function

description::
The reduce() method applies a function against an accumulator and each value of the array (from left-to-right) to reduce it to a single value.

var sum = [0, 1, 2, 3].reduce(function(a, b) {
  return a + b;
}, 0);
// sum is 6

var flattened = [[0, 1], [2, 3], [4, 5]].reduce(function(a, b) {
  return a.concat(b);
}, []);
// flattened is [0, 1, 2, 3, 4, 5]

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce]

name::
* McsEngl.Array.prototype.reduce-function,
* McsEngl.Jsa'reduce-function,
* McsEngl.lagJsgn'reduce-array-function,
* McsEngl.reduce--Javascript-array-function,

Array.prototype.reduceRight-function

description::
The reduceRight() method applies a function against an accumulator and each value of the array (from right-to-left) has to reduce it to a single value.
var flattened = [[0, 1], [2, 3], [4, 5]].reduceRight(function(a, b) { return a.concat(b);
}, []);
// flattened is [4, 5, 2, 3, 0, 1]

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/ReduceRight]

name::
* McsEngl.Array.prototype.reduceRight-function,
* McsEngl.Jsa'reduceRight-function,
* McsEngl.lagJsgn'reduceRight-array-function,
* McsEngl.reduceRight--Javascript-array-function,

Array.prototype.reverse-function

description::
The reverse() method reverses an array in place. The first array element becomes the last, and the last array element becomes the first.
var a = ['one', 'two', 'three'];
a.reverse();
console.log(a); // ['three', 'two', 'one']

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse]

name::
* McsEngl.Array.prototype.reverse-function,
* McsEngl.Jsa'reverse-function,
* McsEngl.Jsaalgo.reverse-an-array,
* McsEngl.lagJsgn'reverse-array-function,
* McsEngl.reverse--Javascript-array-function,

Array.prototype.shift-function

description::
The shift() method removes the first element from an array and returns that element. This method changes the length of the array.
var a = [1, 2, 3];
a.shift();
console.log(a); // [2, 3]

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift]

name::
* McsEngl.Array.prototype.shift-function,
* McsEngl.Jsa'shift-function,
* McsEngl.Jsaalgo.remove-first-element,
* McsEngl.lagJsgn'shift-array-function,
* McsEngl.shift--Javascript-array-function,

Array.prototype.slice-function

description::
The slice() method returns a shallow copy of a portion of an array into a new array object selected from begin to end (end not included). The original array will not be modified.
var a = ["zero", "one", "two", "three"];
var sliced = a.slice(1,3);
console.log(a); // [ "zero", "one", "two", "three" ]
console.log(sliced); // [ "one", "two" ]

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice]
===
//create arrays from array-like
> Array.prototype.slice.call({0:'a',1:'b',2:'c',length:3})
["a", "b", "c"]
> Array.prototype.slice.call({0:'a',1:'b',2:'c'})
[]

name::
* McsEngl.Array.prototype.slice-function,
* McsEngl.Jsa'slice-function,
* McsEngl.lagJsgn'slice-array-function,
* McsEngl.slice--Javascript-array-function,

Array.prototype.some-function

description::
The some() method tests whether some element in the array passes the test implemented by the provided function.
function isBiggerThan10(element, index, array) {
  return element > 10;
}
[2, 5, 8, 1, 4].some(isBiggerThan10); // false
[12, 5, 8, 1, 4].some(isBiggerThan10); // true

[https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/some]

name::
* McsEngl.Array.prototype.some-function,
* McsEngl.Jsa'some-function,
* McsEngl.lagJsgn'some-array-function,
* McsEngl.some--Javascript-array-function,

Array.prototype.sort-function

description::
The sort() method sorts the elements of an array in place and returns the array. The sort is not necessarily stable. The default sort order is according to string Unicode code points.
var fruit = ['cherries', 'apples', 'bananas'];
fruit.sort(); // ['apples', 'bananas', 'cherries']
var scores = [1, 10, 21, 2];
scores.sort(); // [1, 10, 2, 21]
// Watch out that 10 comes before 2,
// because '10' comes before '2' in Unicode code point order.
var things = ['word', 'Word', '1 Word', '2 Words'];
things.sort(); // ['1 Word', '2 Words', 'Word', 'word']
// In Unicode, numbers come before upper case letters,
// which come before lower case letters.

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort]

name::
* McsEngl.Array.prototype.sort-function,
* McsEngl.Jsa'sort-function,
* McsEngl.Jsaalgo.sort,
* McsEngl.lagJsgn'sort-array-function,
* McsEngl.sort--Javascript-array-function,

Array.prototype.splice-function

description::
The splice() method changes the content of an array by removing existing elements and/or adding new elements.
var myFish = ["angel", "clown", "mandarin", "surgeon"];
myFish.splice(2, 0, "drum");
// myFish is ["angel", "clown", "drum", "mandarin", "surgeon"]

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice]

name::
* McsEngl.Array.prototype.splice-function,
* McsEngl.Jsa'splice-function,
* McsEngl.lagJsgn'splice-array-function,
* McsEngl.splice--Javascript-array-function,

Array.prototype.toLocaleString-function

description::
The toLocaleString() method returns a string representing the elements of the array. The elements are converted to Strings using their toLocaleString methods and these Strings are separated by a locale-specific String (such as a comma “,”).
var number = 1337;
var date = new Date();
var myArr = [number, date, 'foo'];
var str = myArr.toLocaleString();
console.log(str);
// logs '1337,6.12.2013 19:37:35,foo'
// if run in a German (de-DE) locale with timezone Europe/Berlin

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toLocaleString]

name::
* McsEngl.Array.prototype.toLocaleString-function,
* McsEngl.Jsa'toLocaleString-function,
* McsEngl.lagJsgn'toLocaleString-array-function,

Array.prototype.toString-function

description::
The toString() method returns a string representing the specified array and its elements.
var months = ["Jan", "Feb", "Mar", "Apr"];
months.toString(); // "Jan,Feb,Mar,Apr"

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toString]

name::
* McsEngl.Array.prototype.toString-function,
* McsEngl.Jsa'toString-function,
* McsEngl.lagJsgn'toString-array-function,

Array.prototype.unshift-function

description::
The unshift() method adds one or more elements to the beginning of an array and returns the new length of the array.
var a = [1, 2, 3];
a.unshift(4, 5);
console.log(a); // [4, 5, 1, 2, 3]

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/unshift]

name::
* McsEngl.Array.prototype.unshift-function,
* McsEngl.Jsa'unshift-function,
* McsEngl.Jsaalgo.add-elements-to-beggining,
* McsEngl.lagJsgn'unshift-array-function,
* McsEngl.unshift--Javascript-array-function,

Array.prototype.values-function

description::
The values() method returns a new Array Iterator object that contains the values for each index in the array.
var a = ['w', 'y', 'k', 'o', 'p'];
var iterator = a.values();
console.log(iterator.next().value); // w
console.log(iterator.next().value); // y
console.log(iterator.next().value); // k
console.log(iterator.next().value); // o
console.log(iterator.next().value); // p

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/values]

name::
* McsEngl.Array.prototype.values-function,
* McsEngl.Jsa'values-function,
* McsEngl.lagJsgn'values-array-function,
* McsEngl.values--Javascript-array-function,

Jsa'creating

description::
· Jscode:
var a1 = [1, 's'];
//===
var a2 = new Array(1, 's');

name::
* McsEngl.Jsa'creation,

algo (link) of Jsa

Jssut.boolean (Jsb)

description::
Boolean is any of the two semantic-units: false, true.

name::
* McsEngl.Jsb, {2021-05-22},
* McsEngl.Jsb!=Javascript-boolean,
* McsEngl.Jsgnb!⇒Jsb, {2019-03-15},
* McsEngl.Jssut.boolean!⇒Jsb,
* McsEngl.boolean--semantic-unit--of-Javascript!⇒Jsb,
* McsEngl.lagJsgn'boolean--semantic-unit!⇒Jsb,
* McsEngl.lagJsgn'boolean!⇒Jsb,

generic-chain::
* Boolean.prototype, (true.__proto__ === Boolean.prototype //true)
* Object.prototype, (true.__proto__.__proto__ === Object.prototype //true)

specific::
* false,
* true,

lagJsgn'Boolean.prototype

description::
Boolean.prototype is the-generic-object, of booleans.
In other words, its members are-inherited by booleans.

name::
* McsEngl.lagJsgn-o.Boolean.prototype,
* McsEngl.lagJsgn'Boolean.prototype-object,

generic-chain::
* Object.prototype (Boolean.prototype.__proto__ === Object.prototype //true),

member::
(Jsnd.6-3-0):
> Object.getOwnPropertyNames(Boolean.prototype).sort()
[ 'constructor', 'toString', 'valueOf' ]

(Chrome.50):
> Object.getOwnPropertyNames(Boolean.prototype).sort()
["constructor", "toString", "valueOf"]

(Firefox.46):
> Object.getOwnPropertyNames(Boolean.prototype).sort()
["constructor", "toSource", "toString", "valueOf"]

(Edge.20):
> Object.getOwnPropertyNames(Boolean.prototype).sort()
["constructor", "toString", "valueOf"]

(Safari.5-1-7):
> Object.getOwnPropertyNames(Boolean.prototype).sort()
["constructor", "toString", "valueOf"]

Jssut.function (Jsf)

description::
· function is the-semantic-unit that PROCESSES information.
· optionally has input and output.

name::
* McsEngl.Jsf, {2021-05-22},
* McsEngl.Jsf!=Javascript-function,
* McsEngl.Jsfunction!⇒Jsf,
* McsEngl.Jsgnf!⇒Jsf,
* McsEngl.Jssut.function!⇒Jsf,
* McsEngl.function//Javascript!⇒Jsf,
* McsEngl.lagJsgn'f!⇒Jsf,
* McsEngl.lagJsgn'function!⇒Jsf,
* McsEngl.lagJsgn'function--semantic-unit!⇒Jsf,
* McsEngl.lagJsgn-f!⇒Jsf, {2019-03-15},

whole-chain::
* the-semantic-unit in which defined,
...
* most-whole-object,

generic-chain::
* Function.prototype, (var f = function(){}; f.__proto__ === Function.prototype //true)
* Object.prototype, (f.__proto__.__proto__ === Object.prototype //true)

Jsf'creation

description::
With a-compound-sentence, we define|create a-function.
We define its input, output and what info-processing will-do.
· Jscode:
function fName() { // inside parentheses we write the input identifiers
 //what to do
 //last, what to return
}

or
var fName = function() {
 //what to do
 //last, what to return
}

In the second case, we define one name-value-pair with name fName and value an anonymous function.

name::
* McsEngl.Jsf'creation,
* McsEngl.Jsf'declaration,
* McsEngl.Jsf'definition,

Jsf'call

description::
· function-call is the-process of setting a-function to work.
· we define a-function once, we call it as many times as we wish.
· we use the next phrase, to call a-function.
· Jscode:
fName()
Inside the-parentheses we put the-values of the-identifiers used in the-definition.

name::
* McsEngl.Jsf'call,
* McsEngl.Jsf'execution,
* McsEngl.Jsf'invocation,
* McsEngl.Jsf'run,

Jsf'input

description::
Function's-input is optional information (semantic-units) we give to a-function to do its work.

name::
* McsEngl.Jsf'input,

Jsf'parameter

description::
In a-function's-definition, as input information we do-not-give values, we give identifiers of name-value-pairs.
These input identifiers are-called PARAMETERS.
I use the-notation: xNameIn where 'x' denotes what semantic-unit is.

name::
* McsEngl.Jsf'parameter,
* McsEngl.parameter//Jsf,

Jsf'argument

description::
When we call a-function, as input information we give values, not identifiers.
These input values are-called ARGUMENTS.

name::
* McsEngl.Jsf'argument,
* McsEngl.argument//Jsf,

Jsf'output

description::
Function's-output is optional information (semantic-unit) we could-RECEIVE from a-function.
If a-function has no output, then the-output is-considered the-undefined-semantic-unit.

name::
* McsEngl.Jsf'output,

return-sentence:
The last sentence in the-definition-of-a-function is the-return-sentence, the-sentence that denotes what the-function will return.
· Jscode: return o;

name::
* McsEngl.lagJsgn'return-sentence,
* McsEngl.lagJsgn'return-statement,
* McsEngl.lagJsgn-sentence.return,

Jsf'name

description::
The-name of a-function it's a little tricky business.
In this definition: function f(){}, the-name is 'f': f.name //"f"
In this definition: var f = function(){}, there is no name: f.name //""
In this definition: var f1 = function f2(){}, the-name is 'f2': f1.name //"f2"; f2.name //error
In all other name-value-pairs we consider the-identifier as 'name'.
So when we need to create recursive-functions (= functions which call themselves), we use the first definition where the-name and the-reference to the-function are the-same.

name::
* McsEngl.Jsf'name,

Jsf'member

description::
· a-function is an-object-pm, so it has members:
Object.getOwnPropertyNames(function)

name::
* McsEngl.Jsf'member,

Jsf'scope (link)

description::
· functions have scope, ie see their named-sunits, but NOT named-sunits of other functions.

name::
* McsEngl.Jsf'scope,

Jsf'a-function-is-an-object

description::
This natural-language sentence is ambiguous.
First of all, the-verb 'is' has many meanings, eg 'has', 'is-specific-of', 'is-part-of' etc.
In Javascript means that a-function is specific of the-object Object.prototype, then and a-function is an-object.
Thus, a-function can-have members, like an-object.
A-function has the-members of its generics-chain.
BUT a-function has and other characteristics that an-object can-not have.
We can-call a-function, but not an-object.
Then, the correct sentence is: A-function is a specific of Object.prototype.

Jsf'Function.prototype

description::
Function.prototype[1] is the-generic-object, of all functions.
In other words, its[1] members are-inherited by all functions.
Usually, Constructor.prototype is an-object.
But Function.prototype is a-function: typeof Function.prototype //"function"

name::
* McsEngl.Jsf.Function.prototype,
* McsEngl.lagJsgn'Function.prototype-function,

whole-chain::
* Function,
* most-whole-object,

generic-chain::
* Object.prototype (Function.prototype.__proto__ === Object.prototype //true),

member::
Code (Chrome.50):
> Object.getOwnPropertyNames(Function.prototype).sort()
["apply", "arguments", "bind", "call", "caller", "constructor", "length", "name", "toString"]

(Firefox.46):
> Object.getOwnPropertyNames(Function.prototype).sort()
["apply", "arguments", "bind", "call", "caller", "constructor", "isGenerator", "length", "name", "toSource", "toString"]

(Edge.20):
> Object.getOwnPropertyNames(Function.prototype).sort()
["apply", "arguments", "bind", "call", "caller", "constructor", "length", "name", "toString"]

(Safari.5-1-7):
> Object.getOwnPropertyNames(Function.prototype).sort()
["apply", "bind", "call", "constructor", "length", "name", "toString"]

specific::
* Function,
* Object,
* ..,
* all builtin functions,
* all custom-functions,

Jsf'Function-function

description::
Function is the-constructor, of all functions:
> var f = function(){};
undefined
> f.constructor
function Function() { [native code] }

name::
* McsEngl.lagJsgn'Function-constructor,
* McsEngl.lagJsgn'Function-function,

whole-chain::
* most-whole-object,

generic-chain::
* Function.prototype, (Function.__proto__ === Function.prototype //true),
It is important to mention here that Function CONTAINS its generic-object, the-Function.prototype.
* Object.prototype, (Function.__proto__.__proto__ === Object.prototype //true)

member::
Code (Chrome.50):
> Object.getOwnPropertyNames(Function).sort()
[]

(Firefox.46):
> Object.getOwnPropertyNames(Function).sort()
[]

(Edge.20):
> Object.getOwnPropertyNames(Function).sort()
[]

(Safari.5-1-7):
> Object.getOwnPropertyNames(Function).sort()
[]

Jsf.SPECIFIC

name::
* McsEngl.Jsf.specific,

specific.alphabetically::
* constructor-function,
* custom-function,
* customNo-function,
* method-function,
* methodNo-function,
* named-function,
* namedNo-function,
* object-returning-function,
* operator-function,
* self-executing-function,

Jsf.ARROW

description::
· arrow-functions is an ES6 feature.

example::
var fAdd = (nAIn, nBIn) => nAIn + nBIn;
//or
var fAdd = (nAIn, nBIn) => {
 return nAIn + nBIn;
}
//regular function
function fAdd(nAIn, nBIn) {
 return nAIn + nBIn;
}

name::
* McsEngl.arrow-function//Javascript,
* McsEngl.fat-arrow-function//Javascript,
* McsEngl.Jsf.arrow,

addressWpg::
* {2018-06-05} Cynthia-Lee, When (and why) you should use ES6 arrow functions — and when you shouldn’t, https://medium.freecodecamp.org/,

Jsf.ASYNC

description::
ES 2017 introduced Asynchronous functions.
Async functions are essentially a cleaner way to work with asynchronous code in JavaScript.
In order to understand exactly what these are, and how they work, we first need to understand Promises.
... Async functions return a Promise. If the function throws an error, the Promise will be rejected. If the function returns a value, the Promise will be resolved.
[https://codeburst.io/Javascript-es-2017-learn-async-await-by-example-48acc58bad65]

name::
* McsEngl.async-function//Javascript,
* McsEngl.Jsf.async,

addressWpg::
* {2017-11-07} Brandon-Morelli, JavaScript ES 2017: Learn Async/Await by Example, https://codeburst.io/,
* {2017-08-31} Diogo-Spínola, JavaScript — from callbacks to async/await, https://medium.freecodecamp.org/,

Jsf.async-await

description::
· by prepending await on a-promise inside an-async-function, the-code will-stop until the-promise is-resolved or rejected.
const getFirstUserData = async () => {
 const response = await fetch('/users.json') // get users list
 const users = await response.json() // parse JSON
 const user = users[0] // pick first user
 const userResponse = await fetch(`/users/${user.name}`) // get user data
 const userData = await userResponse.json() // parse JSON
 return userData
}
getFirstUserData()

[{2022-04-04 retrieved} https://nodejs.dev/learn/modern-asynchronous-javascript-with-async-and-await]
===
"Top level await
You can use the await keyword on its own (outside of an async function) within a JavaScript module. This means modules, with child modules that use await, wait for the child module to execute before they themselves run. All while not blocking other child modules from loading."
[{2022-04-04 retrieved} https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await]

name::
* McsEngl.async-await--Javascript-function,

Jsf.callback

description::
· callback is a-function which is a-parameter in another function: function fAdd(n1, n2, fCallback)
· a-callback runs after another function.

name::
* McsEngl.Jsf.callback,
* McsEngl.callback-function//Javascript,

Jsf.CLASS

description::
JavaScript classes introduced in ECMAScript 2015 are syntactical sugar over JavaScript's existing prototype-based inheritance. The class syntax is not introducing a new object-oriented inheritance model to JavaScript. JavaScript classes provide a much simpler and clearer syntax to create objects and deal with inheritance.
Defining classes
Classes are in fact "special functions", and just as you can define function expressions and function declarations, the class syntax has two components: class expressions and class declarations.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes]

name::
* McsEngl.Jsclass, {2021-05-18},
* McsEngl.Jsf.class!⇒Jsclass,
* McsEngl.class//Javascript!⇒Jsclass,
* McsEngl.lagJsgn'class!⇒Jsclass,
* McsEngl.lagJsgn'class-function!⇒Jsclass,
===
I name a-class-function as: fNameCls.

addressWpg::
* http://www.2ality.com/2015/02/es6-classes-final.html,

Evaluation:
My-evaluation: on-inheritance, on-todo.

Jsf.CONSTRUCTOR

description::
· constructor-function is any function used to create objects using the-new keyword.
· Jscode:
var oName = new fName();

name::
* McsEngl.constructor-function//Javascript,
* McsEngl.lagJsgn'constructor,
* McsEngl.lagJsgn'constructor-function,
* McsEngl.Jsf.constructor,
===
Usually the-names of individual constructors begin with capital-letters.
===
I name a-constructor-function as: fNameCsr.

Constructor.prototype:
The-members of this special member of a-constructor, are-inherited by the-objects-created-by-a-constructor.
In other words, Constructor.prototype is the-generic-object of a-constructor's objects.

Jsf.METHOD

description::
Method is a-function member of an-object.

name::
* McsEngl.lagJsgn'method,
* McsEngl.Jsf.method,

Jsf.NAMED

description::
Named-function is a-function which has name.

// defined as:
function f(){};
// or
var f1 = function f2(){};

name::
* McsEngl.lagJsgn'named-function,
* McsEngl.Jsf.named,

Jsf.NAMED.NO

description::
NamedNo-function is a-function which has NO name.

// defined as:
var f = function(){};

name::
* McsEngl.lagJsgn'anonymous-function,
* McsEngl.lagJsgn'namedNo-function,
* McsEngl.Jsf.namedNo,

Jsf.OBJECT-RETURNING

description::
Objects have no scope.
To overcome this, we create objects by creating functions[1], which have scope, that[1] return the-object we want.
· Jscode:
function f() {
 var n = 1;
 function f1(){var n2 = n;}
 return {
   f1: f1;
   n: n;
 };
}

name::
* McsEngl.lagJsgn'factory-function,
* McsEngl.lagJsgn'object-factory-function,
* McsEngl.lagJsgn'object-returning-function,
* McsEngl.Jsf.factory,
* McsEngl.Jsf.object-factory,
* McsEngl.Jsf.object-returning,

addressWpg::
* https://www.sitepoint.com/factory-functions-Javascript/,

Jsf.OPERATOR (Jsgnopr)

description::
Operators are special functions with code similar to natural-languages and names special-symbols and special syntax.
Operators[1] are built-in, and a-programer calls them[1].

name::
* McsEngl.lagJsgn'operator!⇒Jsgnopr,
* McsEngl.Jsgnopr,
* McsEngl.Jsgnopr!=Javascript-operator,
* McsEngl.operator//Javascript!⇒Jsgnopr,

operand of Jsgnopr

description::
Operands are the INPUT information of operators.

name::
* McsEngl.lagJsgn'operand,
* McsEngl.Jsgnopr'operand,

Jsgnopr.SPECIFIC

specific::
* unary-operator,
* binary-operator,
* ternary-operator,
=== GENERIC::
* additive-operator,
* arithmetic-operator,
* assignment-operator,
* binary-bitwise-operator,
* binary-logical-operator,
* bitwise-operator,
* comparison-operator,
* conditional-operator,
* equality-operator,
* logical-operator,
* multiplicative-operator,
* relational-operator,
* string-operator,
=== INSTANCE::
* +operator,
* ++operator,
* +=operator,
* -operator,
* --operator,
* -=operator,
* !operator,
* !=operator,
* !==operator,
* &operator,
* &&operator,
* *operator,
* **operator,
* *=operator,
* **=operator,
* /operator,
* |operator,
* ||operator,
* |=operator,
* ^operator,
* =operator,
* ==operator,
* ===operator,
* %operator,
* %=operator,
* <operator,
* <<operator,
* <=operator,
* ?:operator,
* /=operator,
* <<=operator,
* >>=operator,
* &=operator,
* ^=operator,
* >operator,
* >>operator,
* >>>operator,
* >>>=operator,
* >=operator,
* ,operator,
* comma-operator,
* delete-operator,
* in-operator,
* instanceof-operator,
* new-operator,
* super-operator,
* typeof-operator,
* void-operator,

Jsgnopr.UNARY

description::
A unary operator requires a single operand, either before or after the operator:
operator operand
or
operand operator
For example, x++ or ++x.
[https://developer.mozilla.org/el/docs/Web/JavaScript/Guide/Expressions_and_Operators]

name::
* McsEngl.Jsgnopr.unary,
* McsEngl.lagJsgn'unary-operator,
* McsEngl.unary-operator//Javascript,

specific::
* http://www.ecma-international.org/ecma-262/index.html#sec-unary-operators,

Jsgnopr.BINARY

description::
A binary operator requires two operands, one before the operator and one after the operator:
operand1 operator operand2
For example, 3+4 or x*y.
[https://developer.mozilla.org/el/docs/Web/JavaScript/Guide/Expressions_and_Operators]

name::
* McsEngl.Jsgnopr.binary,
* McsEngl.lagJsgn'binary-operator,
* McsEngl.binary-operator//Javascript,

specific::
* http://www.ecma-international.org/ecma-262/index.html#sec-unary-operators,

Jsgnopr.ADDITION (+)

description::
The addition operator produces the sum of numeric operands or string concatenation.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators]

name::
* McsEngl.addition-operator//Javascript,
* McsEngl.lagJsgn'+(addition-operator),
* McsEngl.lagJsgn'addition-operator,
* McsEngl.Jsgnopr.addition(+),
* McsEngl.Jsgnopr.+(addition),

example::
// Number + Number -> addition
1 + 2 // 3

// Boolean + Number -> addition
true + 1 // 2

// Boolean + Boolean -> addition
false + false // 0

// Number + String -> concatenation
5 + 'foo' // "5foo"

// String + Boolean -> concatenation
'foo' + false // "foofalse"

// String + String -> concatenation
'foo' + 'bar' // "foobar"

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators]

Jsgnopr.TERNARY

description::
A-ternary operator requires THREE operands.
Javascript has only one ternary-operator, the-conditional-operator.
[HmnSgm.2017-10-11]

name::
* McsEngl.Jsgnopr.ternary,
* McsEngl.lagJsgn'ternary-operator,
* McsEngl.ternary-operator//Javascript,

specific::
* Conditional-operator,

Jsgnopr.CONDITIONAL

description::
The conditional operator is the only JavaScript operator that takes three operands.
The operator can have one of two values based on a condition.
The syntax is:
condition ? val1 : val2
If condition is true, the operator has the value of val1.
Otherwise it has the value of val2.
You can use the conditional operator anywhere you would use a standard operator.
For example,
var status = (age >= 18) ? 'adult' : 'minor';
This statement assigns the value "adult" to the variable status if age is eighteen or more.
Otherwise, it assigns the value "minor" to status.
[https://developer.mozilla.org/el/docs/Web/JavaScript/Guide/Expressions_and_Operators]

name::
* McsEngl.Jsgnopr.conditional,
* McsEngl.lagJsgn'conditional-operator,
* McsEngl.conditional-operator//Javascript,

Jsgnopr.typeof

description::
typeof does not throw an error in case the identifier cannot be resolved, it merely returns the string 'undefined'.
... The first oddity is that typeof null returns object, which does not make any sense.
It is a dangerous pitfall.
[https://molily.de/robust-Javascript/#how-to-prevent-failure]

name::
* McsEngl.Jsgnopr.typeof,
* McsEngl.lagJsgn'typeof-operator,
* McsEngl.typeof-operator//Javascript,

Jsf.SELF-EXECUTING

description::
Self-executing-function is a-function which defined and called at the same time.
· Jscode:
(function() {
 //what to do
 //last, what to return
})();

name::
* McsEngl.Jsf.self-executing,
* McsEngl.lagJsgn'self-executing-function,

IIFE

description::
It is the-sentence in the-code that defines and calls the-function.

name::
* McsEngl.IIFE'(immediately-invoked-function-expression)//Javascript,
* McsEngl.immediately-invoked-function-expression//Javascript,
* McsEngl.lagJsgn'IIFE,

Jssut.module (Jsm)

description::
Module is a-semantic-unit which
- can-be PART OF other modules and
- can-has AS PART other modules.
Like 'the-prototype-inheritance' mechanism which manages the GENERIC-SPECIFIC relations of the-semantic-units of an-API, modules is the-mechanism needed to manage the WHOLE-PART relations of the-semantic-units.
===
Good authors divide their books into chapters and sections; good programmers divide their programs into modules.
[https://medium.freecodecamp.org/Javascript-modules-a-beginner-s-guide-783f7d7a5fcc, Preethi-Kasireddy, {2016-01-22}]

name::
* McsEngl.Jsgnm!⇒Jsm, {2021-04-01},
* McsEngl.Jsm, {2021-05-22},
* McsEngl.Jsm!=Javascript-module,
* McsEngl.Jssut.module!⇒Jsm,
* McsEngl.lagJsgn'module!⇒Jsm,
* McsEngl.lagJsgn'module--semantic-unit!⇒Jsm,
* McsEngl.lagJsgn-m!⇒Jsm,
* McsEngl.module--semantic-unit--of-Javascript!⇒Jsm,
* McsEngl.module//Javascript!⇒Jsm,

generic-chain::
* semantic-unit,

scope of Jsm

description::
With modules, you group the variables and functions that make sense to go together.
This puts these functions and variables into a module scope.
The module scope can be used to share variables between the functions in the module.
But unlike function scopes, module scopes have a way of making their variables available to other modules as well. They can say explicitly which of the variables, classes, or functions in the module should be available.
[https://hacks.mozilla.org/2018/03/es-modules-a-cartoon-deep-dive/]

name::
* McsEngl.Jsm'scope,
* McsEngl.scope-of--Javascript-module,

info-resource of Jsm

description::
* {2020-10-16} https://blog.bitsrc.io/why-should-you-use-top-level-await-in-javascript-a3ba8139ef23,
* {2020-04-09} https://weblogs.asp.net/dixin/understanding-all-javascript-module-formats-and-tools,
* {2018-06-18} Addy-Osmani, Mathias-Bynens, Using JavaScript modules on the web, https://developers.google.com/web/fundamentals/,
* {2018-03-28} Lin-Clark, ES modules: A cartoon deep-dive: https://hacks.mozilla.org/2018/03/es-modules-a-cartoon-deep-dive/,
* {2017-05-02} Jake-Archibald, ECMAScript modules in browsers: https://jakearchibald.com/2017/es-modules-in-browsers/,

name::
* McsEngl.Jsm'Infrsc,

Jsm.SPECIFIC

name::
* McsEngl.Jsm.specific,

specific::
* browser-module,
* Node.js-module,
* AMD-Asynchronous Module Definition (https://github.com/amdjs/amdjs-api/blob/master/AMD.md),

Jssut.null

description::
null is a special semantic-unit that denotes no-information, similar to zero quantity.

name::
* McsEngl.lagJsgn'null--semantic-unit,
* McsEngl.Jssut.null,
* McsEngl.lagJsgn-null,
* McsEngl.null--semantic-unit--of-Javascript,
* McsEngl.null//Javascript,

generic-chain::
* object-pmNo,
* semantic-unit,
===
'null is not an object'.
In other words, null is NOT SPECIFIC of an-lagJsgn-object, it does not inherit the-members of an-object.
===
> typeof null //"object"
is a-MISTAKE of the-language (like instanceof)!

Code:
null

Jssut.number (Jsn)

description::
Number is a-semantic-unit that denotes numbers in archetype.

name::
* McsEngl.Jsgnn!⇒Jsn,
* McsEngl.Jsn,
* McsEngl.Jsn!=number,
* McsEngl.Jssut.number!⇒Jsn,
* McsEngl.lagJsgn'number--semantic-unit!⇒Jsn,
* McsEngl.lagJsgn-number!⇒Jsn,
* McsEngl.number--semantic-unit--of-Javascript!⇒Jsn,
* McsEngl.number//Javascript!⇒Jsn,

generic-chain::
* Number.prototype, ((3).__proto__ === Number.prototype //true)
* Object.prototype, ((3).__proto__.__proto__ === Object.prototype //true)

Jsn'Number.prototype

description::
Number.prototype is the-generic-object, of all numbers.
In other words, its members are-inherited by all numbers.

name::
* McsEngl.lagJsgn-o.Number.prototype,
* McsEngl.lagJsgn'Number.prototype-object,

generic-chain::
* Object.prototype (Number.prototype.__proto__ === Object.prototype //true),

member::
(Node.6.3.0):
> Object.getOwnPropertyNames(Number.prototype).sort()
[ 'constructor', 'toExponential', 'toFixed', 'toLocaleString', 'toPrecision', 'toString', 'valueOf' ]

(Chrome.50):
> Object.getOwnPropertyNames(Number.prototype).sort()
["constructor", "toExponential", "toFixed", "toLocaleString", "toPrecision", "toString", "valueOf"]

(Firefox.46):
> Object.getOwnPropertyNames(Number.prototype).sort()
["constructor", "toExponential", "toFixed", "toLocaleString", "toPrecision", "toSource", "toString", "valueOf"]

(Edge.20):
> Object.getOwnPropertyNames(Number.prototype).sort()
[constructor", "toExponential", "toFixed", "toLocaleString", "toPrecision", "toString", "valueOf"]

(Safari.5-1-7):
> Object.getOwnPropertyNames(Number.prototype).sort()
["constructor", "toExponential", "toFixed", "toLocaleString", "toPrecision", "toString", "valueOf"]

Number.prototype.toLocaleString-function

example::
(123456789).toLocaleString() //123,456,789

name::
* McsEngl.lagJsgn'Number.prototype.toLocaleString-function,
* McsEngl.Number.prototype.toLocaleString-function//Javascript,

Jsn.NaN

description::
The problem is, NaN is a dangerous beast.
NaN is a special value that means “not a number”, but in fact it is a number you can calculate with.
NaN is contagious.
All calculations involving NaN fail silently, yielding NaN: 5 + NaN makes NaN, Math.sqrt(NaN) produces NaN.
All comparisons with NaN yield false: 5 > NaN is false, 5 < NaN is also false. 5 === NaN is false, NaN === NaN is also false.
If a NaN slips into your logic, it is carried through the rest of the program until the user sees a “NaN” appearing in the interface.
It is hard to find the cause of a NaN since the place where it appears can be far from the place that caused it.
Typically, the cause of a NaN is an implicit type conversion.
My advice is to raise the alarm as soon as you see a NaN.
[https://molily.de/robust-Javascript/#failing-fast]

name::
* McsEngl.lagJsgn'NaN,
* McsEngl.Jsn.NaN,

Jssut.object (Jso)

description::
· object[a] is a-collection of name-value-pairs (its[a] members).
· object inherits the-members of the-Object.prototype, in other words it is SPECIFIC of the-Object.prototype.
· objects are semantic-units that map concepts.

name::
* McsEngl.Jsgno!⇒Jso,
* McsEngl.Jso,
* McsEngl.Jso!=Javascript-object,
* McsEngl.lagJsgn'object!⇒Jso,
* McsEngl.lagJsgn'object--semantic-unit!⇒Jso,
* McsEngl.Jssut.object!⇒Jso,
* McsEngl.object--semantic-unit.Javascript!⇒Jso,
* McsEngl.object//Javascript!⇒Jso,

member of Jso

description::
· member-of-object is any of the-name-value-pairs of the-object.

name::
* McsEngl.lagJsgn'member-of-an-object,
* McsEngl.lagJsgn'object'member,
* McsEngl.Jso'member,
* McsEngl.Jso'property,
* McsEngl.property-of--Javascript-object,
===
* Some (spec) call the-members-of-an-object 'properties', and some (MDN) with 'properties' call the-non-methods-members-of-an-object,

Same-name:
The-members of an-object can-NOT-have the-same name.
> var o = {a:1, a:2, a:3, A:4};
< Object {a: 3, A: 4}

Creating:
a) with the-creation of the-object.
b) after object creation with the-code:
object.member = value;

Access:
To access a-member of an-object, lagJsgn uses the-code:
// dot notation
object.member
// array notation
object["member"]


Array-notation gives us the-option to access a-member with variables:
var o = {sMbr:'a-string', nMbr:2};
var sM1 = 's' + 'Mbr';
console.log(o[sM1]) //returns 'a-string'

specific::
* Custom: not a-unit native to language,
* CustomNo: a-unit native to language,
* Inherited: a-member of its generic-objects,
* InheritedNo,
* Method: a-member which is a-function,
* MethodNo: any other member. Some call them 'properties',
* Internal: a-unit created inside current-algorithm,
* InternalNo: a-unit created in another algorithm and imported into current-algorithm,
* Public: a-member we have access from outside of the-object. ALL members of a-generic-object are public,
* PublicNo: A-function (a-specific-object) has publicNo members,

key of Jso

description::
· key-of-object is any NAME of the-name-value-pairs of the-object.
· Object.keys(oX) returns an-array with the-keys of object oX.

name::
* McsEngl.Jso'key,

value of Jso

description::
· value-of-object is any VALUE of the-name-value-pairs of the-object.
· Object.values(oX) returns an-array with the-values of object oX.

name::
* McsEngl.Jso'value,

scope of Jso (link)

DOING of Jso

description::
* algo-managing-Jso,

name::
* McsEngl.Jso'doing,

WHOLE of Jso

whole-chain::
=== (syntax--whole-part-tree)
* lagJsgn-phrase,
* lagJsgn-sentence,
* lagJsgn-library,
* lagJsgn-program,
=== (API--whole-part-tree)
* another semantic-unit,
...
* window,

GENERIC of Jso

generic-chain::
The-generic-object of an-object is-called 'prototype'.
The-generic-object inherits its members TO its specifics.
[HmnSgm.2017-10-11]
===
JavaScript objects are dynamic "bags" of properties (referred to as own properties).
JavaScript objects have a link to a prototype object.
When trying to access a property of an object, the property will not only be sought on the object but on the prototype of the object, the prototype of the prototype, and so on until either a property with a matching name is found or the end of the prototype chain is reached.

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain#Inheriting_properties]
===
* Object.prototype, (literal-objects ({}).__proto__ === Object.prototype //true)
or
* Constructor.prototype, (constructor-objects)
or
* objectX, (var o = Object.create(objectX))

name::
* McsEngl.generic-chain//Javascript,
* McsEngl.lagJsgn'prototype-chain,
* McsEngl.prototype-chain//Javascript,

Jso.SPECIFIC

specific.alphabetically::
* constructor-object,
* constructorNo-object,
* custom-object,
* customNo-object,
* most-generic-object,
* most-whole-object,

Jso.CONSTRUCTOR

description::
Constructor-object is an-object created with a-constructor-function: var o = new Constructor();

name::
* McsEngl.lagJsgn'constructor-object,
* McsEngl.lagJsgn'object.constructor,
* McsEngl.lagJsgn'object-created-by-a-constructor,
* McsEngl.lagJsgn'this,
* McsEngl.Jso.constructor,
* McsEngl.this//Javascript,
===
I use to name individual constructor-objecs as: oConstructor which helps reading the-code.

generic-chain::
* Constructor.prototype,
...
* Object.prototype,

member::
A-constructor-object[1] has as members the-members of its constructor that are-prefixed with this.
Also it[1] INHERITS the-members of the-Constructor.prototype-object.
It is A-MISTAKE to call the-object-of-a-constructor, INSTANCE of the-constructor.

Jso.CONSTRUCTOR.NO

description::
ConstructorNo-object is an-object NOT-CREATED with a-constructor-function: var o = new Constructor();
There are 3 cases:
a) a-literal-object.
b) var o = Object.create(o2);
Here, o2 is a-generic of o.
c) object created as a return of a-function.

name::
* McsEngl.lagJsgn'constructorNo-object,
* McsEngl.lagJsgn'nonconstructor-object,
* McsEngl.lagJsgn'object.constructorNo,
* McsEngl.lagJsgn'object-not-created-by-a-constructor,
* McsEngl.Jso.constructorNo,

Jssut.regexp (Jsr)

description::
· a-regexp-(regular-expression) denotes parts of texts.
· it is the-query-language for texts in archetype.
· code-example:
var r = /d/;

name::
* McsEngl.Jsgnr!⇒Jsr,
* McsEngl.Jsr,
* McsEngl.Jsr!=regular-expression.Javascript,
* McsEngl.Jsregexp!⇒Jsr,
* McsEngl.Jssut.regexp!⇒Jsr,
* McsEngl.lagJsgn'regexp--semantic-unit!⇒Jsr,
* McsEngl.regexp--semantic-unit.Javascript!⇒Jsr,
* McsEngl.regexp//Javascript!⇒Jsr,
* McsEngl.regular-expression.Javascript!⇒Jsr,

generic-chain::
* RegExp.prototype, (/r/.__proto__ === RegExp.prototype //true)
* Object.prototype, (/r/.__proto__.__proto__ === Object.prototype //true)

modifier of Jsr

description::
In JavaScript source code, a regular expression is written in the form of /pattern/modifiers where "pattern" is the regular expression itself, and "modifiers" are a series of characters indicating various options.
The "modifiers" part is optional.
This syntax is borrowed from Perl.
JavaScript supports the following modifiers, a subset of those supported by Perl:
* /g enables "global" matching. When using the replace() method, specify this modifier to replace all matches, rather than only the first one,
* /i makes the regex match case insensitive,
* /m enables "multi-line mode". In this mode, the caret and dollar match before and after newlines in the subject string,
You can combine multiple modifiers by stringing them together as in /regex/gim. Notably absent is an option to make the dot match line break characters.
[http://www.regular-expressions.info/Javascript.html]

name::
* McsEngl.Jsr'modifier,
* McsEngl.modifier-of-Javascript-regexp,

RegExp.prototype

description::
RegExp.prototype is the-generic-object, of all regexp.
In other words, its members are-inherited by all regexp.

name::
* McsEngl.Jso.RegExp.prototype,
* McsEngl.lagJsgn'RegExp.prototype-object,

generic-chain::
* Object.prototype (RegExp.prototype.__proto__ === Object.prototype //true),

member::
(Chrome.50):
> Object.getOwnPropertyNames(RegExp.prototype).sort()
["compile", "constructor", "exec", "flags", "global", "ignoreCase", "multiline", "source", "sticky", "test", "toString", "unicode"]

(Firefox.46):
> Object.getOwnPropertyNames(RegExp.prototype).sort()
["compile", "constructor", "exec", "flags", "global", "ignoreCase", "lastIndex", "multiline", "source", "sticky", "test", "toSource", "toString", "unicode"]

(Edge.20):
> Object.getOwnPropertyNames(RegExp.prototype).sort()
["compile", "constructor", "exec", "global", "ignoreCase", "lastIndex", "multiline", "options", "source", "test", "toString", "unicode"]

(Safari.5-1-7):
> Object.getOwnPropertyNames(RegExp.prototype).sort()
["compile", "constructor", "exec", "global", "ignoreCase", "lastIndex", "multiline", "source", "test", "toString"]

RegExp.prototype.test-function

description::
The test() method executes a search for a match between a regular expression and a specified string. Returns true or false.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test]

name::
* McsEngl.Jsr'test-function,
* McsEngl.RegExp.prototype.test-function,

example::
/\* Mcs...\./.test('<br>* cptItalake') //false
/\* Mcs...\./.test('<br>* cptIta.lake') //true
/a/i.test('123Abc') //true
new RegExp('a','i').test('123Abc') //true
new RegExp('a').test('123Abc') //false

String.prototype.match-function (link)

String.prototype.replace-function (link)

String.prototype.split-function (link)

Jsr.SPECIFIC

name::
* McsEngl.Jsr.specific,

specific::
* Jsr.char.any /./,
* Jsr.char.no /[^a]/,
* Jsr.char.digit /\d/,
* Jsr.char.quantity.one_or_more /a+/,
* Jsr.char.quantity.zero_or_more /a*/,
* Jsr.char.quantity.zero_or_one /a?/,
* Jsr.char.quantity.number /a{n}/,
* Jsr.char.range /[a-z0-9]/ /[\u0020-\u007E],
* Jsr.char.whitespace /\s/,
* Jsr.char.whitespaceNo /\S/,
* Jsr.string.start /^string/,
* Jsr.string.end /string$/,
* Jsr.word-bountary /\b/,

Jsr.with-variable

name::
* McsEngl.Jsr.with-variable,

example::
var s = 'c'
/s/i.test('C') //false
new RegExp(s, 'i').test('C') //true

Jsr.word-bountary

description::
· \b matches boundaries of words (= chars between spaces).
/\ba/.test('xx add') //true
/\bd/.test('xx add') //false
/d\b/.test('xx add') //true

name::
* McsEngl.Jsr.word-bountary,

Jssut.string (Jss)

description::
· strings represent any text in archetype.
· strings have meaning for humans, but NOT for the-machines.
· code-example:
var s = 'string';

name::
* McsEngl.Jsgns!⇒Jss,
* McsEngl.Jss,
* McsEngl.Jss!=Javascript-string,
* McsEngl.Jsstring!⇒Jss,
* McsEngl.Jssut.string!⇒Jss,
* McsEngl.lagJsgn'string!⇒Jss,
* McsEngl.lagJsgn'string--semantic-unit!⇒Jss,
* McsEngl.string--semantic-unit--of-Javascript!⇒Jss,
* McsEngl.string//Javascript!⇒Jss,

generic-chain::
* String.prototype, (''.__proto__ === String.prototype //true)
* Object.prototype, (''.__proto__.__proto__ === Object.prototype //true)

addressWpg::
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/
* https://mathiasbynens.be/notes/Javascript-escapes,

example::
"a string"
'another string'
'\uD834\uDF06' //𝌆
'\u{1D306}' //𝌆

String.prototype-object of Jss

description::
String.prototype is the-generic-object, of all strings.
In other words, its members are-inherited by all strings.

name::
* McsEngl.Jso.String.prototype,
* McsEngl.lagJsgn'String.prototype-object,

addressWpg::
* members with examples: https://gist.github.com/rauschma/,

generic-chain::
* Object.prototype (String.prototype.__proto__ === Object.prototype //true),

member::
(Node.6.3.0):
> Object.getOwnPropertyNames(String.prototype).sort()
[ 'anchor', 'big', 'blink', 'bold', 'charAt', 'charCodeAt', 'codePointAt', 'concat', 'constructor', 'endsWith', 'fixed', 'fontcolor', 'fontsize', 'includes', 'indexOf', 'italics', 'lastIndexOf', 'length', 'link', 'localeCompare', 'match', 'normalize', 'repeat', 'replace', 'search', 'slice', 'small', 'split', 'startsWith', 'strike', 'sub', 'substr', 'substring', 'sup', 'toLocaleLowerCase', 'toLocaleUpperCase', 'toLowerCase', 'toString', 'toUpperCase', 'trim', 'trimLeft', 'trimRight', 'valueOf' ]

(Chrome.50):
> Object.getOwnPropertyNames(String.prototype).sort()
["anchor", "big", "blink", "bold", "charAt", "charCodeAt", "codePointAt", "concat", "constructor", "endsWith", "fixed", "fontcolor", "fontsize", "includes", "indexOf", "italics", "lastIndexOf", "length", "link", "localeCompare", "match", "normalize", "repeat", "replace", "search", "slice", "small", "split", "startsWith", "strike", "sub", "substr", "substring", "sup", "toLocaleLowerCase", "toLocaleUpperCase", "toLowerCase", "toString", "toUpperCase", "trim", "trimLeft", "trimRight", "valueOf"]

(Firefox.46):
> Object.getOwnPropertyNames(String.prototype).sort()
["anchor", "big", "blink", "bold", "charAt", "charCodeAt", "codePointAt", "concat", "constructor", "contains", "endsWith", "fixed", "fontcolor", "fontsize", "includes", "indexOf", "italics", "lastIndexOf", "length", "link", "localeCompare", "match", "normalize", "repeat", "replace", "search", "slice", "small", "split", "startsWith", "strike", "sub", "substr", "substring", "sup", "toLocaleLowerCase", "toLocaleUpperCase", "toLowerCase", "toSource", "toString", "toUpperCase", "trim", "trimLeft", "trimRight", "valueOf"]

(Edge.20):
> Object.getOwnPropertyNames(String.prototype).sort()
["anchor", "big", "blink", "bold", "charAt", "charCodeAt", "codePointAt", "concat", "constructor", "endsWith", "fixed", "fontcolor", "fontsize", "includes", "indexOf", "italics", "lastIndexOf", "length", "link", "localeCompare", "match", "normalize", "repeat", "replace", "search", "slice", "small", "split", "startsWith", "strike", "sub", "substr", "substring", "sup", "toLocaleLowerCase", "toLocaleUpperCase", "toLowerCase", "toString", "toUpperCase", "trim", "trimLeft", "trimRight", "valueOf"]

(Safari.5-1-7):
> Object.getOwnPropertyNames(String.prototype).sort()
["anchor", "big", "blink", "bold", "charAt", "charCodeAt", "concat", "constructor", "fixed", "fontcolor", "fontsize", "indexOf", "italics", "lastIndexOf", "length", "link", "localeCompare", "match", "replace", "search", "slice", "small", "split", "strike", "sub", "substr", "substring", "sup", "toLocaleLowerCase", "toLocaleUpperCase", "toLowerCase", "toString", "toUpperCase", "trim", "trimLeft", "trimRight", "valueOf"]

String.prototype.codePointAt-function

description::
· returns the-decimal Unicode-code-point of a-character in a-string.

name::
* McsEngl.lagJsgn'codePointAt-function,
* McsEngl.Jsf.codePointAt-of-string,
* McsEngl.String.prototype.codePointAt-function,
* McsEngl.codePointAt-function--of--Javascript-string,

example::
"𝌆".codePointAt(0) //119558

String.prototype.match-function

description::
The match() method retrieves the matches when matching a string against a regular expression.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match]

name::
* McsEngl.lagJsgn'match-function,
* McsEngl.Jsf.match-of-string,
* McsEngl.String.prototype.match-function,
* McsEngl.match-function.string//Javascript,

example::
'abd'.match(/[\u0020-\u007E]/i)
//["a", index: 0, input: "abd", groups: undefined]

String.prototype.replace-function

description::
The replace() method returns a new string with some or all matches of a pattern replaced by a replacement. The pattern can be a string or a RegExp, and the replacement can be a string or a function to be called for each match.
Note: The original string will remain unchanged.
Syntax: str.replace(regexp|substr, newSubstr|function)
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace]

name::
* McsEngl.lagJsgn'replace-function,
* McsEngl.Jsf.replace-of-string,
* McsEngl.String.prototype.replace-function,
* McsEngl.replace-function.string//Javascript,

example::
> 'string'.replace('n', 'o') //"striog"
===
> 'stringH2'.replace(/(\w*)H\d/, '$1'); //"string"
===
> "John Smith".replace(/(\w+)\s(\w+)/, "$2, $1"); //"Smith, John".
===
> 'borderTop'.replace(/[A-Z]/, function(match) {return '-' + match.toLowerCase();});
// "border-top"
===
> 'abc12345#$*%'.replace(/([^\d]*)(\d*)([^\w]*)/, function(match, p1, p2, p3, offset, string) { return [match, p1, p2, p3].join(' - '); });
// "abc12345#$*% - abc - 12345 - #$*%"
// p1, p2, p3 are (the-groups) inside regexp
===
//replace-all
'monopoly'.replace('o', 'a') //"manopoly"
'monopoly'.replace(/o/g, 'a') //"manapaly"
'monopoly'.split('o').join('a') //"manapaly"

String.prototype.split-function

description::
The split() method splits a String object into an array of strings by separating the string into substrings, using a specified separator string to determine where to make each split.
Syntax
str.split([separator[, limit]])
Attention: If an empty string ("") is used as the separator, the string is not split between each user-perceived character (grapheme cluster) or between each unicode character (codepoint) but between each UTF-16 codeunit. This destroys surrogate pairs. See also How do you get a string to a character array in JavaScript? on stackoverflow.
Parameters
separator Optional
Specifies the string which denotes the points at which each split should occur. The separator is treated as a string or as a regular expression. If a plain-text separator contains more than one character, that entire string must be found to represent a split point. If separator is omitted or does not occur in str, the array returned contains one element consisting of the entire string. If separator is an empty string, str is converted to an array of characters. If no separator is specified, an array containing the input string is returned.
limit Optional
Integer specifying a limit on the number of splits to be found. When this parameter is provided, the split() method splits the string at each occurrence of the specified separator but stops when limit entries have been placed into the array. It may still contain fewer entries than limit if the end of the string is reached before the specified limit is reached. The left-over text is not returned in the new array.
Return value
An Array of strings split at each point where the separator occurs in the given string.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split]

name::
* McsEngl.lagJsgn'split-function,
* McsEngl.Jsf.split-of-string,
* McsEngl.split-function.string//Javascript,
* McsEngl.String.prototype.split-function,

example::
'Jan,Feb,Mar'.split(',') //["Jan", "Feb", "Mar"]
'Jan,Feb,Mar'.split(',', 2) //["Jan", "Feb"]
'Fred Barney; Helen Rigby ; Bill Abel'.split(/\s*;\s*/)
//["Fred Barney", "Helen Rigby", "Bill Abel"]

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split]

String.prototype.substring-function

name::
* McsEngl.lagJsgn'substring-function,
* McsEngl.Jsf.substring-of-string,
* McsEngl.String.prototype.substring-function,
* McsEngl.substring-function--of--Javascript-string,

Code::
> "nameXyz".substring(2) //meXyz
> s="nameXyz"; s.substring(s.indexOf('m')) //meXyz
> s="nameXyzXa"; s.substring(s.lastIndexOf('X')) //Xa
> "nameXyz".substring(2,4) //me
> "nameXyz".substring(0,2) //na
> s="name#12Xyz"; s.substring(s.search(/[#X]/)) //#12Xyz
> s="name12Xyz"; s.substring(s.search(/[#X]/)) //Xyz

String-function of Jss

description::
The-String-function contains the-String.prototype-object is the-generic-object, of all strings.

name::
* McsEngl.lagJsgn'String-function,
* McsEngl.String-function//Javascript,

member::
(Chrome.61)> Object.getOwnPropertyNames(String)
(6) ["length", "name", "prototype", "fromCharCode", "fromCodePoint", "raw"]

Jss.template-literal

description::
"Template literals are string literals allowing embedded expressions. You can use multi-line strings and string interpolation features with them.
They were called "template strings" in prior editions of the ES2015 specification."
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals]

name::
* McsEngl.Jss'${},
* McsEngl.Jss.template-literal,
* McsEngl.template-literal//Javascript,
* McsEngl.template-string//Javascript,

example::
var a = 5;
var b = 10;
console.log(`Fifteen is ${a + b} and
not ${2 * a + b}.`);
// "Fifteen is 15 and
// not 20."

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#Expression_interpolation]

Jssut.undefined

description::
undefined is a-semantic-unit that denotes a-name-value-pair without value assigned (initialized).
Also it is-used to denote that a-function has no output.
· Jscode: undefined

name::
* McsEngl.lagJsgn'undefined--semantic-unit,
* McsEngl.Jssut.undefined,
* McsEngl.lagJsgn'undefined,
* McsEngl.undefined--semantic-unit--of-Javascript,

generic-chain::
* object-pmNo,
* semantic-unit,

Jsalgo'API of lagJsgn

description::
API is a-set of semantic-units.
An-API, like any conceptual-information, is-structured at the SAME time, into 3 different tree-structures:
1) A-whole-part-tree with root-node the-most-whole-object and
2) A-generic-specific-tree with root-node the-most-generic-object (Object.prototype).
3) A-directory-tree structure.
· the-discovery (not invention) that an-API has and a-whole-part and a-generic-specific tree-structure, is mine, who first realized that any human-conceptual-information has AND a-specific-generic AND a-whole-part conceptual tree-structure.

name::
* McsEngl.API.Javascript!⇒JsAPI,
* McsEngl.JsAPI,
* McsEngl.JsgnAPI!⇒JsAPI,
* McsEngl.lagJsgn'API!⇒JsAPI,
* McsEngl.lagJsgn'Application-Programming-Interface!⇒JsAPI,

jsAPI'most-whole-object (global)

description::
· the whole-part relations of semantic-units form a whole-part-tree structure.
· the-ROOT-node of this structure is the most-whole-object and contains all others.
· it is called the-global-object.
· with the same name are-called and its children (not its descendants).
· in Jsbr, this is the-window-object.
· in Jsnd, this is the-global-object.

name::
* McsEngl.Jsmwo,
* McsEngl.Jsgnmwo!⇒Jsmwo,
* McsEngl.JsAPI'global-object!⇒Jsmwo,
* McsEngl.JsAPI'most-whole-object!⇒Jsmwo,
* McsEngl.global-object//Javascript!⇒Jsmwo,
* McsEngl.lagJsgn'global-object!⇒Jsmwo,
* McsEngl.lagJsgn'most-whole-object!⇒Jsmwo,
* McsEngl.lagJsgn'Mwo!⇒Jsmwo,
* McsEngl.most-whole-object//Javascript!⇒Jsmwo,
* McsEngl.mwo//Javascript!⇒Jsmwo,

whole-chain::
* none,

generic-chain::
...
* Object.prototype,
LOOK-THAT: the-most-whole-object is specific of the-most-generic-object.

Jsmwo'member

description::
The-members of the-most-whole-object are-called ALSO 'globals'.
To avoid ambiguity I will-call them 'global-members'.

name::
* McsEngl.Jsglobal,
* McsEngl.Jsmwo'global-member!⇒Jsglobal,
* McsEngl.lagJsgn'global-member!⇒Jsglobal,
* McsEngl.lagJsgn'globals!⇒Jsglobal,
* McsEngl.lagJsgn'member-of-most-whole-object!⇒Jsglobal,

specific::
* Jsbr-global-member,
* Jsnd-global-member,

Jsmwo'whole-part-tree

description::
The-semantic-units of an-api form a-whole-part-tree.
The-ROOT-node of this structure is the-most-whole-object (the-global-object) and contains all others.

name::
* McsEngl.JsAPI'whole-part-tree,
* McsEngl.Jsmwo'whole-part-tree,
* McsEngl.lagJsgn'whole-part-tree-of-API,
* McsEngl.lagJsgn'Wpt-API(Javascript--whole-part-tree-API),

specific::
* Jsbr-native-whole-part-tree,
* Jsnd-native-whole-part-tree,

jsAPI'most-generic-object (Object.prototype)

description::
All lagJsgn-objects inherit the-members of this object.
Object.prototype is the-ROOT node of the-API-generic-specific-tree of ALL Javascript dialects.

name::
* McsEngl.Jsgnmgo!⇒Jsmgo,
* McsEngl.Jsmgo,
* McsEngl.Object.prototype-of-Javascript!⇒Jsmgo,
* McsEngl.lagJsgn'Object.prototype!⇒Jsmgo,
* McsEngl.lagJsgn'most-generic-object!⇒Jsmgo,
* McsEngl.lagJsgn-mgo!⇒Jsmgo,
* McsEngl.lagJsgn-mgo(most-generic-object)!⇒Jsmgo,
* McsEngl.most-generic-object//Javascript!⇒Jsmgo,

whole-chain::
* Object,
* most-whole-object,
LOOK-THAT: the-most-generic-object is part of the-Object-function, which is part of the-most-whole-object.

generic-chain::
* none,

member::
(Jsnd.6-3-1)
> Object.getOwnPropertyNames(Object.prototype).sort()
[ '__defineGetter__', '__defineSetter__', '__lookupGetter__', '__lookupSetter__', '__proto__', 'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'valueOf' ]

(Chrome.50):
> Object.getOwnPropertyNames(Object.prototype).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

(Firefox.46):
> Object.getOwnPropertyNames(Object.prototype).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toSource", "toString", "unwatch", "valueOf", "watch"]

(Edge.20):
> Object.getOwnPropertyNames(Object.prototype).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

(Safari.5-1-7):
> Object.getOwnPropertyNames(Object.prototype).sort()
["__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]

specific::
* Jsbr-Object.prototype,
* Jsnd-Object.prototype,

Object-function

description::
Object is the-constructor that contains the-Object.prototype.
It can-create objects: var s = new Object('string');
It contains important members.

name::
* McsEngl.lagJsgn'Object-function,

whole-chain::
* most-whole-object,

generic-chain::
* Function.prototype,
* Object.prototype,

member::
(Chrome.50):
> Object.getOwnPropertyNames(Object).sort()
["arguments", "assign", "caller", "create", "defineProperties", "defineProperty", "freeze", "getOwnPropertyDescriptor", "getOwnPropertyNames", "getOwnPropertySymbols", "getPrototypeOf", "is", "isExtensible", "isFrozen", "isSealed", "keys", "length", "name", "preventExtensions", "prototype", "seal", "setPrototypeOf"]

(Firefox.46):
> Object.getOwnPropertyNames(Object).sort()
[]

(Edge.20):
> Object.getOwnPropertyNames(Object).sort()
[]

(Safari.5-1-7):
> Object.getOwnPropertyNames(Object).sort()
[]

specific::
* none,

lagJsgn'Object.create-function

description::
The Object.create() method creates a new object with the specified prototype object and properties.
Syntax
Object.create(proto[, propertiesObject])
Parameters
proto
The object which should be the prototype of the newly-created object.
propertiesObject
Optional. If specified and not undefined, an object whose enumerable own properties (that is, those properties defined upon itself and not enumerable properties along its prototype chain) specify property descriptors to be added to the newly-created object, with the corresponding property names. These properties correspond to the second argument of Object.defineProperties().
Return value
A new object with the specified prototype object and properties.
Exceptions
A TypeError exception if the proto parameter isn't null or an object.

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create]

name::
* McsEngl.lagJsgn'Object.create-function,

lagJsgn'Object.getOwnPropertyNames-function

description::
The Object.getOwnPropertyNames() method returns an array of all properties (enumerable or not) found directly upon a given object.
Syntax
Object.getOwnPropertyNames(obj)
Parameters
obj
The object whose enumerable and non-enumerable own properties are to be returned.
Return value
An array of strings that correspond to the properties found directly upon the given object.

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames]

name::
* McsEngl.lagJsgn'Object.getOwnPropertyNames,
* McsEngl.lagJsgn'Object.getOwnPropertyNames-function,
* McsEngl.lagJsgn'Object.getOwnPropertyNames(),

Code:
> Object.getOwnPropertyNames(obj).sort() // to sort the-members.
> Object.getOwnPropertyNames(obj).join(', ') // to display ALL the-members.
> Object.getOwnPropertyNames(obj).filter(function(sM){return sM.match(/^[a-e]/)}) // to display the-members that begin with a-to-e.

jsAPI'generic-specific-tree

description::
The-semantic-units of an-api except of a-whole-part-tree form AND a-generic-specific-tree.
The-ROOT-node of this structure is the-most-generic-object, the-Object.prototype.

name::
* McsEngl.JsAPI'generic-specific-tree,
* McsEngl.lagJsgn'generic-specific-tree-of-API,

specific::
* Jsbr-native-generic-specific-tree,
* Jsnd-native-generic-specific-tree,

jsAPI.SPECIFIC

specific::
* Jsbr-API,
* Jsnd-API,
===
* native-API,
* nativeNo-API,
===
* vanilla-API,
* vanillaNo-API,
===
* library-API,
* program-API,

jsAPI.NATIVE

Descripton:
Native-API is the-API with only and all the-native-semantic-units.
It has
- a-whole-part-tree-structure
- a-generic-specific-tree-structure and
- a-directory-tree-structure.

name::
* McsEngl.JsAPI.native,
* McsEngl.lagJsgn'native-API,
* McsEngl.lagJsgn'built-in-API,

Generic::
* JsAPI,

specific::
* Jsbr-native-API,
* Jsnd-native-API,

lagJsgn'Error-function

Description:
The Error constructor creates an error object. Instances of Error objects are thrown when runtime errors occur. The Error object can also be used as a base object for user-defined exceptions. See below for standard built-in error types.
Syntax
new Error([message[, fileName[, lineNumber]]])

[https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Error]

name::
* McsEngl.Error-function//Javascript,
* McsEngl.lagJsgn'Error-function,
* McsEngl.Jsf.Error,

description::
All JavaScript and System errors raised by Node.js inherit from, or are instances of, the standard JavaScript Error class and are guaranteed to provide at least the properties available on that class.
[https://nodejs.org/docs/v6.3.1/api/errors.html#errors_errors]

member::
// Jsnd.6-3-1
// Object.getOwnPropertyNames(Error).sort()
[ 'arguments', 'caller', 'captureStackTrace', 'length', 'name', 'prototype', 'stackTraceLimit' ]
===
// Chrome.52
// Object.getOwnPropertyNames(Error).sort()
["arguments", "caller", "captureStackTrace", "length", "name", "prototype", "stackTraceLimit"]
===
// Firefox.47
// Object.getOwnPropertyNames(Error).sort()
[ "length", "name", "prototype" ]
===
// Edge.25
// Object.getOwnPropertyNames(Error).sort()
["arguments", "caller", length", "name", "prototype", "stackTraceLimit"]

addressWpg::
* https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Error,
* https://nodejs.org/api/errors.html,
* {2018-05-16} Brandon-Morelli, Top 10 JavaScript errors from 1000+ projects (and how to avoid them), https://codeburst.io/,

specific::
* EvalError,
* InternalError,
* RangeError,
* ReferenceError,
* SyntaxError,
* TypeError,
* URIError,

lagJsgn'JSON-object

description::
The-Javascript-JSON-object contains 2 functions that map Javascript-semantic-units with JSON-language-semantic-units, eg {a:1, b:2} <==> {"a":1,"b":2}

name::
* McsEngl.JSON-object//Javascript,
* McsEngl.lagJsgn-JSON-object,
* McsEngl.Jso.JSON,

whole-chain::
* lagJsgn-most-whole-object (global),

lagJsJSON'API:
(Chrome.55)
> Object.getOwnPropertyNames(JSON).sort().join(', ')
"parse, stringify"
> Object.getOwnPropertyNames(JSON.__proto__).sort().join(', ')
"__defineGetter__, __defineSetter__, __lookupGetter__, __lookupSetter__, __proto__, constructor, hasOwnProperty, isPrototypeOf, propertyIsEnumerable, toLocaleString, toString, valueOf"

lagJsgn'JSON.parse-function

description::
The-JSON.parse()-function has as INPUT a-string that represents a-JSON-language-semantic-unit and OUTPUT the-Javascript-semantic-unit that corresponds to that of JSON-language.

Code:
> var a = JSON.parse('[1,2]') //undefined
> a //[1, 2]
> var n = JSON.parse('2') //undefined
> n //2
> var o = JSON.parse('{"a":1,"b":2}') //undefined
> o //Object {a: 1, b: 2}

lagJsgn'JSON.stringify-function

description::
The-JSON.stringify()-function has as INPUT a-Javascript-semantic-unit and OUTPUT a-string that corresponds to similar JSON-language-semantic-unit.

Code:
> JSON.stringify({a:1, b:2}) //"{"a":1,"b":2}"

lagJsgn'Math-object

name::
* McsEngl.lagJsgn'Math-object,
* McsEngl.Jso.Math,
* McsEngl.Math-object//Javascript,

whole-chain::
* lagJsgn-most-whole-object (global),

lagJsMath'member::
(Jsnd.6-2-2)
> Object.getOwnPropertyNames(Math).sort()
[ 'E', 'LN10', 'LN2', 'LOG10E', 'LOG2E', 'PI', 'SQRT1_2', 'SQRT2', 'abs', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'cbrt', 'ceil', 'clz32', 'cos', 'cosh', 'exp', 'expm1', 'floor', 'fround', 'hypot', 'imul', 'log', 'log10', 'log1p', 'log2', 'max', 'min', 'pow', 'random', 'round', 'sign', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc' ]

(Firefox.47)
> Object.getOwnPropertyNames(Math).sort()
[ 'E', 'LN10', 'LN2', 'LOG10E', 'LOG2E', 'PI', 'SQRT1_2', 'SQRT2', 'abs', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'cbrt', 'ceil', 'clz32', 'cos', 'cosh', 'exp', 'expm1', 'floor', 'fround', 'hypot', 'imul', 'log', 'log10', 'log1p', 'log2', 'max', 'min', 'pow', 'random', 'round', 'sign', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'toSource', 'trunc' ]

(Edge.25)
> Object.getOwnPropertyNames(Math).sort()
[ 'E', 'LN10', 'LN2', 'LOG10E', 'LOG2E', 'PI', 'SQRT1_2', 'SQRT2', 'abs', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'cbrt', 'ceil', 'clz32', 'cos', 'cosh', 'exp', 'expm1', 'floor', 'fround', 'hypot', 'imul', 'log', 'log10', 'log1p', 'log2', 'max', 'min', 'pow', 'random', 'round', 'sign', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc' ]

lagJsgn'Set-function

description::
· the-Set-function create objects that contain not indexed data, only once.
· it is the-math-set-concept, in Javascript.
[hmnSngo.2018-07-09]
===
The Set object lets you store unique values of any type, whether primitive values or object references.
Syntax
new Set([iterable]);
Parameters
iterable: If an iterable object is passed, all of its elements will be added to the new Set. If you don't specify this parameter, or its value is null, the new Set is empty.
Return value
A new Set object.
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set]

name::
* McsEngl.JsAPI'Set-function!⇒Jsset,
* McsEngl.Jsset,
* McsEngl.lagJsgn'Set-function!⇒Jsset,
* McsEngl.set//Javascript!⇒Jsset,

example::
var oSet = new Set([1,2,3]) //set with elements 1, 2, 3
var oSet2 = new Set('Hellas') //set with elements 'H' 'e', 'l', 'a', 's'

addressWpg::
* {2018-01-24} Maya-Shavin, ES6 — Set vs Array — What and when? https://medium.com/front-end-hacking/,

set'element-checking

example::
var oSet = new Set([1,2,3]); //{1,2,3}
oSet.has(2); //true

name::
* McsEngl.Jsset'element-checking,

set'element-adding

example::
var oSet = new Set([1,2,3]); //{1,2,3}
oSet.add('n'); //{1,2,3,'n'}

name::
* McsEngl.Jsset'element-adding,

set'element-removing

example::
var oSet = new Set([1,2,3]); //{1,2,3}
oSet.delete(1); //{2,3}
oSet.clear() //removes all

name::
* McsEngl.Jsset'element-removing,

set'convert-to-array

example::
var oSet = new Set([1,2,3]); // {1,2,3}
var a = Array.from(oSet); //[1,2,3]

name::
* McsEngl.Jsset'convert-to-array,

set'relation-to-array

description::
"In general, to my opinion, Set doesn’t really have a huge clear advantage over Array, except in specific scenarios such as when we want to maintain “distinct” data with minimum effort, or to work with a lot of distinct data sets together using the most basic set operations, without the need of direct accessing element.
Otherwise, Array should always the choice. Reason? Less CPU work to fetch the element when it is needed."
[https://medium.com/front-end-hacking/es6-set-vs-array-what-and-when-efc055655e1a]

name::
* McsEngl.Jsset'relation-to-array,

lagJsgn'console-object

description::
The Console object provides access to the browser's debugging console (e.g. the Web Console in Firefox). The specifics of how it works varies from browser to browser, but there is a de facto set of features that are typically provided.
The Console object can be accessed from any global object. Window on browsing scopes and WorkerGlobalScope as specific variants in workers via the property console. It's exposed as Window.console, and can be referenced as simply console.
[https://developer.mozilla.org/en-US/docs/Web/API/console]

name::
* McsEngl.lagJsgn'console-object,
* McsEngl.Jso.console,
* McsEngl.JsAPI'console-object,

example::
console.log('text') //text
console.log('do %s -> %s', 'str1', 'str2') //do str1 -> str2

member::
//Chrome.66
> Object.getOwnPropertyNames(console).sort().join(', ')
"assert, clear, context, count, debug, dir, dirxml, error, group, groupCollapsed, groupEnd, info, log, markTimeline, memory, profile, profileEnd, table, time, timeEnd, timeStamp, timeline, timelineEnd, trace, warn"

lagJsgn'decodeURI-function

description::
The decodeURI() function decodes a Uniform Resource Identifier (URI) previously created by encodeURI or by a similar routine.
Syntax
decodeURI(encodedURI)

[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURI]

name::
* McsEngl.decodeURI-function//Javascript,
* McsEngl.lagJsgn'decodeURI-function,

code.Jsgn::
> decodeURI('https://el.wikipedia.org/wiki/
%CE%91%CE%BB%CE%AD%CE%BA%CE%BF%CF%82_%CE%86%CF%87%CE%BF%CE%BB%CE%BF%CF%82')
< "https://el.wikipedia.org/wiki/Αλέκος_Άχολος"

Resource:

jsAPI.NATIVE.NO

Descripton:
NativeNo-API is an-API with custom-semantic-units, vanilla or not.

name::
* McsEngl.JsAPI.nativeNo,
* McsEngl.lagJsgn'builtinNo-API,
* McsEngl.lagJsgn'nativeNo-API,

jsAPI.VANILLA

Descripton:
Vanilla-API is an-API with only native-semantic-units and custom-semantic-units created in one algorithm (no external libraries).

name::
* McsEngl.JsAPI.vanilla,
* McsEngl.lagJsgn'independent-API,
* McsEngl.lagJsgn'own-API,
* McsEngl.lagJsgn'plain-API,
* McsEngl.lagJsgn'vanilla-API,

jsAPI.VANILLA.NO

Descripton:
VanillaNo-API is an-API which uses external libraries (has dependencies).

name::
* McsEngl.JsAPI.vanillaNo,
* McsEngl.lagJsgn'dependent-API,
* McsEngl.lagJsgn'ownNo-API,
* McsEngl.lagJsgn'vanillaNo-API,

jsAPI.event

Descripton:
Events are DOINGS that trigger|call functions (listeners).

name::
* McsEngl.JsAPI.Event,
* McsEngl.event//Javascript,
* McsEngl.lagJsgn'event-API,

SPECIFIC:
* Jsbr-event,
* Jsnd-event,

jsAPI.promise

description::
"A promise represents an operation that hasn't completed yet."
[2013-12-16] https://web.dev/promises/
===
"A promise has 3 states:
Pending: You don’t know if people will come to your birthday party or not.
Rejected: If promise has been rejected it means people have refused to come to your birthday party.
Resolved: If promise has been resolved it means people are ready to come to your birthday party."
[{2021-11-28 retrieved} https://www.geeksforgeeks.org/sequential-functionality-in-node-js/]
===
"The Promise object represents the eventual completion (or failure) of an asynchronous operation and its resulting value."
[{2021-05-05} https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise]

name::
* McsEngl.JsAPI.promise!⇒Jspromise,
* McsEngl.Jspromise, {2021-05-18},
* McsEngl.promise//Javascript!⇒Jspromise,

Promise-function of Jspromise

description::
The core idea behind promises is that a promise represents the result of an asynchronous operation. A promise is in one of three different states:
pending - The initial state of a promise.
fulfilled - The state of a promise representing a successful operation.
rejected - The state of a promise representing a failed operation.
Once a promise is fulfilled or rejected, it is immutable (i.e. it can never change again).

[https://www.promisejs.org/]

name::
* McsEngl.Jspromise'Promise-function,
* McsEngl.Promise-function//Javascript,
* McsEngl.lagJsgn'Promise-function,

member::
// Jsnd.6-3-1
// Object.getOwnPropertyNames(Promise).sort()
[ 'accept', 'all', 'defer', 'length', 'name', 'prototype', 'race', 'reject', 'resolve' ]
// Object.getOwnPropertyNames(Promise.prototype).sort()
[ 'catch', 'chain', 'constructor', 'then' ]
===
// Chrome.52
// Object.getOwnPropertyNames(Promise).sort()
["all", "length", "name", "prototype", "race", "reject", "resolve"]
// Object.getOwnPropertyNames(Promise.prototype).sort()
[ 'catch', 'constructor', 'then' ]

info-resource of Jspromise

description::
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise,
* https://promisesaplus.com/,
===
{2017-10-31} Brandon-Morelli, JavaScript: Learn Promises, https://codeburst.io/Javascript-learn-promises-f1eaa00c5461,

name::
* McsEngl.Jspromise'resource,

DOING of Jspromise

description::
* completed:
** resolved,
** rejected,
* completedNo,

name::
* McsEngl.Jspromise'doing,

pending of Jspromise

description::
· pending: the-process has-NOT-been-completed.

name::
* McsEngl.Jspromise'pending,

pendingNo of Jspromise

description::
· pendingNo: the-process has-been-completed.

name::
* McsEngl.Jspromise'completedNo,
* McsEngl.Jspromise'pendingNo,
* McsEngl.Jspromise'settled,

fulfiled of Jspromise

description::
· fulfiled: the-process successfully completed.

name::
* McsEngl.Jspromise'fulfiled,
* McsEngl.Jspromise'resolved,

rejected of Jspromise

description::
· rejected: the-process failed.

name::
* McsEngl.Jspromise'failed,
* McsEngl.Jspromise'rejected,

Jsalgo'PHRASE of lagJsgn

description::
· phrases[1] are whole-constructs of semantic-unit NAMES to denote relations of their archetypes that[1] cannot exist autonomously inside the-algorithm.
· examples:
o.member
a[3]
2 + 3
if (b)

name::
* McsEngl.lagJsgn'phrase,
* McsEngl.lagJsgn'semantic-unit-structure,
* McsEngl.lagJsgn-phrase,

whole-chain::
* lagJsgn-sentence,

part::
* lagJsgn-semantic-unit,

Jsalgo'SENTENCE of lagJsgn

description::
· sentences are whole-constructs of semantic-units, lagJsgn-phrases and even other sentences that exists autonomously inside the-algorithm.
· the-document is a-whole-part-tree structure of sentences.

name::
* McsEngl.lagJsgn'sentence,
* McsEngl.lagJsgn'statement,
* McsEngl.lagJsgn-sentence,
* McsEngl.sentence//Javascript,
* McsEngl.statement//Javascript,

whole-chain::
* lagJsgn-program,

part::
* lagJsgn-phrase,
* lagJsgn-semantic-unit,

sentence.SPECIFIC

SPECIFIC.alphabetically:
* assignment-sentence,
* block-sentence,
* break-sentence,
* creation-sentence,
* conditional-sentence,
* continue-sentence,
* control-sentence,
* definition-sentence,
* delete-sentence,
* do-while-sentence,
* for-sentence,
* generic-sentence,
* genericNo-sentence,
* if-sentence,
* Immediately-invoked-function-expression,
* instance-sentence,
* instanceNo-sentence,
* label-sentence,
* loop-sentence,
* return-sentence,
* simple-sentence,
* simpleNo-sentence,
* switch-sentence,
* throw-sentence,
* while-sentence,

SPECIFIC_DIVISION.instance:
* instance-sentence (genericNo): has no specifics,
* instanceNo-sentence (generic),

SPECIFIC_DIVISION.simple:
* simple-sentence: denotes one relation or doing,
* simpleNo-sentence,

sentence.ASSIGNMENT

description::
Assignment-sentence is a-sentence that puts|assigns a-value in a-name-value-pair.
· Jscode:
n = 3;
s = "text";

name::
* McsEngl.lagJsgn'assignment-sentence,
* McsEngl.lagJsgn'assignment-statement,
* McsEngl.lagJsgn-sentence.assignment,

sentence.BLOCK

description::
Block-sentence is a-sentence that contains an-order-set of other sentences.
· Jscode:
{
 sentence1;
 sentence2;
 ...
}

name::
* McsEngl.lagJsgn'block-sentence,
* McsEngl.lagJsgn'block-statement,
* McsEngl.lagJsgn-sentence.block,

sentence.DEFINITION

description::
Definitions are sentences that create instances of semantic-units.
In contrast to natural-languages, machines throw errors if a-sentence uses an undefined semantic-unit!!!

name::
* McsEngl.Jsgndef,
* McsEngl.declaration//Javascript!⇒Jsgndef,
* McsEngl.definition-sentence//Javascript!⇒Jsgndef,
* McsEngl.definition-statement//Javascript!⇒Jsgndef,
* McsEngl.lagJsgn'definition-sentence!⇒Jsgndef,
* McsEngl.lagJsgn'definition-statement!⇒Jsgndef,
* McsEngl.lagJsgn'declaration!⇒Jsgndef,
* McsEngl.lagJsgn'def!⇒Jsgndef,
* McsEngl.lagJsgn'definition-sentence!⇒Jsgndef,
* McsEngl.lagJsgn'definition-statement!⇒Jsgndef,

specific::
* Function-definition,
* Name-value-pair--definition,

Jsgndef.FUNCTION

description::
A-sentence that creates function instance.
· Jscode:
function fName(input-variables) {
 //function body
}

name::
* McsEngl.Jsf'declaration,
* McsEngl.Jsf'definition-sentence,
* McsEngl.lagJsgn'definition.function,

Jsgndef.NAME-VALUE-PAIR

description::
· a-sentence that creates a-semantic-unit with a-reference-name.
· Jscode:
var n;
var n = 3;
const n = 3;
let n = 3;

name::
* McsEngl.lagJsgn'definition.Variable,
* McsEngl.lagJsgn'name-value-pair-definition,
* McsEngl.lagJsgn'variable-declaration,
* McsEngl.lagJsgn'variable-definition-sentence,
* McsEngl.lagJsgn'variable-statement,

generic-chain::
* Definition-sentence,

lagJsgn-def.SPECIFIC

specific::
* const-definition,
* let-definition,
* var-definition,

lagJsgn-def.const

description::
The const declaration creates a read-only reference to a value.
It does not mean the value it holds is immutable, just that the variable identifier cannot be reassigned.
[https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/const]

name::
* McsEngl.lagJsgn'const-definition,
* McsEngl.lagJsgn-def.const,

lagJsgn-def.let

description::
The let statement declares a block scope local variable, optionally initializing it to a value. [https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/let]

name::
* McsEngl.lagJsgn'let-definition,
* McsEngl.lagJsgn-def.let,

lagJsgn-def.var

description::
The scope of a variable declared with var is its current execution context, which is either the enclosing function or, for variables declared outside any function, global. [https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/var]

name::
* McsEngl.lagJsgn'var-definition,
* McsEngl.lagJsgn-def.var,

sentence.LOOP

name::
* McsEngl.Jsloop,
* McsEngl.lagJsgn'loop-sentence!⇒Jsloop,
* McsEngl.lagJsgn-sentence.loop!⇒Jsloop,
* McsEngl.loop-sentence//Javascript!⇒Jsloop,

addressWpg::
* {2017-10-31} Anton-Lavrenov, JavaScript loops — how to handle async/await, https://blog.lavrton.com/Javascript-loops-how-to-handle-async-await-6252dd3c795,

Jsloop.SPECIFIC

description::
* array.forEach,
* for,
* for..in,
* for..of,
* while,
* do..while,

name::
* McsEngl.Jsloop.specific,

Jsloop.for

description::
for (let n=0; n<9; n++) {
 //do something
}

name::
* McsEngl.Jsloop.for,

Jsloop.for..in-object

description::
const object = { a: 1, b: 2, c: 3 };
for (const property in object) {
 console.log(`${property}: ${object[property]}`);
}

name::
* McsEngl.Jsloop.for..in-object,

Jsloop.for..of

description::
const iterable = [10, 20, 30];
for (let value of iterable) {
 //do something
}

name::
* McsEngl.Jsloop.for..of-array,

Jsloop.while

description::
while (true) {
 //do something
}

name::
* McsEngl.Jsloop.while,

Jsloop.do..while

description::
do {
 //do something
} while (true)

name::
* McsEngl.Jsloop.do..while,

sentence.THROW

description::
The throw statement allows to throw an exception programmatically.
It expects an arbitrary value after the throw keyword, but Error objects and their subtypes are most useful.
[https://molily.de/robust-Javascript/#programmatic-exceptions]

name::
* McsEngl.lagJsgn'throw-sentence,
* McsEngl.lagJsgn-sentence.throw,

Jsalgo'SECTION of lagJsgn

description::
lagJsgn-section is a-whole-construct of lagJsgn-sentences.

name::
* McsEngl.lagJsgn'section,
* McsEngl.section-of-Javascript,

Jsalgo'ROOT of lagJsgn

description::
Algo-root-tree is the OUTERMOST TREE of an-algorithm, in a-webpage.

name::
* McsEngl.Jsalgo'root-tree,

part::
* the-root-node,
* the-children of the-root-node,

Jsalgo.SPECIFIC of lagJsgn

description::
With the-language programers create many algorithms.
The-quantity depends on the-archetypes known, and the-semantic-units of the-language.

name::
* McsEngl.Jsalgo.specific,

specific::
* Jsbr-algorithm,
* Jsnd-algorithm,
===
* Animation,
* Browser-managing,
* Codomain,
* Event-managing,
* HML-managing,
* Library,
* Math-managing,
* Number-managing,
* Package-managing,
* Program,
* Time-managing,

Jsalgo.ANIMATION

name::
* McsEngl.Animation-Javascript-algorithm,
* McsEngl.Jsalgo.animation,

specific::
* http://animejs.com/,
* fractals: http://slicker.me/fractals/animate.htm,

Jsalgo.ARRAY-MANAGING

description::
· algorithms managing arrays.

name::
* McsEngl.Array-managing//Javascript!⇒Jsaalgo,
* McsEngl.lagJsgn'array-managing!⇒Jsaalgo,
* McsEngl.Jsaalgo,
* McsEngl.Jsalgo.array-managing!⇒Jsaalgo,

specific::
* Array-of-array-primitives.remove-duplicates,
* Array-of-array.sort,

Jsaalgo.Array-of-array.INCLUDES

Code::
//returns the-index of array-part or -1
function fArray_includes_array(aWhole, aPart){
 var nI, nJ, aCurrent;
 for(nI = 0; nI < aWhole.length; ++nI){
   if(aPart.length === aWhole[nI].length){
     aCurrent = aWhole[nI];
     for(nJ = 0; nJ < aPart.length && aPart[nJ] === aCurrent[nJ]; ++nJ);
     if(nJ === aPart.length)
       return nI;
   }
 }
 return -1;
}

[https://stackoverflow.com/a/19543566]

name::
* McsEngl.Array-of-array.includes//Javascript,
* McsEngl.lagJsgn'array-of-array.includes,
* McsEngl.Jsaalgo.array-of-array.includes,

Jsaalgo.Array-of-array-primities.Remove-duplicates

Code::
function fArrayRemoveDupl(aIn) {
 //aIn = [[1,2],[3,4],[1,2],[1,3]]
 //aOut = [[1,2],[3,4],[1,3]]
 var
   aHelp = [],
   aOut = [],
   sElt;

 for(var n = 0; n < aIn.length; n++) {
   sElt = aIn[n].join('|');
   if(!aHelp.includes(sElt)) {
     aHelp.push(sElt);
     aOut.push(aIn[n]);
   }
 }
 return aOut;
}

name::
* McsEngl.Array-of-array-primitives.remove-duplicates//Javascript,
* McsEngl.lagJsgn'array-of-array-primitives.remove-duplicates,
* McsEngl.Jsaalgo.array-of-array-primitives.remove-duplicates,

Jsaalgo.Array-of-array.Sort

Code::
//a = [[1,2],[3,4],[2,2],[1,3]]
//sort on first element: [[1,2],[1,3],[2,2],[3,4]]
a.sort(fCompare1);
function fCompare1(aA, aB) {
 return aA[0] > aB[0] ? 1 : -1;
}
or
a.sort( (aA, aB) => {
 return aA[0] > aB[0] ? 1 : -1
})
===
//sort on second element: [[1,2],[2,2],[1,3],[3,4]]
a.sort(fCompare2);
function fCompare2(aA, aB) {
 return aA[1] > aB[1] ? 1 : -1;
}

name::
* McsEngl.Array-of-array.sort//Javascript,
* McsEngl.lagJsgn'array-of-array.sort//Javascript,
* McsEngl.Jsaalgo.array-of-array.sort//Javascript,

Jsalgo.BOOLEAN

description::
Boolean('string') //true
Boolean(123) //true
Boolean(false) //false
Boolean(undefined) //false
Boolean(null) //false
Boolean(NaN) //false
Boolean(0) //false
Boolean('') //false
!!'string' //true
!!123 //true
!!false //false
!false //true
'' == false //true
'' == true //false
'A' > 'a' //false 65>97

name::
* McsEngl.Jsalgo.boolean,
* McsEngl.boolean-Jsalgo,

Jsalgo.CHARACTER

description::
· character-management algos.

name::
* McsEngl.character-algo//Javascript,
* McsEngl.charCodeAt()//String//Javascript,
* McsEngl.codePointAt()//String//Javascript,
* McsEngl.fromCodePoint()//String//Javascript,
* McsEngl.lagJsgn'character-algo,
* McsEngl.Jsalgo.character,

example::
//surrogates of a-char above U+FFFF|65535
"𝌆".charCodeAt(0).toString(16); //"d834"
"𝌆".charCodeAt(1).toString(16); //"df06"
"𝌆".charCodeAt(0) //'55348'
"𝌆".charCodeAt(1) //'57094'
String.fromCodePoint(0xd834,0xdf06) //"𝌆"
String.fromCharCode(0xd834,0xdf06) //"𝌆"
String.fromCodePoint(55348,57094) //"𝌆"
String.fromCharCode(55348,57094) //"𝌆"
String.fromCodePoint(119558) //"𝌆"
String.fromCodePoint(0x1d306) //"𝌆"
===
"𝌆".codePointAt() //119558
"𝌆".codePointAt().toString(16) //'1d306'
===
'\ud834\udf06}' //"𝌆"
'\u{1d306}' //"𝌆"
===
(119558).toString(16) //"1d306"
parseInt("ffff", 16) //65535

Jsalgo.CHARTING

name::
* McsEngl.Jsalgo.charting,
* McsEngl.lagJsgn'charting,

specific::
* Taucharts: https://www.taucharts.com/,

Jsalgo.CODOMAIN

description::
An-algorithm is an-INSTANCE of communication.
The-set of all algorithms is the-codomain of the-language.

name::
* McsEngl.lagJsgn'codomain,
* McsEngl.lagJsgn'domainOut,

Jsalgo.DATE-MANAGING

description::
Date related algorithms.

name::
* McsEngl.lagJsgn'date-managing,
* McsEngl.Jsalgo.date-managing,

addressWpg::
* https://Javascript.info/date,

SPECIFIC::
* Format-date-to-YYY-MM-DD,

Jsalgo.date.YYYY-MM-DD

Jsalgo.Jsgn:::
function fDateYMD() {
 var
   oD, sY, sM, sD;
 oD = new Date();
 sY = oD.getFullYear().toString();
 sM = (oD.getMonth() + 1).toString();
 if (sM.length === 1) {
   sM = "0" + sM;
 }
 sD = oD.getDate().toString();
 if (sD.length === 1) {
   sD = "0" + sD;
 }
 return sY + "-" + sM + "-" + sD;
}

name::
* McsEngl.lagJsgn'date.YYYY-MM-DD,
* McsEngl.Jsalgo.date.YYYY-MM-DD,

Jsalgo.DIALOG

name::
* McsEngl.lagJsgn'dialog,
* McsEngl.Jsalgo.dialog,

specific::
* rmodal.js: 1.2 KB modal dialog box, with no dependencies,

Jsalgo.KEYSTROKE-MANAGING

description::
·

name::
* McsEngl.Jsalgo.keystroke-managing,
* McsEngl.Jsalgo.shortcut-managing,

addressWpg::
* {2019-01-28} Vojislav-Grujić, https://javascript.plainenglish.io/how-to-detect-a-sequence-of-keystrokes-in-javascript-83ec6ffd8e93,

Jsalgo.MATH-MANAGING

description::
Math, number managing related algorithms.

name::
* McsEngl.lagJsgn'math-managing,
* McsEngl.Jsalgo.math-managing,
* McsEngl.math-managing//Javascript,

specific::
* A 218b spreadsheet app in HTML/JS: http://xem.github.io/sheet/,

Jsalgo.NUMBER

description::

Number.isInteger(123) //true
Number.isInteger('123') //false
Number('000123') //123
Number.isInteger(Number('123')) //true

(12).toString().padStart(6, "0") //'000012'
(12).toString().length //2

name::
* McsEngl.Jsalgo.number,
* McsEngl.number-managing//Javascript,

Jsalgo.HEX-TO-INT

example::
//hexadecimal to decimal
parseInt("ffff", 16) //65535

name::
* McsEngl.hex-to-int//Javascript,
* McsEngl.hexadecimal-to-decimal//Javascript,
* McsEngl.lagJsgn'hexadecimal-to-decimal,
* McsEngl.lagJsgn'hex-to-int,
* McsEngl.Jsalgo.hex-to-int,

Jsalgo.INT-TO-HEX

example::
//decimal to hexadecimal
(65535).toString(16) //ffff
//or if number is string
Number('65535').toString(16) //ffff

name::
* McsEngl.decimal-to-hexadecimal//Javascript,
* McsEngl.int-to-hex//Javascript,
* McsEngl.lagJsgn'decimal-to-hexadecimal,
* McsEngl.lagJsgn'int-to-hex,
* McsEngl.Jsalgo.int-to-hex,

Jsalgo.OBJECT-MANAGING

description::
Doings with objects.

name::
* McsEngl.lagJsgn'object-managing,
* McsEngl.Jsalgo.object-managing,

SPECIFIC::
* equality,
* find-key-by-value,
* member-counting,
* member-deleting,
* member-existance,
* member-sorting,

Jsalgo.object.EQUALITY

Jsalgo.Jsgn:::
[1,3] === [1,3] //false
a = [1,3]
b = [1,3]
a === b //false
c = a
a === c //true
a == c //true

name::
* McsEngl.lagJsgn'object-equality,
* McsEngl.Jsalgo.object-equality,

Jsalgo.object.FIND-KEY-BY-VALUE

Jsalgo.Jsgn:::
//input: object, value
//output: key of value
function fObjvalRKey(oIn, valIn) {
 return Object.keys(oIn).find(
   function(key){
     return oIn[key] === valIn
   }
 );
}

name::
* McsEngl.lagJsgn'object-find-key-by-value,
* McsEngl.Jsalgo.object-find-key-by-value,

Jsalgo.object.MEMBER-COUNTING

Jsalgo.Jsgn:::
Object.keys(o).length

name::
* McsEngl.lagJsgn'object-member-counting,
* McsEngl.Jsalgo.object-member-counting,

Jsalgo.object.MEMBER-DELETING

Jsalgo.Jsgn:::
var o = {a:1, b:2};
var mbr = 'a';
delete o[mbr];
delete o['a'];
delete o.a

name::
* McsEngl.lagJsgn'object-key-deleting,
* McsEngl.lagJsgn'object-member-deleting,
* McsEngl.Jsalgo.object-member-deleting,

Jsalgo.object.MEMBER-EXISTANCE

Jsalgo.Jsgn:::
var o = {a:1, b:2};
'a' in o //true, search IN ITS GENERIC-CHAIN
o.hasOwnProperty('a') //true, search NOT in generic-chain

name::
* McsEngl.lagJsgn'object-key-existance,
* McsEngl.lagJsgn'object-member-existance,
* McsEngl.Jsalgo.object-member-existance,

Jsalgo.object.MEMBER-SORTING

Jsalgo.Jsgn:::
All methods that iterate over property keys do so in the same order:
- First all Array indices, sorted numerically.
- Then all string keys (that are not indices), in the order in which they were created.
- Then all symbols, in the order in which they were created.
So yes, JavaScript objects are in fact ordered, and the order of their keys/properties can be changed.

Here’s how you can sort an object by its keys/properties, alphabetically:

const unordered = {
 'b': 'foo',
 'c': 'bar',
 'a': 'baz'
};

console.log(JSON.stringify(unordered));
// → '{"b":"foo","c":"bar","a":"baz"}'

const ordered = {};
Object.keys(unordered).sort().forEach(function(key) {
 ordered[key] = unordered[key];
});

console.log(JSON.stringify(ordered));
// → '{"a":"baz","b":"foo","c":"bar"}'

Use var instead of const for compatibility with ES5 engines.
[https://stackoverflow.com/a/31102605]

name::
* McsEngl.lagJsgn'object-member-sorting,
* McsEngl.Jsalgo.object-member-sorting,

Jsalgo.LIBRARY of lagJsgn

description::
Algo-library is an-algorithm which can-not-RUN autonomously, but inside another algo.
In other words, a-library HAS-NO an-executing-entry-point, like a-program.
A-library is a-container of NEW semantic-units and so has an-API.

name::
* McsEngl.lagJsgn-source-doc.library!⇒lagJsgn-library,
* McsEngl.lagJsgn'library!⇒lagJsgn-library,
* McsEngl.lagJsgn'framework!⇒lagJsgn-library,
* McsEngl.lagJsgn'plugin!⇒lagJsgn-library,
* McsEngl.lagJsgn'lbr!⇒lagJsgn-library,
* McsEngl.lagJsgn-library,
* McsEngl.library-of-Javascript-code!⇒lagJsgn-library,

whole-chain::
* lagJsgn-program,

part::
* lagJsgn-sentence,

installing lagJsgn-library

description::
In Jsbr you use the-hml-element script.
In Jsnd with require() because a-library is a-module.

name::
* McsEngl.lagJsgn'lbr'adding,
* McsEngl.lagJsgn'lbr'installing,

library.SPECIFIC

specific::
* Jsbr-library,
* Jsnd-library,
===
* vanilla-library,
* vanillaNo-library,

library.VANILLA

description::
Vanilla-library is a-library that uses ONLY native-API.

name::
* McsEngl.lagJsgn'vanilla-library,
* McsEngl.lagJsgn-library.vanilla,
* McsEngl.Vanilla-library,

library.CRYPTO

name::
* McsEngl.lagJsgn-library.crypto,

specific::
* Signal-protocol: https://github.com/signalapp/libsignal-protocol-Javascript,

Jsalgo.PROGRAM of lagJsgn

description::
lagJsgn-program is an-algorithm which can-RUN autonomously, written in code-format.
In other words, a-program HAS an-executing-entry-point.
A-program is a-container of NEW semantic-units and so has an-API.

name::
* McsEngl.lagJsgn-source-doc.program!⇒Jsgnpgm,
* McsEngl.lagJsgn'program!⇒Jsgnpgm,
* McsEngl.Jsgnpgm,
* McsEngl.program-of--Javascript-code!⇒Jsgnpgm,

part::
* lagJsgn-library,
* lagJsgn-sentence,

pgm'Execution

description::
lagJsgn-program-execution is the-process of commanding it to work.
Jsbr and Jsnd programs are-executed very differently.
An-Jsbr-program is just opened on the-browser.
An-Jsnd-program is executing on command-line: node file-of-pgm

name::
* McsEngl.Jsgnpgm'call,
* McsEngl.Jsgnpgm'execution,
* McsEngl.Jsgnpgm'invocation,
* McsEngl.Jsgnpgm'open,
* McsEngl.Jsgnpgm'run,

pgm.SPECIFIC

specific::
* Jsbr-program,
* Jsnd-program,

Jsalgo.PACKAGE of lagJsgn

description::
lagJsgn-package is a-library or a-program PLUS metadata describing the-code.

name::
* McsEngl.lagJsgn'package!⇒lagJsgn-pkg,
* McsEngl.lagJsgn-source-doc.package!⇒lagJsgn-pkg,
* McsEngl.lagJsgn-package!⇒lagJsgn-pkg,
* McsEngl.lagJsgn-pkg, {2019-03-16},
* McsEngl.package-of--Javascript-code,

package-dependency::
Package-dependency is any other external package IMPORTED into current package.

Package-manager:
(linkL)

specific::
* Jsbr-package,
* Jsnd-ljspackage,
===
* bower-package,
* npm-package,

evaluation of lagJsgn

name::
* McsEngl.lagJsgn'evaluation,

lagJsgn'benefit

lagJsgn'simplicity

Its code is-created FROM only 12 semantic-units.

lagJsgn'inheritance

Javascript-objects do-not-inherit members from other special constructs like 'classes' (like java), but just from other objects.
This simple and powerful characteristic, called 'prototype-based-inheritance' confused programers who knew 'class-based-inheritance'.
Another cause of this confusion is the incorrect use of 'instanceof' by the-language designers.
Also constructor-functions mimic classes, especially with the-new-operator.
I have-created a full desktop browser program, which does-NOT-use a-single custom-constructor!!!
ECMAScript.6.2015 decision to add and classes, is wrong, because it creates an EXTRA semantic-unit, the-class, to implement inheritance[1] which[1] is already implemented with the-prototype-system.
Node.js implementation of 'classes' is-done by creating special functions.

name::
* McsEngl.inheritance//Javascript,
* McsEngl.lagJsgn'inheritance,

addressWpg::
* {2015-04-17} Eric Elliott: https://medium.com/Javascript-scene/common-misconceptions-about-inheritance-in-Javascript,

lagJsgn'problem

lagJsgn'naming-mechanism

Today builtin identifiers do-not-convey information about their values.
Since {2014.08.05}, I am-using valuenames in my code, which makes the-code much more readable.
Also this way we can-have type checking at write-time.

lagJsgn'instanceof

description::
'Instance' is a-specific-concept with no more specifics.
'My-car' is an-instance of 'car'.
lagJsgn-objects-created-from-constructors ARE NOT INSTANCES of their constructor.
They are instances of the-Constructor.prototype-object.
THEN the-instanceof operator is a design name-mistake of Javascript.
The-confusion came from class-based-languages where the-objects are indeed instances of classes.
objectof is a better name.
Brendan-Eich-tweet

[https://twitter.com/BrendanEich/status/734118379036934144]

name::
* McsEngl.Jsgnopr.instanceof,
* McsEngl.lagJsgn'instanceof,
* McsEngl.instanceof//Javascript,

lagJsgn'object-scope

description::
Today, Jsgn, has only 'function-scope'.
This means, that a-name-value-pair defined inside a-function, can be used all over inside this function.
In other names, the-members of a-function see each other.
We do-not-have this feature inside objects, and to overcome it, we use constructors, or object-returning-functions.
· code-example:
var o = {n1:1, n2:n1} //throws Uncaught ReferenceError
var f=function(){var n1=1; var n2=n1;} //no Error

name::
* McsEngl.Jso'scope,

lagJsgn'todo

In my opinion lagJsgn needs:
1) Valuenames.
2) Object-scope.
3) No constructors.
Objects could-be-created by 1) functions like Object.create(), 2) functions returning objects (factories), and 3) literal-objects.
The-generic-chain to be: object > objectSpc > objectSpc > ...
And NOT: Object.prototype > Constructor.prototype > Constructor.prototype ...

human of lagJsgn

description::
Any human related to the-language.

name::
* McsEngl.lagJsgn'human!⇒Jsgnhmn,
* McsEngl.Jsgnhmn,
* McsEngl.lagJsgn-human!⇒Jsgnhmn,

human.creator

description::
Creator is any human who contributed in the-creation of the-language.

name::
* McsEngl.lagJsgn'creator,
* McsEngl.Jsgnhmn.creator,

specific::
* Designer: the-human who created the-spec of the-language,
* Implementor: the-human who created the-code to binary-code translator,

human.programer

description::
Programer is a-human who creates programs.

name::
* McsEngl.lagJsgn'programer,
* McsEngl.Jsgnprogramer,

human.user

description::
User is a-human who uses|runs a-program.

name::
* McsEngl.lagJsgn'user,
* McsEngl.Jsgnuser,

language-that-complile-to-Javascript of lagJsgn

description::
Jeremy-Ashkenas, creator of CoffeeScript, maintains a big list with languages that compile to Javascript at:
https://github.com/jashkenas/coffeescript/wiki/List-of-languages-that-compile-to-JS.

learning of lagJsgn

description::
My goal to write this page, is to help the-learning of the-language from a-linguistic perspective.

My second innovation is the-representation of the-subject.
I am-not-writing down a-bla-bla-text describing the-subject, repeating characteristics here and there.
I am-writing STRUCTURED-CONCEPTS|ModelConceptStructureds in ONE format.
You can-read the-concept of Javascript sequentially OR you can-search for a-characteristic and from there to reach any related concept.

name::
* McsEngl.lagJsgn'learning,
* McsEngl.lagJsgn'Infrsc,

addressWpg::
* {2017-11-21} How JavaScript works: A comparison with WebAssembly + why in certain cases it’s better to use it over JavaScript: https://blog.sessionstack.com/,
* {2017-08-10} How JavaScript works: an overview of the engine, the runtime, and the call stack: https://blog.sessionstack.com/,
* {2017-06-27} Matt-Banz, An introduction to functional programming in JavaScript, https://opensource.com/article/17/6/functional-javascript,
* https://developer.mozilla.org/en-US/Learn/JavaScript,
* https://www.codementor.io/learn-Javascript-online,
=== Book:
* Robust Client-Side JavaScript: A Developer’s Guide: https://molily.de/robust-Javascript/,

specific::
* learning-browser-Javascript,
* learning-Node-Javascript,

specification of lagJsgn

description::
· specification is a-text-document that describes|defines a-language.
[HmnSgm.2018-01-06]
===
There is no single technical specification that defines JavaScript, but a whole bunch of specifications.
[https://molily.de/robust-Javascript/#Javascript-standards]

name::
* McsEngl.lagJsgn'specification!⇒lagJsgn-spec,
* McsEngl.lagJsgn-spec, {2019-03-16},
* McsEngl.specification-of-Javascript!⇒lagJsgn-spec,

spec.SPECIFIC

specific::
* browser-Javascript-specification,
===
* ECMA-specification,

spec.ECMA-International (Jses)

description::
ECMA-International creates the-specs for lagJsgn.
ECMA-International creates many standards.
ECMA-262 is the-standard that defines the-ECMAScript-language, as it calls the-Jsgn.
Specs are-published in pdf or HML format and are texts hard to read and multisemantic.
In current webpage-concept I TRY to describe the-language in monosemantic English by defining most of the-names of my sentences.

name::
* McsEngl.ECMAScript!⇒Jses,
* McsEngl.lagJses!⇒Jses,
* McsEngl.Lje-(ECMAScript)!⇒Jses,
* McsEngl.Jses,
* McsEngl.Jses!=ECMAScript,
* McsEngl.lagJsgn'spec.ECMAScript!⇒Jses,

addressWpg::
* http://www.ecma-international.org/publications/standards/Ecma-262.htm,
* last-standard: http://www.ecma-international.org/ecma-262/index.html,
* draft: https://tc39.github.io/ecma262/,
* issues: https://github.com/tc39/ecma262/issues,

Jses.SPECIFIC

Specific (versions):
· https://www.ecma-international.org/publications-and-standards/standards/ecma-262/
* ECMAScript.11.2020, (ES11)
* ECMAScript.10.2019, (ES10)
* ECMAScript.9.2018, (ES9)
* ECMAScript.8.2017 (ES8),
* ECMAScript.7.2016 (ES7),
* ECMAScript.6.2015 (ES6),
* ECMAScript.5-1.2011 (ES51),
* ECMAScript.5.1999 (ES5),
* ECMAScript.4 not existing (ES4),
* ECMAScript.3.1999 (ES3),
* ECMAScript.2.1998 (ES2),
* ECMAScript.1.1997 (ES1),

Jses.ECMAScript.11.2020

description::
· https://262.ecma-international.org/11.0/
· https://github.com/tc39/ecma262,
"This specification, the 11th edition, introduces the matchAll method for Strings, to produce an iterator for all match objects generated by a global regular expression; import(), a syntax to asynchronously import Modules with a dynamic specifier; BigInt, a new number primitive for working with arbitrary precision integers; Promise.allSettled, a new Promise combinator that does not short-circuit; globalThis, a universal way to access the global this value; dedicated export * as ns from 'module' syntax for use within modules; increased standardization of for-in enumeration order; import.meta, a host-populated object available in Modules that may contain contextual information about the Module; as well as adding two new syntax features to improve working with “nullish” values (null or undefined): nullish coalescing, a value selection operator; and optional chaining, a property access and function invocation operator that short-circuits if the value to access/invoke is nullish."
[https://262.ecma-international.org/11.0/]

name::
* McsEngl.ECMAScript.11.2020!⇒ES2020,
* McsEngl.ES2020,
* McsEngl.ES2020-ES11!⇒ES2020,
* McsEngl.ES11!⇒ES2020,
* McsEngl.Jses.ECMAScript.11.2020!⇒ES2020,

Jses.ECMAScript.10.2019

description::
· https://262.ecma-international.org/10.0/
"ECMAScript 2019 introduced a few new built-in functions: flat and flatMap on Array.prototype for flattening arrays, Object.fromEntries for directly turning the return value of Object.entries into a new Object, and trimStart and trimEnd on String.prototype as better-named alternatives to the widely implemented but non-standard String.prototype.trimLeft and trimRight built-ins. In addition, it included a few minor updates to syntax and semantics. Updated syntax included optional catch binding parameters and allowing U+2028 (LINE SEPARATOR) and U+2029 (PARAGRAPH SEPARATOR) in string literals to align with JSON. Other updates included requiring that Array.prototype.sort be a stable sort, requiring that JSON.stringify return well-formed UTF-8 regardless of input, and clarifying Function.prototype.toString by requiring that it either return the corresponding original source text or a standard placeholder."
[https://262.ecma-international.org/11.0/]

name::
* McsEngl.ECMAScript.10.2019!⇒ES2019,
* McsEngl.ES2019,
* McsEngl.ES2019-ES10!⇒ES2019,
* McsEngl.ES10!⇒ES2019,
* McsEngl.Jses.ECMAScript.10.2019!⇒ES2019,

Jses.ECMAScript.9.2018

description::
· https://262.ecma-international.org/9.0/
"ECMAScript 2018 introduced support for asynchronous iteration via the AsyncIterator protocol and async generators. It also included four new regular expression features: the dotAll flag, named capture groups, Unicode property escapes, and look-behind assertions. Lastly it included object rest and spread properties."
[https://262.ecma-international.org/11.0/]

name::
* McsEngl.ECMAScript.9.2018!⇒ES2018,
* McsEngl.ES2018,
* McsEngl.ES2018-ES9!⇒ES2018,
* McsEngl.ES9!⇒ES2018,
* McsEngl.Jses.ECMAScript.9.2018!⇒ES2018,

Jses.ECMAScript.8.2017

description::
· https://262.ecma-international.org/8.0/
Pdf-version.
HML-version.
""
[https://262.ecma-international.org/11.0/]

name::
* McsEngl.ECMAScript.8.2017!⇒Jses2017,
* McsEngl.ECMA-262-8th-edition!⇒Jses2017,
* McsEngl.ES2017-ES8!⇒Jses2017,
* McsEngl.ES.8.2017!⇒Jses2017,
* McsEngl.ES8-(ES.2017)!⇒Jses2017,
* McsEngl.Jses.8.2017!⇒Jses2017,
* McsEngl.Jses2017,
* McsEngl.Jses2017!=ECMA.262.8-edition,
* McsEngl.Standard.ECMA.262.8-edition!⇒Jses2017,

addressWpg::
* {2018-01-17} Justin-Michot, ES8 What’s New in JavaScript?, https://medium.com/@jsmichot/,

new-attributes::
* async-functions,
* string-padding (padStart, padEnd),
* Object.values(obj) & Object.entries(obj),
* object-descriptors,
* SharedArrayBuffer-object,

Jses.ECMAScript.7.2016

description::
· https://262.ecma-international.org/7.0/,
Pdf-version.
HML-version.
"ECMAScript 2016 was the first ECMAScript edition released under Ecma TC39's new yearly release cadence and open development process. A plain-text source document was built from the ECMAScript 2015 source document to serve as the base for further development entirely on GitHub. Over the year of this standard's development, hundreds of pull requests and issues were filed representing thousands of bug fixes, editorial fixes and other improvements. Additionally, numerous software tools were developed to aid in this effort including Ecmarkup, Ecmarkdown, and Grammarkdown. ES2016 also included support for a new exponentiation operator and adds a new method to Array.prototype called includes."
[https://262.ecma-international.org/11.0/]

name::
* McsEngl.ECMAScript.7.2016!⇒Jses2016,
* McsEngl.ECMA-262-7th-edition!⇒Jses2016,
* McsEngl.ES2016-ES7!⇒Jses2016,
* McsEngl.ES7!⇒Jses2016,
* McsEngl.ES.7.2016!⇒Jses2016,
* McsEngl.Jses.7.2016!⇒Jses2016,
* McsEngl.Jses2016,
* McsEngl.Jses2016!=ECMA.262.7-edition,
* McsEngl.Standard.ECMA.262.7-edition!⇒Jses2016,

Jses.ECMAScript.6.2015

description::
· https://262.ecma-international.org/6.0/
* Pdf-version.
* HML-version.
· introduced: modules, classes.
===
"Focused development of the sixth edition started in 2009, as the fifth edition was being prepared for publication. However, this was preceded by significant experimentation and language enhancement design efforts dating to the publication of the third edition in 1999. In a very real sense, the completion of the sixth edition is the culmination of a fifteen year effort. The goals for this edition included providing better support for large applications, library creation, and for use of ECMAScript as a compilation target for other languages. Some of its major enhancements included modules, class declarations, lexical block scoping, iterators and generators, promises for asynchronous programming, destructuring patterns, and proper tail calls. The ECMAScript library of built-ins was expanded to support additional data abstractions including maps, sets, and arrays of binary numeric values as well as additional support for Unicode supplemental characters in strings and regular expressions. The built-ins were also made extensible via subclassing. The sixth edition provides the foundation for regular, incremental language and library enhancements. The sixth edition was adopted by the General Assembly of June 2015."
[https://262.ecma-international.org/11.0/]

name::
* McsEngl.ECMAScript.6.2015!⇒Jses2015,
* McsEngl.ECMA-262-6th-edition!⇒Jses2015,
* McsEngl.ES2015-ES6!⇒Jses2015,
* McsEngl.ES6-(ES2015)!⇒Jses2015,
* McsEngl.ES.6.2015!⇒Jses2015,
* McsEngl.Jses.6.2015!⇒Jses2015,
* McsEngl.Jses2015,
* McsEngl.Jses2015!=ECMA.262.6-edition,
* McsEngl.standard.ECMA.262.6-edition!⇒Jses2015,

Compatibility:
* compatibility-table, Created by kangax,
* node.green, Node.js compatibility-table, Created by William-Kapke,

Jses.ECMAScript.5-1.2011

description::
· https://262.ecma-international.org/5.1/
My html5.id.toc.preview-version.
Pdf-version.
HML-version.
"The fifth edition was submitted to ISO/IEC JTC 1 for adoption under the fast-track procedure, and approved as international standard ISO/IEC 16262:2011. Edition 5.1 of the ECMAScript Standard incorporated minor corrections and is the same text as ISO/IEC 16262:2011. The 5.1 Edition was adopted by the Ecma General Assembly of June 2011."
[https://262.ecma-international.org/11.0/]

name::
* McsEngl.ECMAScript.5-1.2011!⇒Jses2011,
* McsEngl.ECMAScript-5.1!⇒Jses2011,
* McsEngl.ECMA-262-5.1-edition!⇒Jses2011,
* McsEngl.ES2011-ES5.1!⇒Jses2011,
* McsEngl.ES5.1!⇒Jses2011,
* McsEngl.ES.5-1.2011!⇒Jses2011,
* McsEngl.Jses.5-1.2011!⇒Jses2011,
* McsEngl.Jses2011,
* McsEngl.Jses!=ECMA.262.51-edition,
* McsEngl.standard.ECMA.262.51-edition!⇒Jses2011,

Jses.ECMAScript.5.1999b

description::
* ECMAScript.5.1999,
"After publication of the third edition, ECMAScript achieved massive adoption in conjunction with the World Wide Web where it has become the programming language that is supported by essentially all web browsers. Significant work was done to develop a fourth edition of ECMAScript. However, that work was not completed and not published as the fourth edition of ECMAScript but some of it was incorporated into the development of the sixth edition.
The fifth edition of ECMAScript (published as ECMA-262 5th edition) codified de facto interpretations of the language specification that have become common among browser implementations and added support for new features that had emerged since the publication of the third edition. Such features include accessor properties, reflective creation and inspection of objects, program control of property attributes, additional array manipulation functions, support for the JSON object encoding format, and a strict mode that provides enhanced error checking and program security. The fifth edition was adopted by the Ecma General Assembly of December 2009."
[https://262.ecma-international.org/11.0/]

name::
* McsEngl.ECMAScript.5.1999b!⇒ES1999b,
* McsEngl.ES1999b,
* McsEngl.ES1999b-ES5!⇒ES1999b,
* McsEngl.ES5!⇒ES1999b,
* McsEngl.Jses.ECMAScript.5.1999b!⇒ES1999b,

Jses.ECMAScript.3.1999

description::
* ECMAScript.3.1999 (ES3),
"The third edition of the Standard introduced powerful regular expressions, better string handling, new control statements, try/catch exception handling, tighter definition of errors, formatting for numeric output and minor changes in anticipation of future language growth. The third edition of the ECMAScript standard was adopted by the Ecma General Assembly of December 1999 and published as ISO/IEC 16262:2002 in June 2002."
[https://262.ecma-international.org/11.0/]

name::
* McsEngl.ECMAScript.3.1999!⇒ES1999,
* McsEngl.ES1999,
* McsEngl.ES1999-ES3!⇒ES1999,
* McsEngl.ES3!⇒ES1999,
* McsEngl.Jses.ECMAScript.3.1999!⇒ES1999,

Jses.ECMAScript.2.1998

description::
* ECMAScript.2.1998 (ES2),

name::
* McsEngl.ECMAScript.2.1998!⇒ES1998,
* McsEngl.ES1998,
* McsEngl.ES1998-ES2!⇒ES1998,
* McsEngl.ES2!⇒ES1998,
* McsEngl.Jses.ECMAScript.2.1998!⇒ES1998,

Jses.ECMAScript.1.1997

description::
* ECMAScript.1.1997,

name::
* McsEngl.ECMAScript.1.1997!⇒ES1997,
* McsEngl.ES1997,
* McsEngl.ES1997-ES1!⇒ES1997,
* McsEngl.ES1!⇒ES1997,
* McsEngl.Jses.ECMAScript.1.1997!⇒ES1997,

tool of lagJsgn

description::
Any program, used to work with the-language, write, execute, debug, analyze, test the-code.
===
Development tools
Within JavaScript, access to a debugger becomes invaluable when developing large, non-trivial programs. Because there can be implementation differences between the various browsers (particularly within the DOM]), it is useful to have access to a debugger for each of the browsers that a Web application targets.

Script debuggers are integrated within Internet Explorer, Firefox, Safari, Google Chrome, Opera and Node.js.

In addition to the native Internet Explorer Developer Tools, three debuggers are available for Internet Explorer: Microsoft Visual Studio is the richest of the three, closely followed by Microsoft Script Editor (a component of Microsoft Office), and finally the free Microsoft Script Debugger that is far more basic than the other two. The free Microsoft Visual Web Developer Express provides a limited version of the JavaScript debugging functionality in Microsoft Visual Studio. Internet Explorer has included developer tools since version 8.

In comparison to Internet Explorer, Firefox has a more comprehensive set of developer tools, which include a debugger as well. Old versions of Firefox without these tools used a Firefox addon called Firebug, or the older Venkman debugger. Also, WebKit's Web Inspector includes a JavaScript debugger, which is used in Safari. A modified version called Blink DevTools is used in Google Chrome. Node.js has Node Inspector, an interactive debugger that integrates with the Blink DevTools, available in Google Chrome. Last but not least, Opera includes a set of tools called Dragonfly.

In addition to the native computer software, there are online JavaScript IDEs, debugging aids are themselves written in JavaScript and built to run on the Web. An example is the program JSLint, developed by Douglas Crockford who has written extensively on the language. JSLint scans JavaScript code for conformance to a set of standards and guidelines. Many libraries for JavaScript, such as three.js, provide links to demonstration code that can be edited by users. They are also used as a pedagogical tool by institutions such as Khan Academy to allow students to experience writing code in an environment where they can see the output of their programs, without needing any setup beyond a Web browser.

[https://en.wikipedia.org/wiki/JavaScript#Development_tools {2016.08.08}]

name::
* McsEngl.lagJsgn'development-tool!⇒Jsgntool,
* McsEngl.lagJsgn'programing-tool!⇒Jsgntool,
* McsEngl.lagJsgn'tool!⇒Jsgntool,
* McsEngl.Jsgntool,

info-resource of tool

description::
* https://romefrontend.dev/blog/2020/08/08/introducing-rome.html,

name::
* McsEngl.Jsgntool'Infrsc,

tool.SPECIFIC

name::
* McsEngl.Jsgntool.specific,

specific::
* Jsbr-tool,
* Jsnd-tool,
===
* analysis-tool,
* build-tool,
* debugger-tool,
* editor-tool,
* interpreter-(runtime)-tool,
* package-manager,
* task-runner-tool,
* testing-tool,

tool.RUNTIME

description::
What is the difference between Javascript engine and Javascript runtime?
The distinction between the two is not always clear and you'll find that the terms are commonly used interchangeably.
Conceptuallly, the difference is that an engine is responsible for providing the mechanics of parsing and JIT compilation, i.e. producing machine-executable operations from a script written in JavaScript.
The runtime environment provides the built-in libraries that are available to the program at runtime (during execution). So, if you're going to use the Window object or the DOM API in the browser, those would be included in the browser's JS runtime environment. A Node.js runtime includes different libraries, say, the Cluster and FileSystem APIs. Both runtimes include the built-in data types and common facilities such as the Console object.
Chrome and Node.js therefore share the same engine (Google's V8), but they have different runtime (execution) environments.
In a way, the runtime is to the engine what the linker is to the compiler in a traditional compiled language.
[2016-06-24, Alex-Giannakakos, https://www.quora.com/What-is-the-difference-between-Javascript-engine-and-Javascript-runtime]

name::
* McsEngl.lagJsgn'runtime,
* McsEngl.lagJsgn'runtime-environment,
* McsEngl.Jsgntool.runtime-environment,

lagJsgn-runtime.SPECIFIC

specific::
* browser,
* Node.js-runtime,

tool.ENGINE

description::
A JavaScript engine is a program or library which executes JavaScript code.
A JavaScript engine may be a traditional interpreter, or it may utilize just-in-time compilation to bytecode in some manner.
Although there are several uses for a JavaScript engine, it is most commonly used in web browsers.

[https://en.wikipedia.org/wiki/JavaScript_engine {2016.07.25}]

name::
* McsEngl.lagJsgn'engine,
* McsEngl.lagJsgn'interpreter,
* McsEngl.Jsgntool.engine,
* McsEngl.Jsgnengine,

info-resource of Jsgnengine

name::
* McsEngl.Jsgnengine'Infrsc,

addressWpg::
* {2017-02-28} Lin-Clark, A crash course in just-in-time (JIT) compilers, https://hacks.mozilla.org/2017/02/a-crash-course-in-just-in-time-jit-compilers/,

Jsgnengine.SPECIFIC

specific::
* browser-engine,
* browserNo-engine,
===
* Google-V8-engine,

Jsgnengine.SpiderMonkey

description::
SpiderMonkey is the code name for the first JavaScript engine, written by Brendan Eich at Netscape Communications, later released as open source and currently maintained by the Mozilla Foundation. SpiderMonkey provides JavaScript support for Mozilla Firefox and various embeddings such as the GNOME 3 desktop.
[https://en.wikipedia.org/wiki/SpiderMonkey]

name::
* McsEngl.Jsgnengine.SpiderMonkey,
* McsEngl.SpiderMonkey-Javascript-engine,

Jsgnengine.V8

description::
V8 is Google's open source high-performance JavaScript engine, written in C++ and used in Google Chrome, the open source browser from Google.
It implements ECMAScript as specified in ECMA-262, and runs on Windows XP or later, Mac OS X 10.5+, and Linux systems that use IA-32, ARM or MIPS processors.
V8 can run standalone, or can be embedded into any C++ application.

[https://github.com/v8/v8/wiki]

name::
* McsEngl.Google-V8-Javascript-engine,
* McsEngl.lagJsgn'V8,
* McsEngl.lagJsgn'Google-V8-engine,
* McsEngl.Jsgnengine.V8,
* McsEngl.V8--Javascript-engine,

tool.CODE-ANALYSIS

description::
When developing JavaScript, a linter is an essential tool for writing robust code.
If you take one thing away from this guide, let it be the use of a linter.
It will point out most issues that are described here and much more.
[https://molily.de/robust-Javascript/#linters]

name::
* McsEngl.code-analysis-tool//Javascript,
* McsEngl.code-beautifier-tool//Javascript,
* McsEngl.code-formatter-tool//Javascript,
* McsEngl.lagJsgn'analysis-tool,
* McsEngl.lagJsgn'beautifier-tool,
* McsEngl.lagJsgn'code-analysis-tool,
* McsEngl.lagJsgn'code-beautifier-tool,
* McsEngl.lagJsgn'code-formater-tool,
* McsEngl.lagJsgn'linter,
* McsEngl.Jsgntool.analysis,

specific::
* Jsnd--code-analysis-tool,
===
* ESLint,
* http://jsbeautifier.org/,
* JSHint,
* JSLint,

tool.DEBUGGER

description::
All modern browsers come with some form of a built-in JavaScript debugging application.
[https://stackoverflow.com/a/19623573]

name::
* McsEngl.Jsgntool.debugger,
* McsEngl.lagJsgn'debugger,

addressWpg::
* {2017-09-07} https://codeburst.io/learn-how-to-debug-Javascript-with-chrome-devtools-9514c58479db,

tool.PACKAGE-MANAGER

description::
Understanding JavaScript Package Managers
There are several JavaScript package managers: npm, bower, volo, ringojs, component. Currently, npm and bower have the most registered packages and enjoy the broadest third-party support.

Npm deals mainly in node-compatible JavaScript modules. However, bower focuses on the entire web platform, offering packages that could contain modules, scripts, CSS stylesheets, HTML templates, images, or fonts. For these reasons, npm tends to be used primarily for node.js development, and bower tends to be the favorite for client-side work.

While npm and bower use incompatible organizational patterns, both may be used in a single project since they use different metadata files (package.json and bower.json), and they install packages into different subdirectories. It's not uncommon to use npm to manage server-side packages and bower to manage client-side packages.

Unlike Java's Maven, JavaScript package managers concentrate mainly on finding packages, installing packages, and managing package versions. Npm also offers the ability to run simple build-related and test-related tasks.

Using JavaScript package managers
Getting started with package managers is straightforward. The following examples are for bower and npm, but similar concepts exist for the others.

After installing bower or npm, type bower init or npm init at the root directory of your project. The package manager will ask several questions. Your answers will be used to create a bower.json or package.json metadata file for your project.

To search for available packages to install, type bower search 'keywords' or npm search 'keywords'. A list of matching packages will be displayed.

To install a package into the local module cache and then copy its latest version into your project, type bower install 'package-name' or npm install 'package-name'. To install a specific version, the syntax varies slightly amongst package managers: bower install 'package-name'#'package-version' or npm install 'package-name'@'package-version'.

You may also save each package's version info into your project's metadata file. The package manager -- as well as other third-party tools -- can use the metadata to simplify client-side maintenance, build, testing, and bootstrapping tasks.

The best way to save a package's version info into your project's metadata file, is to use the --save option while installing the package. Type bower install --save 'package-name'#'package-version' or npm install --save 'package-name'@'package-version'.

[https://spring.io/understanding/Javascript-package-managers]

name::
* McsEngl.lagJsgn'package-manager,
* McsEngl.Jsgntool.package-manager,
* McsEngl.package-manager//Javascript,

pkgmgr.SPECIFIC

specific::
* bower-package-manager,
* npm-package-manager,

tool.PARSING

name::
* McsEngl.lagJsgn'parsing-tool,
* McsEngl.Jsgntool.parsing,
* McsEngl.Jsgntool.parsing,

addressWpg::
* https://tomassetti.me/parsing-in-Javascript/,

tool.TASK-RUNNER

name::
* McsEngl.lagJsgn'task-runner,
* McsEngl.Jsgntool.task-runner,
* McsEngl.task-runner--Javascript-tool,

specific::
* drome,
* gulp,

Jsgntool.DROME

description::
Drome project is my try to create JavaScript task runner which would be easy to use, lightweight, powerful and with well maintained ecosystem.
Features
⊛ Minimal abstraction: You can define tasks with command line statements and Node.js APIs
⊛ Independent: Drome doesn't have dependencies - it's really light and can grow up in his own way
⊛ Plug & play: All Node packages are Drome ecosystem - you don't have to wait for plugin updates
[https://github.com/dromejs/drome]

name::
* McsEngl.drome--task-runner,

tool.TESTING

description::
Javascript doesn't support testing natively.

name::
* McsEngl.lagJsgn'testing-tool,
* McsEngl.Jsgntool.testing,

Resource:
* https://www.sitepoint.com/Javascript-testing-unit-functional-integration/ {2016.04.25},
* https://github.com/jasmine/jasmine,

specific::
* Jsbr-testing-tool,
* Jsnd-testing-tool,

tool.CONVERTER

description::
* https://www.codeconvert.ai/javascript-to-java-converter,

name::
* McsEngl.Jsgntool.converting,
* McsEngl.Webapp.Javascript-to-java-converter,
* McsEngl.lagJsgn'converting-tool,

organization of lagJsgn

name::
* McsEngl.lagJsgn'ogn,

ogn.OpenJS-Foundation

description::
"About OpenJS Foundation
The OpenJS Foundation is made up of 31 open source JavaScript projects including Appium, Dojo, jQuery, Node.js, and webpack. Our mission is to support the healthy growth of JavaScript and web technologies by providing a neutral organization to host and sustain projects, as well as collaboratively fund activities that benefit the ecosystem as a whole.
Thanks to the interconnected nature of the JavaScript ecosystem, our scope covers a broad range of projects that represent a massive and diverse developer and end user community. While hosted projects will be our main focus, the benefits of the OpenJS Foundation will extend to non-hosted projects as well. Our goal is to make it easy and straightforward for projects to join the OpenJS Foundation and take advantage of our technical and community governance templates. In addition, companies that depend upon JavaScript are invited to join as members, providing tangible support and direction in activities that benefit the entire ecosystem.
By combining the JS Foundation and Node.js Foundation into a single organization, we can provide even greater support to the JavaScript community, streamlining our efforts by building one neutral home for all open source JavaScript projects."
[https://openjsf.org/]

name::
* McsEngl.lagJsgn-ogn.OpenJS-Foundation,

evoluting of lagJsgn

name::
* McsEngl.evoluting-of-Javascript,
* McsEngl.Javascript'evoluting,
* McsEngl.evoluting-of-lagJsgn,
* McsEngl.lagJsgn'evoluting,

{2015}-lagJsgn'Node.js-v4.0::
In September 2015, Node.js v0.12 and io.js v3.3 were merged back together into Node v4.0.
This brought V8 ES6 features into Node.js, and a long-term support release cycle.
As of 2016, the io.js website recommends that developers switch back to Node.js.

[https://en.wikipedia.org/wiki/Node.js#History]
* McsEngl.{lagJsgn'2015}-Node.js-v4.0,

{2013}-lagJsgn'ISOMORPHIC::
In 2013, Airbnb was the first to use Node.js to provide isomorphic (also called universal or simply shared) Javascript.
In the Node.js approach, the same framework is identically executed on the server side and client side.
On the server side, it provides an initial render of the page, and data could be provided through Node.js or through REST API calls.
On the client side, the framework binds to DOM elements, "rehydrates" (updates the initial server-side render provided by Node.js) the HTML, and makes asynchronous REST API calls whenever updated data is needed.
The biggest advantage Airbnb's Javascript isomorphism had over Twitter's approach is the notion of a completely reusable rendering system.
Because the client-side framework is executed the same way on both server and client, rendering becomes much more manageable and debuggable in that the primary distinction between the server-side and client-side renders is not the language or templating system used, but rather what data is provisioned by the server and how.
From a prototype written in 10 days to being used across the stack by some of the largest websites in the world, long gone are the days of clunky browser implementations whose APIs changed depending on whether you were using Netscape or Internet Explorer.
It took Javascript 20 years, but it is finally considered an equal partner to traditional, well-established server-side languages.

[http://buytaert.net/a-history-of-Javascript-across-the-stack]
* McsEngl.{lagJsgn'2013}-ISOMORPHIC,

{2009}-lagJsgn'Node.js::
Node.js was originally written in 2009 by Ryan Dahl.
Dahl demonstrated the project at the inaugural European JSConf on November 8, 2009.
Node.js combined Google's V8 Javascript engine, an event loop and a low-level I/O API.
The project received a standing ovation.

[https://en.wikipedia.org/wiki/Node.js#History]
* McsEngl.{lagJsgn'2009}-Node.js,

{2008}-lagJsgn'V8-performance::
In 2008, Google launched Chrome with a faster Javascript engine called V8.
The release announcement read:
"We also built a more powerful Javascript engine, V8, to power the next generation of web applications that aren't even possible in today's browsers.".
At the launch, V8 improved Javascript performance by 10x over Internet Explorer by compiling Javascript code to native machine code before executing it.
This caught my attention because I had recently finished my PhD thesis on the topic of JIT compilation.
More importantly, this marked the beginning of different browsers competing on Javascript performance, which helped drive Javascript's adoption.

[http://buytaert.net/a-history-of-Javascript-across-the-stack]
=== JIT:
In 2008, a period that people call the performance wars began. Multiple browsers added just-in-time compilers, also called JITs. As JavaScript was running, the JIT could see patterns and make the code run faster based on those patterns.
The introduction of these JITs led to an inflection point in the performance of JavaScript. Execution of JS was 10x faster.
[https://hacks.mozilla.org/2017/02/a-cartoon-intro-to-webassembly/]
* McsEngl.{lagJsgn'2008}-V8-performance,

{2005}-lagJsgn'Google-Maps-Ajax::
A year later in 2005, Google launched Google Maps, which used the same technology as Gmail to transform online maps into an interactive experience.
With Google Maps, Google was also the first large company to offer a Javascript API for one of their services allowing developers to integrate Google Maps into their websites.
Google's XMLHttpRequest approach in Gmail and Google Maps ultimately came to be called Ajax (originally "Asynchronous Javascript and XML").
Ajax described a set of technologies, of which Javascript was the backbone, used to create web applications where data can be loaded in the background, avoiding the need for full page refreshes.
This resulted in a renaissance period of Javascript usage spearheaded by open source libraries and the communities that formed around them, with libraries such as Prototype, jQuery, Dojo and Mootools.
(We added jQuery to Drupal core as early as 2006.)

[http://buytaert.net/a-history-of-Javascript-across-the-stack]
* McsEngl.{lagJsgn'2005}-Google-Maps-Ajax,

{2004}-lagJsgn'Gmail::
For the first 10 years of Javascript's life, professional programmers denigrated Javascript because its target audience consisted of "amateurs".
That changed in 2004 with the launch of Gmail.
Gmail was the first popular web application that really showed off what was possible with client-side Javascript.
Competing e-mail services such as Yahoo! Mail and Hotmail featured extremely slow interfaces that used server-side rendering almost exclusively, with almost every action by the user requiring the server to reload the entire web page.
Gmail began to work around these limitations by using XMLHttpRequest for asynchronous data retrieval from the server.
Gmail's use of Javascript caught the attention of developers around the world.
Today, Gmail is the classic example of a single-page Javascript app; it can respond immediately to user interactions and no longer needs to make roundtrips to the server just to render a new page.

[http://buytaert.net/a-history-of-Javascript-across-the-stack]
* McsEngl.{lagJsgn'2004}-Gmail,

{1998}-lagJsgn'international-standard::
"The first edition of this Ecma Standard was adopted by the Ecma General Assembly of June 1997.
That Ecma Standard was submitted to ISO/IEC JTC 1 for adoption under the fast-track procedure, and approved as international standard ISO/IEC 16262, in April 1998."
[https://262.ecma-international.org/11.0/]
* McsEngl.{lagJsgn'1998}-international-standard,

{1995}-lagJsgn'ANNOUNCEMENT::
MOUNTAIN VIEW, Calif. (December 4, 1995) -- Netscape Communications Corporation (NASDAQ: NSCP) and Sun Microsystems, Inc. (NASDAQ:SUNW), today announced Javascript, an open, cross-platform object scripting language for the creation and customization of applications on enterprise networks and the Internet.
The Javascript language complements Java, Sun's industry-leading object-oriented, cross-platform programming language.
The initial version of Javascript is available now as part of the beta version of Netscape Navigator 2.0, which is currently available for downloading from Netscape's web site.

[https://web.archive.org/.../wp.netscape.com/newsref/pr/newsrelease67.html]
* McsEngl.{lagJsgn'1995}-ANNOUNCEMENT,

GENERIC of lagJsgn

generic-chain::
* programing-language,
* computer-language,
* mapping-method,
* method,
* ModelConceptStructured,
* info,
* model,
* entity,

lagJsgn.SPECIFIC

name::
* McsEngl.lagJsgn.specific,
* McsEngl.lagJsgn'dialect,

description::
A-Javascript-dialect is a-programing-language with most of the-characteristics of lagJsgn, that a-programer 'speaks' and a-computer 'understands'.
If there is no a-compiler|interpreter there is no programing-language.
Today our theories about the-languages (human or computer) are incorrect to a significant extent, but the-languages exist before our theories about them.
ECMAScript, from this point of view, is not a-language, it is a-theory about lagJsgn.

specific::
* Browser-Javascript,
* BrowserNo-Javascript,
* Desktop-Javascript,
* Node-Javascript,
* Server-Javascript,
* ServerNo-Javascript,
* Strict-Javascript,
* StrictNo-Javascript,

addressWpg::
* {2017-06-21} JavaScript for Microcontrollers and IoT: https://auth0.com/,

lagJsgn.browser-Javascript (lagJsbr {1995}) (Link)

lagJsgn.Node-Javascript (lagJsnd {2009}) (Link)

lagJsgn.desktop-Javascript (lagJsdt)

Cpt-created: {2017-07-09},

lagJsdt'Description

description::
Desktop-Javascript (Ljd) is the-Javascript for the-desktop.
Browser-js has no full access of the underline operating-system for security reasons.
Node-js has no GUI components.
Desktop-Javascript combines the two technologies and creates cross-platform programs using only web-technologies, Javascript, HTML and CSS.

name::
* McsEngl.Ljd!⇒lagJsdt,
* McsEngl.desktop-Javascript-language!⇒lagJsdt,
* McsEngl.desktop-Js!⇒lagJsdt,
* McsEngl.lagJsdt,
* McsEngl.lagJsdt!=desktop-Javascript-language,
* McsEngl.language.Javascript.desktop!⇒lagJsdt,
* McsEngl.language.progaming.Javascript.desktop!⇒lagJsdt,
* McsEngl.programing-language.Javascript.desktop!⇒lagJsdt,

lagJsdt'generic-chain

generic-chain::
* Javascript-programing-language,
* programing-language,
* computer-language,
* mapping-method,
* method,
* info,
* model,
* entity,

lagJsdt.SPECIFIC

name::
* McsEngl.lagJsdt.specific,

generic-chain::
* Electron-(lagJsel),
* NW.js-(lagJsnw),

lagJsgn.strict-mode

description::
"An ECMAScript Script syntactic unit may be processed using either unrestricted or strict mode syntax and semantics. Code is interpreted as strict mode code in the following situations:
* Global code is strict mode code if it begins with a Directive Prologue that contains a Use Strict Directive.
* Module code is always strict mode code.
* All parts of a ClassDeclaration or a ClassExpression are strict mode code.
* Eval code is strict mode code if it begins with a Directive Prologue that contains a Use Strict Directive or if the call to eval is a direct eval that is contained in strict mode code.
* Function code is strict mode code if the associated FunctionDeclaration, FunctionExpression, GeneratorDeclaration, GeneratorExpression, AsyncFunctionDeclaration, AsyncFunctionExpression, AsyncGeneratorDeclaration, AsyncGeneratorExpression, MethodDefinition, ArrowFunction, or AsyncArrowFunction is contained in strict mode code or if the code that produces the value of the function's [[ECMAScriptCode]] internal slot begins with a Directive Prologue that contains a Use Strict Directive.
* Function code that is supplied as the arguments to the built-in Function, Generator, AsyncFunction, and AsyncGenerator constructors is strict mode code if the last argument is a String that when processed is a FunctionBody that begins with a Directive Prologue that contains a Use Strict Directive.
ECMAScript code that is not strict mode code is called non-strict code.
[https://262.ecma-international.org/11.0/#sec-strict-mode-code]

name::
* McsEngl.lagJsgn.strict-mode,
* McsEngl.strict-mode-Javascript,

meta-info

this webpage was-visited times since {2016.05.04}

page-wholepath: synagonism.net / worldviewSngo / dirTechInfo / lagJsgn

SEARCH::
This page uses 'locator-names', names that when you find them, you find the-LOCATION of the-concept they denote.
LOCAL-SEARCH:
Type CTRL+F "McsLag4.words-of-concept's-name", to go to the-LOCATION of the-concept.
GLOBAL-SEARCH:
Clicking on the-GREEN-BAR of a-page you have access to the-global--locator-names of my-site.
A-preview of the-description of a-global-name makes reading fast.
Abbreviations have no description.

Footer:
• author: Kaseluris.Nikos.1959
• email:
 imgMail
• twitter: @synagonism
===
• github: https://github.com/synagonism/McsWorld/blob/master/dirTchInf/McsTchInf000010.last.html,

SEARCH THE-PAGE:
This page uses 'locator-names', names that when you find them, you find the-LOCATION of the-concept they denote.
Type CTRL+F "Mcs.[lagJsgn|lagJsbr|lagJsnd]words-of-concept's-name", to go to the-LOCATION of the-concept.
There are about 400 sub-concepts in this concept (ebook) with 1,400 names and 14,000 lines of hitp-document.

Webpage-Versions:
• version.dynamic: McsTchInf000010.last.html,
• version.6-0-0.2021-04-09: (5-56) ../../dirMiwMcs/dirTchInf/filMcsLagJsgn.6-0-0.2021-04-09.html,
• version.5-0-0.2017-11-26.last: ../../dirMiwMcs/dirTchInf/McsTchInf000010.5-0-0.2017-11-26.html,
• version.4.2017-07-11: ../../dirMiwMcs/dirTchInf/McsTchInf000010.4.2017-07-11.html,
• version.3.2016-08-22 (2-4): ../../dirMiwMcs/dirTchInf/McsTchInf000010.3.2016-08-22.html,
• version.2.2016-08-04.Jsgn-Jsnd (1-33): ../../dirMiwMcs/dirTchInf/filCptLjs.2.2016-08-04.html,
• version.1-21.2016-05-26: ../../dirMiwMcs/dirTchInf/lngJs.1-21.2016-05-26.html,
• version.1-17.2016-05-23: ../../dirMiwMcs/dirTchInf/lngJs.1-17.2016-05-23.html,
• version.1-11.2016-05-18: ../../dirMiwMcs/dirTchInf/lngJs.1-11.2016-05-18.html,
• version.1.2016-05-10.Jsbr.created: ../../dirMiwMcs/dirTchInf/lngJs.1.2016-05-10.html,

support (Link)

comments

specific::
* on Disqus,
* on Steemit,