JavaScript
niebezpieczne rewiry
Maciej Brencz, Wikia Inc.
AKAI, 10 stycznia 2012
Maciej Brencz, Wikia Inc.
AKAI, 10 stycznia 2012
var i = 5, foo = 'bar',
bar = function() {
var i = 42;
ajax('/addToCart/cake', function(data) {
console.log(data.result);
});
};
var i = 42;
(function() {
i = 'test'; // zmienna globalna :(
})(); // "immediate function"
console.log(i); // na pewno 42?
var x = 5;
(function () {
console.log(x); // na pewno 5?
var x = 42;
})();
var x = 5;
(function () {
var x;
console.log(x); // undefined
x = 42;
})();
var a, b;
a = b = {foo: true}; // a i b odnoszą się do tego samego obiektu!
a.foo = false;
console.log(b.foo); // też false
var a = {foo:true};
(function(obj) {
obj.foo = false;
})(a);
console.log(a.foo); // false
var a = [1,2]; a[100] = 3; console.log(a.length); // 3? nie, 101
var a = [1,2,3,4]; a.length = 2; console.log(a); // [1,2] - "obcięcie" tablicy
> 0 == ''
true
> 0 == false
true
> (0 === '') || (0 === false)
false
> ({foo: true}) === ({foo: true})
false
var x = 42;
with(obj) {
x = 5; // przypisanie do x czy do obj.x?
}
var foo = {
test: true,
bar: 32,
};

function getObject() {
return
{
foo: 42
}
}
getObject(); // powinniśmy otrzymać obiekt, ale czy na pewno?
Wskazuje najczęstsze błędy w kodzie JS:
> typeof null
'object'
> 2 + '2'
"22"
> 0.1 + 0.2
0.30000000000000004
> parseInt('08')
0 → 8 wg ECMAScript5
> typeof [1, 2, 3]
"object"
> undefined = 'foo'
nie róbcie tego w domu!
> String.prototype.trim> Array.prototype.indexOf> options = options || {}