@moriturius: bo tak działa JS. W sensie a jest obiektem, pisząc a[0] = 2 ustawiasz pole obiektu a o nazwie '0' na 2. Ale ale int jest specjalnym typem i ma to gdzieś. Jest jakiś specjalny mechanizm ala-anotacji gdzie można tak pozmieniać typy do takiego właśnie działania.
2a. wartość prosta zostaje tymczasowo skonwertowana na obiekt typu Number, żebyś mógł w ogóle ustawić jej jakieś pole
@Marmite: O! I to jest odpowiedź, której oczekiwałem :) (wiedziałem kogo zapytać)
BTW: to nie jest kod który chcę, żeby działał (raczej bym takiego nie napisał :) ) - po prostu z kolegą zastanawialiśmy, się nad niektórymi ciekawymi rzeczmi w JS i trafiłem na to i nie wiedziałem dlaczego się tak zachowuje.
var a = 5;
a[0] = 2;
console.log(a[0]); // daje undefined
Nasuwają mi się dwa pytania:
1) Dlaczego
a[0] = 2
przechodzi jak gdyby nigdy nic?
2) Jeśli już przechodzi to dlaczego
a[0]
daje
undefined
?
#javascript
@Marmite, @Ginden wołam was bo podejrzewam, że możecie wiedzieć
console.log(typeof(a));
to widać że to dalej int,
console.log(a);
daje 5. Wygląda jakby druga linia przypisywała wartość #!$%@?, witamy w świecie #js
1. utworzenie wartości prostej (typu number a nie int, panowie :P @entrop: @M4ks: @kamdz:)
2. przypisanie do wartości prostej właściwości
2a. wartość prosta zostaje tymczasowo skonwertowana na obiekt typu Number, żebyś mógł w ogóle ustawić jej jakieś pole
2b. ustawiane jest pole "0" tego obiektu
2c. obiekt jest wywalany w kosmos bo nigdzie go nie zapisujesz
2d. w zmiennej
a
var a = new Number(5)
, wtedy zamiast wartości prostej dostajesz obiekt typu Number
@M4ks: Bynajmniej ( ͡° ͜ʖ ͡°) ale już
2..toString()
tak
var a = 2 | 0;
to jest int ( ͡° ͜ʖ ͡°)
Ha, z tym 2..toString() to faktycznie wtopa, testowałem sobie na czymś z kropka i nie pomyślałem.
Jeszcze do kompletu nalezy dodać hoisting i chyba wszystkie smutne rzeczy z JS omówione ;)
@Marmite: O! I to jest odpowiedź, której oczekiwałem :) (wiedziałem kogo zapytać)
BTW: to nie jest kod który chcę, żeby działał (raczej bym takiego nie napisał :) ) - po prostu z kolegą zastanawialiśmy, się nad niektórymi ciekawymi rzeczmi w JS i trafiłem na to i nie wiedziałem dlaczego się tak zachowuje.
Dzięki
Obczaj to.
var a = 2;
Number.prototype.cthulhu = 'fhtagn';
console.log(a.cthulhu);