Marek Stępień
– dawniej European Computer Manufacturers' Association
JSON.parse(str)
, JSON.stringify(obj)
Object.create()
seal()
, freeze()
itp.)Function.prototype.bind()
"string"[2]
zamiast "string".charAt(2)
obiekt.class
, obiekt.if
)eval()
) parsowanie JSON-a:var o = JSON.parse('{"prop":"value"}');
var s = JSON.stringify({prop: "value"});
Function.prototype.bind(thisObj [, arg1, arg2, ..., argN ])
this
ustawionym na thisObj
i, opcjonalnie, początkowymi argumentami// dotychczas: document.getElementById("foo").onclick = function () { c0nsole.write("kliknięto foo"); }
this
w dowiązanej funkcji wskazuje na 1. argument bind
(c0nsole
)bind()
stają się argumentami c0nsole.write
Array.isArray(anObj)
- czy obiekt jest tablicą (niezależnie od pochodzenia)arr.indexOf()
, arr.lastIndexOf()
- jak dla String
every
, some
, forEach
,
map
, filter
, reduce
, reduceRight
arr.every(function (arrayItem, index, array) {/*...*/})
- sprawdza, czy każdy element tablicy spełnia warunek
arr.some(function (arrayItem, index, array) {/*...*/})
sprawdza, czy choć jeden element spełnia warunek
arr.filter(function (arrayItem, index, array) {/*...*/})
- zwraca nową tablicę złożoną z elementów oryginalnej tablicy spełniających warunek
arr.map(function (arrayItem, index, array) {/*...*/})
zwraca nową tablicę złożoną z elementów oryginalnej tablicy przekształconych przez funkcję-argument
arr.forEach(function (arrayItem, index, array) {/*...*/})
wywołuje zadaną funkcję na każdym elemencie tablicy (będzie jej argumentem)
arr.reduce(function (accum, currVal, index, array){/*...*/}, initialVal)
Wykonuje funkcję na akumulatorze i każdej wartości tablicy (od lewej do prawej), by uprościć ją do pojedynczej wartości.
arr.reduce(function (accum, currVal, index, array){/*...*/}, initialVal)
Podanie initialVal
sprawia, że accum
będzie w pierwszym przebiegu równy initialVal
, a currVal
= arr[0]
. Niepodanie initialVal
(jak poprzednio) sprawia, że accum
w pierwszym przebiegu jest równy arr[0]
, a currVal
= arr[1]
.
arr.reduceRight(function (accum, currVal, index, array){/*...*/}, initialVal)
Działa analogicznie jak reduce
, z tym że zaczyna od końca i kieruje się do początku tablicy.
Date.now()
- zwraca liczbę ms od 1.01.1970Date.prototype.toISOString()
- reprezentacja ISO-8601 danej datyString.prototype.trim()
- kopia stringa bez początkowych i końcowych białych znaków"use strict";
function () { "use strict"; /* dalszy kod funkcji */ }
with
!) , inne wyrzucają wyjątki lub zmieniają zachowanie"use strict";
!Zanim powiemy, co jest nowe, przypomnijmy, co było dotychczas możliwe w JS.
var anObject = { prop1: value1, prop2: value2, // ... propN: valueN };
Object.prototype ... someOtherProto someProto ... anObject
Między Object.prototype
a naszym anObject
może istnieć dowolna liczba obiektów w łańcuchu prototypów, z których - poczynając od dołu - pobierane będą własności nieobecne bezpośrednio w anObject
.
x = anObject.prop1
anObject.prop2 = 8
delete anObject.prop3
prop4
jest funkcją): anObject.prop4()
new
) utrudnione
obj.setProp1()
, obj.getProp2()
__defineGetter__
, __defineSetter__
)
anObj = Object.beget(protoObj)
D. Crockforda / niestd. anObj.__proto__
Nowe metody obiektu Object
:
defineProperty()
,
defineProperties()
,
getOwnPropertyDescriptor()
,
create()
,
seal()
,
isSealed()
,
freeze()
,
isFrozen()
,
preventExtensions()
,
isExtensible()
,
keys()
,
getOwnPropertyNames()
for...in
, in
itp.
Object.defineProperty(obj, prop, descriptor)
obj
- obiekt, do którego dodajemy własność
prop
- nazwa własności (string)
descriptor
- deskryptor własności
Obiekt o następujących własnościach:
value
writable
configurable
enumerable
get
set
...able
są domyślnie false
; pozostałe: undefined
Object.getOwnPropertyDescriptor(obj, propName)
pozwala pobrać deskryptor istniejącej własności.
To samo, co defineProperty()
, ale pozwala jednocześnie zdefiniować więcej własności.
Object.defineProperties(obj, { prop1Name: prop1Descriptor, prop2Name: prop2Descriptor, // ... propKName: propKDescriptor });
uniemożliwia dodawanie nowych własności do obiektu - nikt nie będzie nam nic dopisywał do naszego obiektu
Istniejące własności można usuwać (delete
), można zmieniać ich deskryptory, a także wartość.
Object.isExtensible(anObj)
informuje o rozszerzalności obiektu
zapieczętowuje obiekt, tj. uniemożliwia dodawanie kolejnych i konfigurowanie/usuwanie istniejących własności:
Object.isSealed(anObj)
informuje, o zapieczętowaniu obiektu
zamraża obiekt, uniemożliwiając jakiekolwiek modyfikacje:
Object.isFrozen(anObj)
informuje, o zamrożeniu obiektu
metoda \ operacje | zmiana wartości |
konfi- gurowanie |
dodawanie nowych |
---|---|---|---|
(brak) | ✔ | ✔ | ✔ |
preventExtensions() |
✔ | ✔ | - |
seal() |
✔ | - | - |
freeze() |
- | - | - |
Object.beget()
D. Crockforda z dodatkowym argumentem
anObj = Object.create(proto [, propHash ]);
proto
- obiekt, który będzie prototypem nowego obiektu
propHash
- opcjonalny obiekt z deskryptorami własności
(analogicznie jak przy defineProperties()
)
var anObj = Object.create(Object.prototype);
var anObj = new Object(); // równoważne
var anObj = {}; // równoważne
var volumeButton = { delta: 0, // o ile zmienia się głośność onActivate: function () { someAudioPlayer.volume += this.delta; } // ... }; var volumeUpButton = Object.create(volumeButton), volumeDownButton = Object.create(volumeButton); volumeUpButton.delta = 1; volumeDownButton.delta = -1;
let
is the new var
”)const x = 52;
function f(someArg = 5) {}
[a, b] = [5, 10];
[1,2,3].map((x) -> x*x)
Proxy
i metaprogramowaniePytania?
Silnik slajdów: niesamowity CSSS (autorka: Lea Verou; MIT License) plus sklecone na szybko pluginy mojego autorstwa :P
Tło: bez tytułu, John Wilson (Flickr: johnwilson1969; CC-BY-SA)