środa, 6 lutego 2013

Global scope

Przydatne do sprawdzania co jest w przeglądarce. Co zostało dodane przez skrypty a nie jest natywnym elementem JavaScript`u czy DOM.

(function(){
  var w = window.open('about:blank');
  var res = [];
  for( var i in window ){
    if( typeof w[i] === 'undefined' ){
      res.push(i);
    }
  }
  w.close();
  return res;
})().join('\n');

środa, 23 stycznia 2013

odpowiednik htmlspecialchars w js

Odpowiednik funkcji htmlspecialchars znanej z PHP.
var htmlspecialchars = function(html){
  return [
    [/&/g, '&'],
    [/</g, '&lt;'],
    [/>/g, '&gt;'],
    [/"/g, '&quot;'],
    [/'/g, '&#39;']
  ].reduce(function(h, r){
    return h.replace(r[0], r[1]);
  }, html);
};
Funkcja przydatna np. do umieszczania kodu na tym blogu. Przykład użycia:
prompt('skopiuj kod HTML', htmlspecialchars(prompt('podaj kod HTML')));

poniedziałek, 21 stycznia 2013

Binary - operacje na bitach

Funkcja upraszczająca operacje na bitach w JavaScript.
var Binary = function(val){
  val = val || 0;

  return {
    value: function(v){
      if( typeof v === 'undefined' )
        return val;
      val = v;
    },
    bit: function(n, v){
      if( typeof v === 'undefined' )
        return val & (1<<n) ? 1 : 0;
      if( v ){
        val |= 1<<n;
      }else{
        val &= ~(1<<n);
      }
    },
    toString: function(){
      return val.toString(2);
    }
  };
};
Warto pamiętać, że operacje bitowe w JavaScript są powolne, ponieważ JavaScript przechowuje wszystkie liczby (Number) jako double. W związku z tym każda operacja bitowa (przesunięcie bitowe, suma bitowa czy iloczyn bitowy) wymusza konwersję double na int.
// utworz nowa wartosc 5
var b = new Binary(5);
// odczytaj drugi bit
console.log(b.bit(2));
// ustaw pierwszy bit na 1
b.bit(1, true);
// odczytaj wartosc liczbowa
console.log(b.value());