Vefforritun 1 kennd haustið 2025
Yfirferð fylgir Eloquent JavaScript að einhverju leiti, sleppum einhverju, bætum einhverju við.
JavaScript is a prototype-based, multi-paradigm, single-threaded, dynamic language, supporting object-oriented, imperative, and declarative (e.g. functional programming) styles.
If you want to write imperative code that runs in a web browser, you only have one choice: JavaScript.
JavaScript borrows most of its syntax from Java, but also inherits from Awk and Perl, with some indirect influence from Self in its object prototype system.
—Brendan Eich — JavaScript 1.1 specification
Java is to JavaScript as ham is to hamster.
Mörg atriði eru ólík, en það sem skiptir mestu máli í fyrstu:
console og skrifum skipanir og forritnode í terminalTC39 er hópur sérfræðinga sem sér um stöðlun á ECMAScript gegnum tillögurconsoleconsole hlutconsole.log('Halló, heimur!'); // skrifar 'Halló, heimur!' í "console"/* comment */// comment/* má /* ekki nesta */ fáum syntax villu */Breytur í JavaScript hafa ekki týpu, gildi hafa týpu.
Í grunninn höfum við primitive týpur
string, number, bigintboolean, undefined, null, symbolobjectobjectnull og undefined eiga sér primitive wrapperString fyrir string og Number fyrir number', " eða `
    'Halló, heimur!' eða "Halló, heimur!"\ til að escapea sérstaka stafi eða sérstök tákn (t.d. newline eða tab)
    "Halló, \"heimur\""'Tvær\nLínur\tog tab'
túlkað sem
Tvær
línur	og tab
"A newline character is written: \"\\n\"."
túlkað sem
A newline character is written: "\n"
' ekki "
    ''texti' eða "texti" eða '中文'length gefur lengd
    'halló'.length; // 5+ virki milli tveggja strengja skeytir þeim saman
    'Halló, ' + 'heimur' // 'Halló, heimur'+`1+1 eru ${1 + 1}
10*10 eru ${10 * 10}`
túlkað sem
1+1 eru 2
10*10 eru 100
number1.250.2 + 0.1 = 0.300000000000000041.25e6 // 1.25 * 10^6 = 1250000Infinity og -Infinity – gildi sem geta komið upp í útreikningum
    9e999 // Infinity1/0 // Infinity5 * 10 + 2 // 525 * (10 + 2) // 60/, * og % hafa sama forgang sem er hærri en á + og -% er afgangs virki (remainder), deilir og skilar afgangi
    10 % 2 // = 0, jöfntala skilar alltaf 011 % 2 // = 1, oddatala skilar alltaf 1NaN – „Not a number“, skilað þegar ekki er hægt að reikna
    0 / 0 // NaN1 - 'a' // NaNNumber.isNaN() – fall sem segir til um hvort gildi sé NaN (kastar gildi í tölu áður!)
    Number.isNaN(1) // falseNumber.isNaN('a') // trueNumber.isNaN('1') // falseBigInt er týpa fyrir heiltölur sem fara út fyrir skilgreint bil number
    Number.MAX_SAFE_INTEGER og Number.MIN_SAFE_INTEGERn eftir tölu, t.d. 2n ** 100nNumber.isFinite()Number.isFinite() segir til um hvort gildi sé Infinity eða ekki
    Number.isFinite(1) // trueNumber.isFinite(1 / 0) // falseNumber.parseInt()Number.parseInt(str, radix) – reynir að ná heiltölu úr streng, skilar henni eða NaNradix er það tölukerfi sem við miðum við, oftast tugakerfi, 10
    Number.parseInt('0100', 10) // 100Number.parseInt('a100', 10) // NaNNumber.parseInt('0100', 2) // 4Number.parseFloat()Number.parseFloat(str) - reynir að ná heiltölu með broti úr streng, skilar tölu eða NaN
    Number.parseFloat('100.123') // 100.123.toFixed([digits]) – formar tölu með [digits] aukastöfum, skilar streng
    100.66.toFixed(1) // 100.7 — Já! Er partur af numbertrue eða false-1) og binary (t.d. 2 - 1)typeoftypeof er einstæður (unary) virki sem gefur týpu á gildi sem strengtypeof 'halló' // "string"
typeof 1 // "number"
typeof true // "boolean"
Symbol skilgreinir symbol gildiSymbol('foo') === Symbol('foo') // falsetypeof Symbol('foo') // "symbol"typeof hallo // "undefined", hér er hallo óskilgreind breytanull.lengthUncaught TypeError: Cannot read property 'length' of nulltypeof null // "object"(int)foo í Java og C nema óbeint'1' + 1 // "11"
NaN + 'a' // "NaNa"
3 > 2 // true'foo' > 'bar' // false>= og jafnt eða minna <= virkja!=, ==, !==, ===== og != mun byrja á að kasta báðum gildum
    === og !== mun byrja á að bera saman týpur og passa uppá að þær passi (eða ekki)
    === fyrir allan samanburð!1 == '1' // true
1 === '1' // false
false == 0 // true
false === 0 // false
boolean án þess að vera það, tölum við um að þeir séu truthy eða falsyfalse0'' // tómi strengurnullundefinedNaNnull og undefined eru ekki jöfn neinu nema sjálfu sérNaN er ekki jafnt neinu, ekki einu sinni sjálfu sérif (NaN) { return 1; } // skilar ekki 1
if ('halló') { return 1; } // skilar 1
if ('') { return 1; } // skilar ekki 1
and, or og not virkjum&&, tvístæður (binary) and virki sem skilar true þá og því aðeins að bæði stök séu true, annars false
    true && false // falsetrue && true // true||, tvístæður (binary) or virki sem skilar true ef annað gildi er true
    true || false // truefalse || false // false!, einstæður (unary) neitunarvirki, kastar segð úr true í false og öfugt
    !true // false!true // false
!'' // true
!!'' // false
// falsy gildi verður „alvöru“ false
Boolean primitive wrapper er samt betri lausn til að kasta gildi í booleanBoolean('') // false
Boolean(true) // true
gildi ? 'skilað ef truthy' : 'skilað ef falsy'
0 ? 'truthy' : 'falsy' // falsy
true ? 1 : 0 // 1
'' ? 'Ekki tómur' : 'Tómur' // 'Tómur'
|| og && valda skammhlaupi – skila seinasta gildi sem var skoðaða || b – Ef a er truthy er því skilað, annars ba && b – Ef a er falsy er b skilað, annars a0 || 'bar' // 'bar'
null || 1 // '1'
'baz' && 0 // 0
gildi && 'Birtist þá og því aðeins að gildi sé truthy í staðinn fyrir if eða ternary virkja)value = providedValue || defaultValue)