Home

Awesome

Gitter

Airbnb JavaScript Guida allo Stile() {

Un approccio più o meno ragionevole a Javascript

Tavola dei contenuti

  1. Tipi
  2. Oggetti
  3. Arrays
  4. Stringhe
  5. Funzioni
  6. Proprietà
  7. Variabili
  8. Hoisting
  9. Operatori di Confronto ed Ugualianza
  10. Blocchi
  11. Commenti
  12. Spazi bianchi
  13. Virgole
  14. Punti e Virgole
  15. Conversioni di Tipo e Coercizione
  16. Convenzioni sui Nomi
  17. Accessors
  18. Costruttori
  19. Eventi
  20. Moduli
  21. jQuery
  22. Compatibilità ECMAScript 5
  23. Testing
  24. Performance
  25. Risorse
  26. In Piena Libertà
  27. Traduzioni
  28. Guida sulla Guida allo Stile di Javascript
  29. Chatta con Noi di Javascript
  30. Collaboratori
  31. Licensa

Tipi

⬆ torna in cima

Oggetti

⬆ torna in cima

Arrays

⬆ torna in cima

Stringhe

⬆ torna in cima

Funzioni

⬆ torna in cima

Proprietà

⬆ torna in cima

Variabili

⬆ torna in cima

Hoisting

⬆ torna in cima

Operatori di Confronto ed Ugualianza

⬆ torna in cima

Blocchi

⬆ torna in cima

Commenti


**[⬆ torna in cima](#tavola-dei-contenuti)**


## Spazi bianchi

- Usa una indentatura (tabbing) settata a 2 spazi.

  ```javascript
  // errato
  function() {
  ∙∙∙∙var name;
  }

  // errato
  function() {
  ∙var name;
  }

  // corretto
  function() {
  ∙∙var name;
  }
  ```

- Poni 1 spazio prima della graffa principale.

  ```javascript
  // errato
  function test(){
    console.log('test');
  }

  // corretto
  function test() {
    console.log('test');
  }

  // errato
  dog.set('attr',{
    age: '1 year',
    breed: 'Bernese Mountain Dog'
  });

  // corretto
  dog.set('attr', {
    age: '1 year',
    breed: 'Bernese Mountain Dog'
  });
  ```

- Poni 1 spazio prima della parentesi di apertura degli statement di controllo (`if`, `while` etc.). Non porre alcun spazio prima della lista degli argomenti nelle chiamate di funzioni e nelle dichiarazioni.

  ```javascript
  // errato
  if(isJedi) {
    fight ();
  }

  // corretto
  if (isJedi) {
    fight();
  }

  // errato
  function fight () {
    console.log ('Swooosh!');
  }

  // corretto
  function fight() {
    console.log('Swooosh!');
  }
  ```

- Separa gli operatori con spazi.

  ```javascript
  // errato
  var x=y+5;

  // corretto
  var x = y + 5;
  ```

- Finisci i file con un singolo carattere di nuova riga.

  ```javascript
  // errato
  (function(global) {
    // ...stuff...
  })(this);
  ```

  ```javascript
  // errato
  (function(global) {
    // ...stuff...
  })(this);↵
  ↵
  ```

  ```javascript
  // corretto
  (function(global) {
    // ...stuff...
  })(this);↵
  ```

- Usa l'indentatura quando devi fare lunghe catene di metodi. Usa un punto iniziale, il quale
enfatizza il fatto che la linea è una chiamata ad un metodo, e non un nuovo statement.

  ```javascript
  // errato
  $('#oggetti').find('.selected').highlight().end().find('.open').updateCount();

  // errato
  $('#oggetti').
    find('.selected').
      highlight().
      end().
    find('.open').
      updateCount();

  // corretto
  $('#oggetti')
    .find('.selected')
      .highlight()
      .end()
    .find('.open')
      .updateCount();

  // errato
  var leds = stage.selectAll('.led').data(data).enter().append('svg:svg').classed('led', true)
      .attr('width',  (radius + margin) * 2).append('svg:g')
      .attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')')
      .call(tron.led);

  // corretto
  var leds = stage.selectAll('.led')
      .data(data)
    .enter().append('svg:svg')
      .classed('led', true)
      .attr('width',  (radius + margin) * 2)
    .append('svg:g')
      .attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')')
      .call(tron.led);
  ```

- Lascia una riga vuota dopo blocchi e prima di un nuovo statement.

  ```javascript
  // errato
  if (foo) {
    return bar;
  }
  return baz;

  // corretto
  if (foo) {
    return bar;
  }

  return baz;

  // errato
  var obj = {
    foo: function() {
    },
    bar: function() {
    }
  };
  return obj;

  // corretto
  var obj = {
    foo: function() {
    },

    bar: function() {
    }
  };

  return obj;
  ```


**[⬆ torna in cima](#tavola-dei-contenuti)**

## Virgole

- Virgole principali: **No.**

  ```javascript
  // errato
  var story = [
      once
    , upon
    , aTime
  ];

  // corretto
  var story = [
    once,
    upon,
    aTime
  ];

  // errato
  var hero = {
      firstName: 'Bob'
    , lastName: 'Parr'
    , heroName: 'Mr. Incredible'
    , superPower: 'strength'
  };

  // corretto
  var hero = {
    firstName: 'Bob',
    lastName: 'Parr',
    heroName: 'Mr. Incredible',
    superPower: 'strength'
  };
  ```

- Virgole successive addizionali: **No.** Questo puo' causare problemi con IE6/7 e IE9 se è in modalita' stranezze. Inoltre, in alcune implementazioni di ES3 viene aggiunta lunghezza ad un array se ci sono virgole successive addizionali. Questo è stato chiarificato in ES5 ([source](http://es5.github.io/#D)):

> Edition 5 chiarifica il fatto che una virgola successiva in fondo ad un ArrayInitialiser non aggiunge nulla alla lunghezza dell'array. Questo non è un cambiamento semantico dalla Edition 3 ma alcune implementazioni passate hanno potenzialmente frainteso cio'

  ```javascript
  // errato
  var hero = {
    firstName: 'Kevin',
    lastName: 'Flynn',
  };

  var heroes = [
    'Batman',
    'Superman',
  ];

  // corretto
  var hero = {
    firstName: 'Kevin',
    lastName: 'Flynn'
  };

  var heroes = [
    'Batman',
    'Superman'
  ];
  ```

**[⬆ torna in cima](#tavola-dei-contenuti)**


## Punti e virgole

- **Già.**

  ```javascript
  // errato
  (function() {
    var name = 'Skywalker'
    return name
  })()

  // corretto
  (function() {
    var name = 'Skywalker';
    return name;
  })();

  // corretto (non permette alla funzione di diventare un argomento quando due file con IIFEs vengono concatenati)
  ;(function() {
    var name = 'Skywalker';
    return name;
  })();
  ```

  [Per saperne di più](http://stackoverflow.com/a/7365214/1712802).

**[⬆ torna in cima](#tavola-dei-contenuti)**


## Conversioni di Tipo e Coercizione

- Effettua la coercizione di tipo all'inizio di uno statement.
- Strings:

  ```javascript
  //  => this.reviewScore = 9;

  // errato
  var totalScore = this.reviewScore + '';

  // corretto
  var totalScore = '' + this.reviewScore;

  // errato
  var totalScore = '' + this.reviewScore + ' total score';

  // corretto
  var totalScore = this.reviewScore + ' total score';
  ```

- Usa `parseInt` per Numbers e sempre con una radice per la conversione di tipo.

  ```javascript
  var inputValue = '4';

  // errato
  var val = new Number(inputValue);

  // errato
  var val = +inputValue;

  // errato
  var val = inputValue >> 0;

  // errato
  var val = parseInt(inputValue);

  // corretto
  var val = Number(inputValue);

  // corretto
  var val = parseInt(inputValue, 10);
  ```

- Se per qualsiasi ragione stai facendo qualcosa di strano e `parseInt` è il tuo collo di bottiglia allora devi usare Bitshift per motivi di performance, lascia un commento spiegando come mai e cosa stai facendo.

  ```javascript
  // corretto
  /**
   * parseInt è la ragione per la quale il mio codice era lento.
   * Effettuando Bitshifting alla String per forzarla a diventare un
   * Number lo ha reso molto più veloce.
   */
  var val = inputValue >> 0;
  ```

- **Nota:** Fai attenzione quando usi operazioni di bitshift. I Numbers sono rappresentati come [valori da 64-bit](http://es5.github.io/#x4.3.19), ma le operazioni di Bitshift ritornano sempre un intero da 32-bit ([source](http://es5.github.io/#x11.7)). Il Bitshift puo' portare a comportamenti anomali per valori interi più grandi di 32-bit. [Discussion](https://github.com/airbnb/javascript/issues/109). L'intero con segno a più grande è 2,147,483,647:

  ```javascript
  2147483647 >> 0 //=> 2147483647
  2147483648 >> 0 //=> -2147483648
  2147483649 >> 0 //=> -2147483647
  ```

- Booleans:

  ```javascript
  var age = 0;

  // errato
  var hasAge = new Boolean(age);

  // corretto
  var hasAge = Boolean(age);

  // corretto
  var hasAge = !!age;
  ```

**[⬆ torna in cima](#tavola-dei-contenuti)**


## Convenzioni sui Nomi

- Evita nomi con una singola lettera. Sii descrittivo quando dai nomi.

  ```javascript
  // errato
  function q() {
    // ...stuff...
  }

  // corretto
  function query() {
    // ..stuff..
  }
  ```

- Usa la notazioneACammello (camelCase) quando dai nomi ad oggetti, funzioni ed istanze.

  ```javascript
  // errato
  var OBJEcttsssss = {};
  var this_is_my_object = {};
  function c() {}
  var u = new user({
    name: 'Bob Parr'
  });

  // corretto
  var thisIsMyObject = {};
  function thisIsMyFunction() {}
  var user = new User({
    name: 'Bob Parr'
  });
  ```

- Usa PascalCase quando dai nomi a costruttori o a classi.

  ```javascript
  // errato
  function user(options) {
    this.name = options.name;
  }

  var errato = new user({
    name: 'nope'
  });

  // corretto
  function User(options) {
    this.name = options.name;
  }

  var corretto = new User({
    name: 'yup'
  });
  ```

- Usa un underscore `_` principale quando dai nomi a proprietà private.

  ```javascript
  // errato
  this.__firstName__ = 'Panda';
  this.firstName_ = 'Panda';

  // corretto
  this._firstName = 'Panda';
  ```

- Quando salvi un riferimento a `this` usa `_this`.

  ```javascript
  // errato
  function() {
    var self = this;
    return function() {
      console.log(self);
    };
  }

  // errato
  function() {
    var that = this;
    return function() {
      console.log(that);
    };
  }

  // corretto
  function() {
    var _this = this;
    return function() {
      console.log(_this);
    };
  }
  ```

- Dai un nome alle tue funzioni. Questo è di aiuto per le stack traces.

  ```javascript
  // errato
  var log = function(msg) {
    console.log(msg);
  };

  // corretto
  var log = function log(msg) {
    console.log(msg);
  };
  ```
- **Nota:** Da IE8 in giù si manifestano stranezze con espressioni di funzioni a cui è stato dato un nome. vedi [http://kangax.github.io/nfe/](http://kangax.github.io/nfe/) per maggiori informazioni.

- Se il tuo file esporta una singola classe, il nome del file dovrebbe essere esattamente quello del nome della classe.

  ```javascript
  // file contents
  class CheckBox {
    // ...
  }
  module.exports = CheckBox;

  // in some other file
  // errato
  var CheckBox = require('./checkBox');

  // errato
  var CheckBox = require('./check_box');

  // corretto
  var CheckBox = require('./CheckBox');
  ```

**[⬆ torna in cima](#tavola-dei-contenuti)**


## Accessors

- Funzioni accessor per proprietà non sono richieste.
- Se usi funzioni accessor usa getVal() e setVal('hello').

  ```javascript
  // errato
  dragon.age();

  // corretto
  dragon.getAge();

  // errato
  dragon.age(25);

  // corretto
  dragon.setAge(25);
  ```

- Se la proprietà è un booleano, usa isVal() o hasVal().

  ```javascript
  // errato
  if (!dragon.age()) {
    return false;
  }

  // corretto
  if (!dragon.hasAge()) {
    return false;
  }
  ```

- Va bene creare funzioni get() e set(), ma sii consistente.

  ```javascript
  function Jedi(options) {
    options || (options = {});
    var lightsaber = options.lightsaber || 'blue';
    this.set('lightsaber', lightsaber);
  }

  Jedi.prototype.set = function(key, val) {
    this[key] = val;
  };

  Jedi.prototype.get = function(key) {
    return this[key];
  };
  ```

**[⬆ torna in cima](#tavola-dei-contenuti)**


## Costruttori

- Assegna metodi all'oggetto prototype, invece di sovrascrivere il prototipo con un nuovo oggetto. Sovrascrivere il prototipo rende l'ereditarietà
impossibile: resettando il prototipo sovrascriverai la base!

  ```javascript
  function Jedi() {
    console.log('new jedi');
  }

  // errato
  Jedi.prototype = {
    fight: function fight() {
      console.log('fighting');
    },

    block: function block() {
      console.log('blocking');
    }
  };

  // corretto
  Jedi.prototype.fight = function fight() {
    console.log('fighting');
  };

  Jedi.prototype.block = function block() {
    console.log('blocking');
  };
  ```

- Metodi possono ritornare `this` per aiutare il concatenamento di metodi.

  ```javascript
  // errato
  Jedi.prototype.jump = function() {
    this.jumping = true;
    return true;
  };

  Jedi.prototype.setHeight = function(height) {
    this.height = height;
  };

  var luke = new Jedi();
  luke.jump(); // => true
  luke.setHeight(20); // => undefined

  // corretto
  Jedi.prototype.jump = function() {
    this.jumping = true;
    return this;
  };

  Jedi.prototype.setHeight = function(height) {
    this.height = height;
    return this;
  };

  var luke = new Jedi();

  luke.jump()
    .setHeight(20);
  ```


- Va bene scrivere un metodo toString() personalizzato, basta essere sicuri che funzioni correttamente e che non causi effetti indesiderati.

  ```javascript
  function Jedi(options) {
    options || (options = {});
    this.name = options.name || 'no name';
  }

  Jedi.prototype.getName = function getName() {
    return this.name;
  };

  Jedi.prototype.toString = function toString() {
    return 'Jedi - ' + this.getName();
  };
  ```

**[⬆ torna in cima](#tavola-dei-contenuti)**


## Eventi

- Quando alleghi data payloads ad eveti (non importa se eventi DOM o qualcosa di più prorietario come eventi Backbone), passa un hash invece di una valore semplice. Questo permette ad un collaboratore futuro di aggiungere più data al payload dell'evento senza trovare ed aggiornare ogni handler per l'evento. Ad esempio, invece di

  ```js
  // errato
  $(this).trigger('listingUpdated', listing.id);

  ...

  $(this).on('listingUpdated', function(e, listingId) {
    // do something with listingId
  });
  ```

  prefer:

  ```js
  // corretto
  $(this).trigger('listingUpdated', { listingId : listing.id });

  ...

  $(this).on('listingUpdated', function(e, data) {
    // do something with data.listingId
  });
  ```

**[⬆ torna in cima](#tavola-dei-contenuti)**


## Moduli

-Il modulo dovrebbe iniziare con un `!`. Questo assicura che se un modulo malformato dimentica di includere un punto e virgola finale allora non ci sono errori di produzione quando gli script vengono concatenati. [Spiegazione](https://github.com/airbnb/javascript/issues/44#issuecomment-13063933)
- Il file deve essere nominato concamelCase, essere in una cartella con lo stesso nome, and match the name of the single export.
- Aggiungi un metodo chiamato `noConflict()` che setta il modulo esportato alla versione precedente e ritorna quello in questione.
- Dichiara sempre `'use strict';` in cima al modulo.

  ```javascript
  // fancyInput/fancyInput.js

  !function(global) {
    'use strict';

    var previousFancyInput = global.FancyInput;

    function FancyInput(options) {
      this.options = options || {};
    }

    FancyInput.noConflict = function noConflict() {
      global.FancyInput = previousFancyInput;
      return FancyInput;
    };

    global.FancyInput = FancyInput;
  }(this);
  ```

**[⬆ torna in cima](#tavola-dei-contenuti)**


## jQuery

- Anteponi le variabili di oggetti jQuery con `$`.

  ```javascript
  // errato
  var sidebar = $('.sidebar');

  // corretto
  var $sidebar = $('.sidebar');
  ```

- Cache jQuery lookups.

  ```javascript
  // errato
  function setSidebar() {
    $('.sidebar').hide();

    // ...codice...

    $('.sidebar').css({
      'background-color': 'pink'
    });
  }

  // corretto
  function setSidebar() {
    var $sidebar = $('.sidebar');
    $sidebar.hide();

    // ...codice...

    $sidebar.css({
      'background-color': 'pink'
    });
  }
  ```

- Per query del DOM usa a cascata `$('.sidebar ul')` o parent > child `$('.sidebar > ul')`.
- Usa `find` con scoped query di oggetti jQuery.

  ```javascript
  // errato
  $('ul', '.sidebar').hide();

  // errato
  $('.sidebar').find('ul').hide();

  // corretto
  $('.sidebar ul').hide();

  // corretto
  $('.sidebar > ul').hide();

  // corretto
  $sidebar.find('ul').hide();
  ```

**[⬆ torna in cima](#tavola-dei-contenuti)**


## Compatibilità ECMAScript 5

- Fai riferimento a ES5 [tavola delle compatibilità](http://kangax.github.com/es5-compat-table/) di [Kangax](https://twitter.com/kangax/).

**[⬆ torna in cima](#tavola-dei-contenuti)**


## Testing

- **Già.**

  ```javascript
  function() {
    return true;
  }
  ```

**[⬆ torna in cima](#tavola-dei-contenuti)**


## Performance

- [On Layout & Web Performance](http://kellegous.com/j/2013/01/26/layout-performance/)
- Caricamento...

**[⬆ torna in cima](#tavola-dei-contenuti)**


## Risorse


**Leggi Questo**

- [Annotated ECMAScript 5.1](http://es5.github.com/)

**Strumenti**

- Code Style Linters
  + [JSHint](http://www.jshint.com/) - [Airbnb Style .jshintrc](https://github.com/airbnb/javascript/blob/master/linters/jshintrc)
  + [JSCS](https://github.com/jscs-dev/node-jscs) - [Airbnb Style Preset](https://github.com/jscs-dev/node-jscs/blob/master/presets/airbnb.json)

**Altre Guide allo Stile**

- [jQuery Core Style Guidelines](http://docs.jquery.com/JQuery_Core_Style_Guidelines)
- [Principles of Writing Consistent, Idiomatic JavaScript](https://github.com/rwldrn/idiomatic.js/)
- [JavaScript Standard Style](https://github.com/feross/standard)

**Altri Stili**

- [Naming this in nested functions](https://gist.github.com/4135065) - Christian Johansen
- [Conditional Callbacks](https://github.com/airbnb/javascript/issues/52) - Ross Allen
- [Popular JavaScript Coding Conventions on Github](http://sideeffect.kr/popularconvention/#javascript) - JeongHoon Byun
- [Multiple var statements in JavaScript, not superfluous](http://benalman.com/news/2012/05/multiple-var-statements-javascript/) - Ben Alman

**Letture Ulteriori**

- [Understanding JavaScript Closures](http://javascriptweblog.wordpress.com/2010/10/25/understanding-javascript-closures/) - Angus Croll
- [Basic JavaScript for the impatient programmer](http://www.2ality.com/2013/06/basic-javascript.html) - Dr. Axel Rauschmayer
- [You Might Not Need jQuery](http://youmightnotneedjquery.com/) - Zack Bloom & Adam Schwartz
- [ES6 Features](https://github.com/lukehoban/es6features) - Luke Hoban
- [Frontend Guidelines](https://github.com/bendc/frontend-guidelines) - Benjamin De Cock

**Libri**

- [JavaScript: The Good Parts](http://www.amazon.com/JavaScript-corretto-Parts-Douglas-Crockford/dp/0596517742) - Douglas Crockford
- [JavaScript Patterns](http://www.amazon.com/JavaScript-Patterns-Stoyan-Stefanov/dp/0596806752) - Stoyan Stefanov
- [Pro JavaScript Design Patterns](http://www.amazon.com/JavaScript-Design-Patterns-Recipes-Problem-Solution/dp/159059908X)  - Ross Harmes and Dustin Diaz
- [High Performance Web Sites: Essential Knowledge for Front-End Engineers](http://www.amazon.com/High-Performance-Web-Sites-Essential/dp/0596529309) - Steve Souders
- [Maintainable JavaScript](http://www.amazon.com/Maintainable-JavaScript-Nicholas-C-Zakas/dp/1449327680) - Nicholas C. Zakas
- [JavaScript Web Applications](http://www.amazon.com/JavaScript-Web-Applications-Alex-MacCaw/dp/144930351X) - Alex MacCaw
- [Pro JavaScript Techniques](http://www.amazon.com/Pro-JavaScript-Techniques-John-Resig/dp/1590597273) - John Resig
- [Smashing Node.js: JavaScript Everywhere](http://www.amazon.com/Smashing-Node-js-JavaScript-Everywhere-Magazine/dp/1119962595) - Guillermo Rauch
- [Secrets of the JavaScript Ninja](http://www.amazon.com/Secrets-JavaScript-Ninja-John-Resig/dp/193398869X) - John Resig and Bear Bibeault
- [Human JavaScript](http://humanjavascript.com/) - Henrik Joreteg
- [Superhero.js](http://superherojs.com/) - Kim Joar Bekkelund, Mads Mobæk, & Olav Bjorkoy
- [JSBooks](http://jsbooks.revolunet.com/) - Julien Bouquillon
- [Third Party JavaScript](http://manning.com/vinegar/) - Ben Vinegar and Anton Kovalyov
- [Effective JavaScript: 68 Specific Ways to Harness the Power of JavaScript](http://amzn.com/0321812182) - David Herman
- [Eloquent JavaScript](http://eloquentjavascript.net) - Marijn Haverbeke
- [You Don't Know JS](https://github.com/getify/You-Dont-Know-JS) - Kyle Simpson

**Blog**

- [DailyJS](http://dailyjs.com/)
- [JavaScript Weekly](http://javascriptweekly.com/)
- [JavaScript, JavaScript...](http://javascriptweblog.wordpress.com/)
- [Bocoup Weblog](http://weblog.bocoup.com/)
- [Adequately corretto](http://www.adequatelycorretto.com/)
- [NCZOnline](http://www.nczonline.net/)
- [Perfection Kills](http://perfectionkills.com/)
- [Ben Alman](http://benalman.com/)
- [Dmitry Baranovskiy](http://dmitry.baranovskiy.com/)
- [Dustin Diaz](http://dustindiaz.com/)
- [nettuts](http://net.tutsplus.com/?s=javascript)

**Podcast**

- [JavaScript Jabber](http://devchat.tv/js-jabber/)


**[⬆ torna in cima](#tavola-dei-contenuti)**

## In Piena Libertà

Questa è una lista di organizzazioni che fanno uso di questa guida allo stile. Mandaci una pull request o apri una issue e ti aggiungeremo alla lista.

- **Aan Zee**: [AanZee/javascript](https://github.com/AanZee/javascript)
- **Adult Swim**: [adult-swim/javascript](https://github.com/adult-swim/javascript)
- **Airbnb**: [airbnb/javascript](https://github.com/airbnb/javascript)
- **American Insitutes for Research**: [AIRAST/javascript](https://github.com/AIRAST/javascript)
- **Apartmint**: [apartmint/javascript](https://github.com/apartmint/javascript)
- **Avalara**: [avalara/javascript](https://github.com/avalara/javascript)
- **Compass Learning**: [compasslearning/javascript-style-guide](https://github.com/compasslearning/javascript-style-guide)
- **DailyMotion**: [dailymotion/javascript](https://github.com/dailymotion/javascript)
- **Digitpaint** [digitpaint/javascript](https://github.com/digitpaint/javascript)
- **Evernote**: [evernote/javascript-style-guide](https://github.com/evernote/javascript-style-guide)
- **ExactTarget**: [ExactTarget/javascript](https://github.com/ExactTarget/javascript)
- **Gawker Media**: [gawkermedia/javascript](https://github.com/gawkermedia/javascript)
- **GeneralElectric**: [GeneralElectric/javascript](https://github.com/GeneralElectric/javascript)
- **correttoData**: [correttodata/gdc-js-style](https://github.com/correttodata/gdc-js-style)
- **Grooveshark**: [grooveshark/javascript](https://github.com/grooveshark/javascript)
- **How About We**: [howaboutwe/javascript](https://github.com/howaboutwe/javascript)
- **InfoJobs**: [InfoJobs/JavaScript-Style-Guide](https://github.com/InfoJobs/JavaScript-Style-Guide)
- **Intent Media**: [intentmedia/javascript](https://github.com/intentmedia/javascript)
- **Jam3**: [Jam3/Javascript-Code-Conventions](https://github.com/Jam3/Javascript-Code-Conventions)
- **Kinetica Solutions**: [kinetica/javascript](https://github.com/kinetica/javascript)
- **Mighty Spring**: [mightyspring/javascript](https://github.com/mightyspring/javascript)
- **MinnPost**: [MinnPost/javascript](https://github.com/MinnPost/javascript)
- **ModCloth**: [modcloth/javascript](https://github.com/modcloth/javascript)
- **Money Advice Service**: [moneyadviceservice/javascript](https://github.com/moneyadviceservice/javascript)
- **Muber**: [muber/javascript](https://github.com/muber/javascript)
- **National Geographic**: [natgeo/javascript](https://github.com/natgeo/javascript)
- **National Park Service**: [nationalparkservice/javascript](https://github.com/nationalparkservice/javascript)
- **Nimbl3**: [nimbl3/javascript](https://github.com/nimbl3/javascript)
- **Nordic Venture Family**: [CodeDistillery/javascript](https://github.com/CodeDistillery/javascript)
- **Orion Health**: [orionhealth/javascript](https://github.com/orionhealth/javascript)
- **Peerby**: [Peerby/javascript](https://github.com/Peerby/javascript)
- **Razorfish**: [razorfish/javascript-style-guide](https://github.com/razorfish/javascript-style-guide)
- **reddit**: [reddit/styleguide/javascript](https://github.com/reddit/styleguide/tree/master/javascript)
- **REI**: [reidev/js-style-guide](https://github.com/reidev/js-style-guide)
- **Ripple**: [ripple/javascript-style-guide](https://github.com/ripple/javascript-style-guide)
- **SeekingAlpha**: [seekingalpha/javascript-style-guide](https://github.com/seekingalpha/javascript-style-guide)
- **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)
- **StudentSphere**: [studentsphere/javascript](https://github.com/studentsphere/javascript)
- **Target**: [target/javascript](https://github.com/target/javascript)
- **TheLadders**: [TheLadders/javascript](https://github.com/TheLadders/javascript)
- **T4R Technology**: [T4R-Technology/javascript](https://github.com/T4R-Technology/javascript)
- **Userify**: [userify/javascript](https://github.com/userify/javascript)
- **VoxFeed**: [VoxFeed/javascript-style-guide](https://github.com/VoxFeed/javascript-style-guide)
- **Weggo**: [Weggo/javascript](https://github.com/Weggo/javascript)
- **Zillow**: [zillow/javascript](https://github.com/zillow/javascript)
- **ZocDoc**: [ZocDoc/javascript](https://github.com/ZocDoc/javascript)

## Traduzioni

Questa guida allo stile è disponibile anche in altre lingue:

- ![br](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Brazil.png) **Portoghese Braziliano**: [armoucar/javascript-style-guide](https://github.com/armoucar/javascript-style-guide)
- ![bg](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Bulgaria.png) **Bulgaro**: [borislavvv/javascript](https://github.com/borislavvv/javascript)
- ![ca](https://raw.githubusercontent.com/fpmweb/javascript-style-guide/master/img/catala.png) **Catalano**: [fpmweb/javascript-style-guide](https://github.com/fpmweb/javascript-style-guide)
- ![tw](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Taiwan.png) **Cinese(Tradizionale)**: [jigsawye/javascript](https://github.com/jigsawye/javascript)
- ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Cinese(Semplificato)**: [adamlu/javascript-style-guide](https://github.com/adamlu/javascript-style-guide)
- ![fr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/France.png) **Francese**: [nmussy/javascript-style-guide](https://github.com/nmussy/javascript-style-guide)
- ![de](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Germany.png) **Tedesco**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)
- ![it](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Italy.png) **Italiano**: [sinkswim/javascript-style-guide](https://github.com/sinkswim/javascript-style-guide)
- ![jp](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Japan.png) **Giapponese**: [mitsuruog/javacript-style-guide](https://github.com/mitsuruog/javacript-style-guide)
- ![kr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/South-Korea.png) **Coreano**: [tipjs/javascript-style-guide](https://github.com/tipjs/javascript-style-guide)
- ![pl](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Poland.png) **Polacco**: [mjurczyk/javascript](https://github.com/mjurczyk/javascript)
- ![ru](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Russia.png) **Russo**: [uprock/javascript](https://github.com/uprock/javascript)
- ![es](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Spain.png) **Spagnolo**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide)
- ![th](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Thailand.png) **Tailandese**: [lvarayut/javascript-style-guide](https://github.com/lvarayut/javascript-style-guide)

## Guida sulla Guida allo Stile di Javascript

- [Riferimento](https://github.com/airbnb/javascript/wiki/The-JavaScript-Style-Guide-Guide)

## Chatta con noi di Javascript

- Trovaci su [gitter](https://gitter.im/airbnb/javascript).

## Collaboratori

- [Visualizza i collaboratori](https://github.com/airbnb/javascript/graphs/contributors)


## Licensa

(The MIT License)

Copyright (c) 2014 Airbnb

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

**[⬆ torna in cima](#tavola-dei-contenuti)**

# };