序 大部分針對Javascript最合理的方法歸納。 類型 • 原始類型:我們可以直接使用值。 ο string ο number ο boolean ο null ο undefined
var foo = 1, bar = foo;bar = 9;console.log(foo, bar); // => 1, 9
• 複合類型:我們通過`引用`對值進行間接訪問。
ο object
ο array
ο function
var foo = [1, 2], bar = foo;bar[0] = 9;console.log(foo[0], bar[0]); // => 9, 9
Objects • 使用{}建立對象。
// badvar item = new Object();// goodvar item = {};
• 不要使用保留字作為關鍵字。
// badvar superman = { class: 'superhero', default: { clark: 'kent' }, private: true};// goodvar superman = { klass: 'superhero', defaults: { clark: 'kent' }, hidden: true};
Arrays
• 使用[]建立數組
// badvar items = new Array();// goodvar items = [];
• 如果你不知道數組長度,使用Array#push。
var someStack = [];// badsomeStack[someStack.length] = 'abracadabra';// goodsomeStack.push('abracadabra');
• 當你需要複製數組的時候,請使用Array#slice。
var len = items.length, itemsCopy = [], i;// badfor (i = 0; i < len; i++) { itemsCopy[i] = items[i];}// gooditemsCopy = items.slice();
Strings
• 對於字串,我們使用單引號''。
// badvar name = "Bob Parr";// goodvar name = 'Bob Parr';// badvar fullName = "Bob " + this.lastName;// goodvar fullName = 'Bob ' + this.lastName;
• 超過80個字元的字串,我們使用串聯符號(\),讓字串多行顯示。
• 注意:如果過度使用帶串聯符號的字元可能會影響到效能。
// badvar errorMessage = 'This is a super long error that was thrown because of Batman. When you stop to think about how Batman had anything to do with this, you would get nowhere fast.';// badvar errorMessage = 'This is a super long error that \was thrown because of Batman. \When you stop to think about \how Batman had anything to do \with this, you would get nowhere \fast.';// goodvar errorMessage = 'This is a super long error that ' + 'was thrown because of Batman.' + 'When you stop to think about ' + 'how Batman had anything to do ' + 'with this, you would get nowhere ' + 'fast.';
• 當我們在編程的時候,需要拼接出一個字串,我們可以使用Array#join 代替字串串連。尤其是對IE瀏覽器。
var items, messages, length, i;messages = [{ state: 'success', message: 'This one worked.'},{ state: 'success', message: 'This one worked as well.'},{ state: 'error', message: 'This one did not work.'}];length = messages.length;// badfunction inbox(messages) { items = '<ul>'; for (i = 0; i < length; i++) { items += '<li>' + messages[i].message + '</li>'; } return items + '</ul>';}// goodfunction inbox(messages) { items = []; for (i = 0; i < length; i++) { items[i] = messages[i].message; } return '<ul><li>' + items.join('</li><li>') + '</li></ul>';}
Functions
• 函數運算式
// anonymous function expressionvar anonymous = function() { return true;};// named function expressionvar named = function named() { return true;};// immediately-invoked function expression (IIFE)(function() { console.log('Welcome to the Internet. Please follow me.');})();
• 絕對不要在非函數塊(if,while)申明一個函數。我們可以把函數申明變成一個函數運算式。
// badif (currentUser) { function test() { console.log('Nope.'); }}// goodif (currentUser) { var test = function test() { console.log('Yup.'); };}
• 絕對不要把一個參數命名為arguments,arguments參數是函數範圍內給出的一個特殊變數,如果你把參數命名為arguments,那麼這個參數就會覆蓋它原有的特殊變數。
// badfunction nope(name, options, arguments) { // ...stuff...}// goodfunction yup(name, options, args) { // ...stuff...}
總結 這些很多是大家都比較清楚的,平時經常用,我只是強調一下,讓大家再複習一下。 下一篇:Javascript 風格嚮導(續)
推薦