DUzun's Web
Programare, proiecte personale, divertisment

duzun.teologie.net
 Home >> Programare  
News

[3] [2] [1] >>  

Deosebiri importante intre JavaScript (implementare W3C) si JScript (implementare Microsoft)
 

Acest articol este un ciot!

Deosebiri importante intre JavaScript  (implementare W3C) si JScript (implementare Microsoft)

Cred că toți programatorii web știu că există două tipuri de browsere: care se conformează cu standardele W3C (printre care Chrome, FireFox, Opera, Safari) și care nu se conformează (în primul rând Internet Explorer sau IE).

Specificațiile nu acoperă toate problemele apărute la implementarea limbajului ECMA-262 (altfel spus - JavaScript) în diferite medii. Pe lângă faptul că nu toate browserele se conformează cu acest standard, divergențe apar și în problemele asupra cărora specificațiile nu se pronunță în vreun fel.

 

Iată câteva dintre aceste divergențe:

 

  • elem instanceof Object;

În mediul JavaScript din browser există două clase mari de obiecte: DOM și non-DOM. Obiectele DOM se mai numesc Elemente și fac parte din structura documentului HTML. Obiectele non-DOM sunt toate celelalte obiecte, toate instanțe indirecte sau directe ale Object.

Apare o întrebare firească: Elementele (obiectele DOM) sunt instante ale Object sau nu?

Raspunsul la această întrebare depinde de mediul ales: IE sau non-IE. Elementele se comporta in toate privintele ca niste obiecte obișnuite (non-DOM), având și ceva proprietăți specifice. Deci logic ar fi să fie instanțe ale clasei Object.

Deci, în IE elementele nu sunt instanțe ale Object, și în general nu sunt instanțe ale căreiva clase în sensul că elem instanceof X === false pentru orice element si orice clasa

 

  • function x() {}; alert(x.name);

Atributul "name" al obiectelor de tip Function nu este un standart ECMA-262, însă a fost introdus de către Mozilla și acceptat de către toate browserele majore, desigur cu excepția IE.

 

  • var y = function z(){}; alert(typeof z); 

În toate browserele typeof z == undefined, iar in IE typeof z == 'function', ceea ce e greșit

 

  • var s = 'abcd'; alert(s[1]);

s[1] == 'b', în mod normal în toate browserele, cu exceptia IE până la versiunea 8, unde s[1] === undefined.

 

  • var a = Array.prototype.slice('abcd'); alert(a);

Aceasta este o metodă eficientă de obținere a obiectelor de tip Array din orice obiect ce conține proprietatea 'length' (de ex. String). Cu părere de rău nici în IE8 aceasta nu e o metodă în cazul String. În aces caz recomand 'abcd'.split('');

 

  • var a = [1, 2, 3, 4, 5]; try{ alert(a.indexOf()); } catch(e) { alert(e.description); }

Obiectele de tip String au metoda indexOf. Însă cele de tip Array în IE nu au, deoarece IE folosește o versiune mai veche de JScript (1.3, ECMA-262 3rd edition).

 

  • var x = 10; function a(){ return x; try{}catch(x){} }; alert(a());

În browserele W3C a() === 10, însă nu și în IE... Pentru simplul fapt că există catch(x), variabila x este redeclarata in scopul functiei a(), ca și cum am avea declarația: function a(){ var x; return x; };

 

  • window.b = 1; var b = b || 2;

Nu am cercetat până la urma această situație, dar în unele imprejurări b == 2, deși ar trebui sa fie 1. Am avut o situație în care prima instrucțiune se efectua într-un fișier JS, iar a doua în alt fisier JS și am obținut efectul nedorit (în IE).

 Buzz    Distribuie   </> 15.12.2011
 
O mică nuanţă de mare importanţă în PHP, JavaScript, ş.a.
   

Operatorul '==' nu este tranzitiv!

Care este proprietatea tranzitivă a unei relaţii? Dacă '==' ar fi tranzitiv, ar satisface relaţiile: dacă a == b şi b == c, atunci a == c. 
Dar operatorul '==' nu este relaţie binară în sens matematic, ci este un operator al limbajului care în majoritate cazurilor se comportă ca o relaţie de echivalenţă.

Iată un exemplu ilustrativ:

<?php
var_export('' == 0);   echo '<br />'; // true
var_export(0 == '0');  echo '<br />'; // true
var_export('0' == ''); echo '<br />'; // false - surpriza :-)
?>
JavaScript:
console.log('' == 0);   // true
console.log(0 == '0');  // true
console.log('0' == ''); // false - surpriza :-)

 Buzz    Distribuie   </> 16.11.2011
 
The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) by Joel Spolsky
  


   Nu te-ai întrebat vreodată de ce multe din site-urile româneşti au conţinutul fără diacritice? Răspunsul e simplu. Puţini programatori se aprofundează în "misterele" codificării textului! Se vede că aceasta este problemă nu numai a programatorilor vorbitori de limbă română, dar şi a multor specialişti în domeniu din întreaga comunitate web.

Am găsit un articol interesant pe această temă, întitulat în felul următor:

Minimul absolut pe care  absolut orice dezvoltator de soft trebuie să-l cunoască în mod obligatoriu despre Unicode şi Seturile de caractere (fără scuze!)

de Joel Spolsky

Link: http://www.joelonsoftware.com/articles/Unicode.html

 

Încă un articol interesant la subiect: Character Sets / Character Encoding Issues

 Buzz    Distribuie   </> 02.07.2011
 
Primul site web din lume!
 

Asa arata primul site de internet. A fost lansat in 6 august 1991.

World Wide Web

The WorldWideWeb (W3) is a wide-area hypermedia information retrieval initiative aiming to give universal access to a large universe of documents.

Everything there is online about W3 is linked directly or indirectly to this document, including an executive summary of the project, Mailing lists , Policy , November's W3 news , Frequently Asked Questions .

What's out there?
Pointers to the world's online information, subjects , W3 servers, etc.
Help
on the browser you are using
Software Products
A list of W3 project components and their current state. (e.g. Line Mode ,X11 Viola , NeXTStep , Servers , Tools , Mail robot , Library )
Technical
Details of protocols, formats, program internals etc
Bibliography
Paper documentation on W3 and references.
People
A list of some people involved in the project.
History
A summary of the history of the project.
How can I help ?
If you would like to support the web..
Getting code
Getting the code by anonymous FTP , etc.

Sursa: http://www.w3.org/History/19921103-hypertext/hypertext/WWW/TheProject.html

 Buzz    Distribuie   </> 30.06.2011
 
Timpul necesar pentru diferite operaţii pe un PC obişnuit
  
execuţia unei intrucţiuni tipice 1/1,000,000,000 sec = 1 nanosec
citirea din memoria cache L1 0.5 nanosec
branch misprediction 5 nanosec
citirea din memoria cache L2 7 nanosec
Mutex lock/unlock 25 nanosec
citirea din memoria principală 100 nanosec
trimiterea a 2K octeţi prin reţea 1Gbps 20,000 nanosec
citirea secvenţială a 1MB din memorie 250,000 nanosec
citirea de pe o noua locaţie de disc (căutarea) 8,000,000 nanosec
citirea secvenţială a 1MB de p disc 20,000,000 nanosec
trimiterea unui pachet US spre Europe şi înapoi 150 milliseconds = 150,000,000 nanosec

Sursa: norvig.com

 Buzz    Distribuie   </> 24.06.2011
 
Culmea optimizării
   
  Culmea optimizării este să nu intelegi cum lucrează funcţia imediat după ce ai compus-o. (numaice am păţit-o )


 Buzz    Distribuie   </> 16.02.2011
 
($i = $j = 0;) sau ($i = 0; $j = 0;) ? - PHP5
  
Prin ce se deosebeşte în PHP5 expresia
        $i = 0;
        $j = 0;
de expresia
        $i = $j = 0; ?
Ca sens prin nimic, însă ca consum de memorie şi funcţionare internă a PHP sunt două expresii total diferite!
De ce?
În primul caz se crează două variabile de tip integer care consumă împreună 8 octeţi (pe un SO de 32 biţi), iar în al doilea caz se alocă spaţiu pentru un singur număr integer - 4 octeţi. Memoria pentru al doilea integer se alocă atunci când cel puţin una din variabile obţine altă valoare. Dacă valoare se obţine prin atribuire din altă variabilă ($j = $k;), atunci nu se alocă memorie, pentru că se foloseşte memoria alocată deja pentru variabila cu noua valoare.
 
Concluzie:
În rezultatul execuţiei codului
      for($i=0;$i<100000;$i++) $a[$i] = 0;
tabloul $a consuma mai multă memorie decât în cazul:
      $t = 0;
      for($i=0;$i<100000;$i++) $a[$i] = $t;
 
Deci deosebirea e esenţială!
 
 Încearcă singur:
<?php
    $mu1 = memory_get_usage();
    $a = array();      
    for($i=0;$i<100000;$i++) $a[$i] = 0;
    $mu2 = memory_get_usage();
    $a = array();      
    $t = 0;
    for($i=0;$i<100000;$i++) $a[$i] = $t;
    $mu3 = memory_get_usage();

echo 'mu1: '. ($mu2 - $mu1)/1024 . '<br />'; // pe SO de 32biti, 8Mo
echo 'mu2: '. ($mu3 - $mu1)/1024 . '<br />'; // pe SO de 32biti, 5Mo
echo 'diferenta: ' . ($mu2 - $mu3)/1024;     // pe SO de 32biti, diferenta e 3Mo
?>
 
 Buzz    Distribuie   </> 29.01.2011
 

[3] [2] [1] >>  

Informație despre site

Aici acumulez programe și algoritmi interesanti alcătuiți de mine (cu mici excepții) pe parcursul studierii unor limbaje de programare.

Cea mai mare parte din ele sunt realizate în Pascal. 

Nu am scopul creării unui curs specializat sau a descrierii detaliate a anumitor limbaje, ci doar prezint informații utile, plus ceva exemple interesante...

 

Răsfoitorul de fișiere (File Browser):

Codul sursă al programelor este organizat în mape și fișiere.

Paginile care conțin cod sursă de programe de regulă au un răsfoitor de fișiere în partea stangă a paginii reprezentat de un bloc cu titlul „File Browser”.

Pentru a vizualiza un program sau conținutul unei mape, faceți click pe numele fișierului / mapei. Dacă fișierul nu este textual, el se va descărca automat, iar dacă este textual, conținutul lui se va afișa într-un bloc pe centrul paginii.

Pentru a descărca un fișier, faceți click pe dimensiunea (size) lui.

arr_d Limba / Language
Loading Google Translate Element. . .


  Distribuie


Music


arr_r Login
arr_d Email

Temporar suspendat ;-(

arr_d Info vizite

free counters