{"id":1533,"date":"2014-12-23T13:15:36","date_gmt":"2014-12-23T11:15:36","guid":{"rendered":"http:\/\/www.webcodegeeks.com\/?p=1533"},"modified":"2015-03-25T15:21:33","modified_gmt":"2015-03-25T13:21:33","slug":"an-introductory-analysis-of-coffeescript","status":"publish","type":"post","link":"https:\/\/www.webcodegeeks.com\/web-development\/an-introductory-analysis-of-coffeescript\/","title":{"rendered":"An Introductory Analysis of CoffeeScript"},"content":{"rendered":"<p>For the last six months, I have been working a project that exclusively uses CoffeeScript for both the front end and back end. That being said, I have had a lot of CoffeeScript on my mind lately! This blog post will examine some of the pros and cons related to features of CoffeeScript and, hopefully, provide insight into whether CoffeeScript might be the right language for your next project.<\/p>\n<p>If you are completely new to CoffeeScript, I encourage you to head over to its site (<a href=\"http:\/\/coffeescript.org\/\" target=\"_blank\">http:\/\/coffeescript.org\/<\/a>) and look through some of the documentation.<\/p>\n<p>The first stable version of CoffeeScript was released to the public in December 2010 by Jeremy Ashkenas (creator of Backbone.js, and Underscore.js). The compiler, which was originally written in Ruby, was replaced by an actual CoffeeScript version which can be run in a JS environment.<\/p>\n<p>The purpose of this new language was to allow the user to escape many of the disadvantages and \u201cbad parts\u201d of JavaScript. On first inspection, you might notice a syntax reminiscent of Ruby or C. This was by design! Coders who dislike the Ruby syntax might have similar feelings toward CoffeeScript, as well.<\/p>\n<h2>The Good<\/h2>\n<p>CoffeeScript is more human-readable code. I can\u2019t speak for other people, but when I read code, I subconsciously convert it into a verbally-readable structure. So for example, when I see code like this:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nif (!(field &amp;&amp; (value || oldValue))) {\r\n    return null;\r\n}\r\n<\/pre>\n<p>This would translate to English like this: \u201cIf not field and either value or old value then return null.\u201d<\/p>\n<p>Now look at the CoffeeScript version of the above code:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">return null unless field and (value or oldValue)<\/pre>\n<p>It\u2019s almost the exact English translation of the above JavaScript snippet. By removing a lot of the code syntax and making it more human readable, CoffeeScript eliminates the time it takes to translate it in our minds.<\/p>\n<p>CoffeeScript also allows you to write more code in less time. A general rule of thumb is that writing CoffeeScript lets you reduce the number of lines of code by about \u2153. This, of course, is subjective to the person writing the code, but it seems to be about the average in my experience.<\/p>\n<p>As an example, take a look at the following code snippet:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">var contact, item, _i, _len, _ref;\r\n_ref = this.lead.contacts;\r\nfor (_i = 0, _len = _ref.length; _i &lt; _len; _i++) {\r\n  item = _ref&#x5B;_i];\r\n  if (item.emails.some((function(_this) {\r\n    return function(e) {\r\n      return e.email === _this.account.username;\r\n    };\r\n  })(this))) {\r\n    contact = item\r\n  }\r\n}<\/pre>\n<p>This is fairly straightforward code. I am looping through a collection and testing if the collection item (which is an array) contains an item that is equal to the account username. If it is, then we assign it to the variable contact.<\/p>\n<p>Now, how does CoffeeScript make this easier for us?<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">contact = item for item in @lead.contacts when item.emails.some (e) =&gt; e.email is @account.username<\/pre>\n<p>That\u2019s a lot fewer lines of code and much more readable!<\/p>\n<p>For an interactive demonstration of how CoffeeScript can dramatically reduce the amount of code, you need to see this link: <a href=\"http:\/\/ryanflorence.com\/2012\/javascript-coffeescript-rewrite\/\" target=\"_blank\">http:\/\/ryanflorence.com\/2012\/javascript-coffeescript-rewrite\/<\/a>.<\/p>\n<p>CoffeeScript also makes context binding much simpler. Look at the following code snippet:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">saveData: function(datum) {\r\n      return $.ajax({\r\n        url: 'exampleURL'\r\n        type: 'POST',\r\n        data: {\r\n          data: data\r\n        },\r\n        dataType: 'json'\r\n      }).done((function(_this) {\r\n        return function(result) {\r\n          _this.doSomething()\r\n          return app.doSomethingElse().then(function() {\r\n            return _this.done()\r\n          });\r\n        };\r\n      })(this)).fail((function(_this) {\r\n        return function(xhr) {\r\n          return showError('Failed!', 'Problem Saving data!\u201d);\r\n        };\r\n      })(this));\r\n    },<\/pre>\n<p>In the above example, we are making an AJAX call, then passing around a chain of callbacks, each of which need to be bound to the appropriate scope. This reference can easily be tracked in CoffeeScript by declaring functions using \u201c=&gt;\u201d.<\/p>\n<p>The previous code would become the following in CoffeeScript:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">saveData: (datum) -&gt;\r\n    $.ajax\r\n      url: 'exampleURL'\r\n      type: 'POST'\r\n      data: {data: data}\r\n      dataType: 'json'\r\n    .done (result) =&gt;\r\n      @doSomething()\r\n      app.doSomethingElse().then =&gt; @done()\r\n    .fail (xhr) =&gt;\r\n      showError \u201cFailed!\u201d, \u201cProblem Saving data!\u201d<\/pre>\n<p>Lastly, CoffeeScript provides an abstraction for JavaScript classes.<\/p>\n<p>Javascript is a prototypal and classless language, which allows the use to build their own inheritance class system manually. However, this has traditionally been difficult and confusing to do, especially for new Javascript programmers who aren\u2019t familiar with the Javascript prototype.<\/p>\n<p>Take the following example, which is one way to implement an arbitrary Car class in JavaScript:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">(function() {\r\n  var Car;\r\n  Car = (function() {\r\n    function Car(year, make, model) {\r\n      this.year = year;\r\n      this.make = make;\r\n      this.model = model;\r\n    }\r\n\r\n    return Car;\r\n  })();\r\n}).call(this);<\/pre>\n<p>Using \u201cNew Car\u201d will return a new object with the year, make, and model properties. The function Car acts as a constructor that gets called when the new keyword is used.<\/p>\n<p>Say we want to add some class methods, how does this look now?<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">(function() {\r\n  var Car,\r\n    __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };\r\n\r\n  Car = (function() {\r\n    function Car(year, make, model) {\r\n      this.drive = __bind(this.drive, this);\r\n      this.honk = __bind(this.honk, this);\r\n      this.logDetails = __bind(this.logDetails, this);\r\n      this.year = year;\r\n      this.make = make;\r\n      this.model = model;\r\n    }\r\n\r\n    Car.prototype.logDetails = function() {\r\n      return console.log('1991', 'Honda', 'Accord');\r\n    };\r\n\r\n    Car.prototype.honk = function() {};\r\n\r\n    Car.prototype.drive = function() {};\r\n\r\n    return Car;\r\n\r\n  })();\r\n\r\n}).call(this);<\/pre>\n<p>I\u2019ve added 3 methods, \u201clogDetails\u201d, \u201cHonk\u201d, and \u201cDrive\u201d. To do this, I have to bind the Car scope to the methods in the constructor, and then declare the method prototype. You can see how this will get messy with bigger classes! Fortunately, CoffeeScript recognizes these issues and creates a beautiful abstraction over the class system using the native JavaScript prototype.<\/p>\n<p>Using CoffeeScript, the above code will simply turn into this:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">class Car\r\n  constructor: (year, make, model) -&gt;\r\n    @year = year\r\n    @make = make\r\n    @model = model\r\n\r\n  logDetails : =&gt;\r\n    console.log '1991', 'Honda', 'Accord'\r\n\r\n  honk : =&gt;\r\n    # Implementation details here\r\n  drive : =&gt;\r\n    # Implementation details here<\/pre>\n<h2>The Not So Good<\/h2>\n<p>CoffeeScript also has its fair share of critics, and there are some strong arguments to be made for using native JavaScript over CoffeeScript.<\/p>\n<p>First, CoffeeScript adds a compiling element. Initially, this might annoy a lot of JavaScript developers (it certainly annoyed me at first). The beauty of JavaScript is its simplicity, and when you add an extra complex element like compiling, this aspect is lost.<\/p>\n<p>Debugging is a pain! This article by Ryan Florence, <a href=\"http:\/\/ryanflorence.com\/2011\/case-against-coffeescript\/\" target=\"_blank\">http:\/\/ryanflorence.com\/2011\/case-against-coffeescript\/<\/a>, outlines the difficulties introduced by debugging when you use CoffeeScript. The general idea is this: CoffeeScript typically compiles into a mesh of not very readable JavaScript. So during debugging, you have additional time introduced in order to understand the compiled code, then translate that into CoffeeScript, and then finally, recompile and retest.<\/p>\n<p>CoffeeScript has disadvantages, as well. Although it was written in order to eliminate poorly written JavaScript, things such as tab and white-space sensitivity make it easy to write bugs and other things into CoffeeScript.<\/p>\n<h2>Conclusion<\/h2>\n<p>In the end, deciding whether to use CoffeeScript is essentially a choice of preference for the developer. While many developers see the advantages, others do not. After reading this, hopefully you will have a clearer view of what CoffeeScript can offer you.<\/p>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td><span class=\"reference\">Reference: <\/span><\/td>\n<td><a href=\"http:\/\/keyholesoftware.com\/2014\/10\/27\/analysis-of-coffeescript\/\">An Introductory Analysis of CoffeeScript<\/a> from our <a href=\"http:\/\/www.webcodegeeks.com\/wcg\/\">WCG partner<\/a> Keyhole Software at the <a href=\"http:\/\/keyholesoftware.com\/\">Keyhole Software<\/a> blog.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>For the last six months, I have been working a project that exclusively uses CoffeeScript for both the front end and back end. That being said, I have had a lot of CoffeeScript on my mind lately! This blog post will examine some of the pros and cons related to features of CoffeeScript and, hopefully, &hellip;<\/p>\n","protected":false},"author":22,"featured_media":927,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-1533","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-web-development"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>An Introductory Analysis of CoffeeScript - Web Code Geeks - 2026<\/title>\n<meta name=\"description\" content=\"For the last six months, I have been working a project that exclusively uses CoffeeScript for both the front end and back end. That being said, I have had\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.webcodegeeks.com\/web-development\/an-introductory-analysis-of-coffeescript\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"An Introductory Analysis of CoffeeScript - Web Code Geeks - 2026\" \/>\n<meta property=\"og:description\" content=\"For the last six months, I have been working a project that exclusively uses CoffeeScript for both the front end and back end. That being said, I have had\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.webcodegeeks.com\/web-development\/an-introductory-analysis-of-coffeescript\/\" \/>\n<meta property=\"og:site_name\" content=\"Web Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/webcodegeeks\" \/>\n<meta property=\"article:author\" content=\"http:\/\/facebook.com\/keyholesoftware\" \/>\n<meta property=\"article:published_time\" content=\"2014-12-23T11:15:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2015-03-25T13:21:33+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/web-dev-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Keyhole Software\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@http:\/\/twitter.com\/keyholesoftware\" \/>\n<meta name=\"twitter:site\" content=\"@webcodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Keyhole Software\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/an-introductory-analysis-of-coffeescript\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/an-introductory-analysis-of-coffeescript\/\"},\"author\":{\"name\":\"Keyhole Software\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/10701460d97ebefdaf658a4f4535fff2\"},\"headline\":\"An Introductory Analysis of CoffeeScript\",\"datePublished\":\"2014-12-23T11:15:36+00:00\",\"dateModified\":\"2015-03-25T13:21:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/an-introductory-analysis-of-coffeescript\/\"},\"wordCount\":1213,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/an-introductory-analysis-of-coffeescript\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/web-dev-logo.jpg\",\"articleSection\":[\"Web Dev\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.webcodegeeks.com\/web-development\/an-introductory-analysis-of-coffeescript\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/an-introductory-analysis-of-coffeescript\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/web-development\/an-introductory-analysis-of-coffeescript\/\",\"name\":\"An Introductory Analysis of CoffeeScript - Web Code Geeks - 2026\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/an-introductory-analysis-of-coffeescript\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/an-introductory-analysis-of-coffeescript\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/web-dev-logo.jpg\",\"datePublished\":\"2014-12-23T11:15:36+00:00\",\"dateModified\":\"2015-03-25T13:21:33+00:00\",\"description\":\"For the last six months, I have been working a project that exclusively uses CoffeeScript for both the front end and back end. That being said, I have had\",\"breadcrumb\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/an-introductory-analysis-of-coffeescript\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.webcodegeeks.com\/web-development\/an-introductory-analysis-of-coffeescript\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/an-introductory-analysis-of-coffeescript\/#primaryimage\",\"url\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/web-dev-logo.jpg\",\"contentUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/web-dev-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/an-introductory-analysis-of-coffeescript\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.webcodegeeks.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Web Dev\",\"item\":\"https:\/\/www.webcodegeeks.com\/category\/web-development\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"An Introductory Analysis of CoffeeScript\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\",\"url\":\"https:\/\/www.webcodegeeks.com\/\",\"name\":\"Web Code Geeks\",\"description\":\"Web Developers Resource Center\",\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.webcodegeeks.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\/\/www.webcodegeeks.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"contentUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/webcodegeeks\",\"https:\/\/x.com\/webcodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/10701460d97ebefdaf658a4f4535fff2\",\"name\":\"Keyhole Software\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/68be341bef51b95ced09befd6a7e0ca930461d95f3a64285e03e7925b8f5de47?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/68be341bef51b95ced09befd6a7e0ca930461d95f3a64285e03e7925b8f5de47?s=96&d=mm&r=g\",\"caption\":\"Keyhole Software\"},\"description\":\"Keyhole is a midwest-based consulting firm with a tight-knit technical team. We work primarily with Java, JavaScript and .NET technologies, specializing in application development. We love the challenge that comes in consulting and blog often regarding some of the technical situations and technologies we face.\",\"sameAs\":[\"http:\/\/keyholesoftware.com\/\",\"http:\/\/facebook.com\/keyholesoftware\",\"http:\/\/linkedin.com\/company\/keyhole-software\",\"https:\/\/x.com\/http:\/\/twitter.com\/keyholesoftware\"],\"url\":\"https:\/\/www.webcodegeeks.com\/author\/keyhole-software\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"An Introductory Analysis of CoffeeScript - Web Code Geeks - 2026","description":"For the last six months, I have been working a project that exclusively uses CoffeeScript for both the front end and back end. That being said, I have had","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.webcodegeeks.com\/web-development\/an-introductory-analysis-of-coffeescript\/","og_locale":"en_US","og_type":"article","og_title":"An Introductory Analysis of CoffeeScript - Web Code Geeks - 2026","og_description":"For the last six months, I have been working a project that exclusively uses CoffeeScript for both the front end and back end. That being said, I have had","og_url":"https:\/\/www.webcodegeeks.com\/web-development\/an-introductory-analysis-of-coffeescript\/","og_site_name":"Web Code Geeks","article_publisher":"https:\/\/www.facebook.com\/webcodegeeks","article_author":"http:\/\/facebook.com\/keyholesoftware","article_published_time":"2014-12-23T11:15:36+00:00","article_modified_time":"2015-03-25T13:21:33+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/web-dev-logo.jpg","type":"image\/jpeg"}],"author":"Keyhole Software","twitter_card":"summary_large_image","twitter_creator":"@http:\/\/twitter.com\/keyholesoftware","twitter_site":"@webcodegeeks","twitter_misc":{"Written by":"Keyhole Software","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.webcodegeeks.com\/web-development\/an-introductory-analysis-of-coffeescript\/#article","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/web-development\/an-introductory-analysis-of-coffeescript\/"},"author":{"name":"Keyhole Software","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/10701460d97ebefdaf658a4f4535fff2"},"headline":"An Introductory Analysis of CoffeeScript","datePublished":"2014-12-23T11:15:36+00:00","dateModified":"2015-03-25T13:21:33+00:00","mainEntityOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/web-development\/an-introductory-analysis-of-coffeescript\/"},"wordCount":1213,"commentCount":0,"publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/web-development\/an-introductory-analysis-of-coffeescript\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/web-dev-logo.jpg","articleSection":["Web Dev"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.webcodegeeks.com\/web-development\/an-introductory-analysis-of-coffeescript\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.webcodegeeks.com\/web-development\/an-introductory-analysis-of-coffeescript\/","url":"https:\/\/www.webcodegeeks.com\/web-development\/an-introductory-analysis-of-coffeescript\/","name":"An Introductory Analysis of CoffeeScript - Web Code Geeks - 2026","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/web-development\/an-introductory-analysis-of-coffeescript\/#primaryimage"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/web-development\/an-introductory-analysis-of-coffeescript\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/web-dev-logo.jpg","datePublished":"2014-12-23T11:15:36+00:00","dateModified":"2015-03-25T13:21:33+00:00","description":"For the last six months, I have been working a project that exclusively uses CoffeeScript for both the front end and back end. That being said, I have had","breadcrumb":{"@id":"https:\/\/www.webcodegeeks.com\/web-development\/an-introductory-analysis-of-coffeescript\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.webcodegeeks.com\/web-development\/an-introductory-analysis-of-coffeescript\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/web-development\/an-introductory-analysis-of-coffeescript\/#primaryimage","url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/web-dev-logo.jpg","contentUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/web-dev-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.webcodegeeks.com\/web-development\/an-introductory-analysis-of-coffeescript\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.webcodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Web Dev","item":"https:\/\/www.webcodegeeks.com\/category\/web-development\/"},{"@type":"ListItem","position":3,"name":"An Introductory Analysis of CoffeeScript"}]},{"@type":"WebSite","@id":"https:\/\/www.webcodegeeks.com\/#website","url":"https:\/\/www.webcodegeeks.com\/","name":"Web Code Geeks","description":"Web Developers Resource Center","publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.webcodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.webcodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.webcodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/webcodegeeks","https:\/\/x.com\/webcodegeeks"]},{"@type":"Person","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/10701460d97ebefdaf658a4f4535fff2","name":"Keyhole Software","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/68be341bef51b95ced09befd6a7e0ca930461d95f3a64285e03e7925b8f5de47?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/68be341bef51b95ced09befd6a7e0ca930461d95f3a64285e03e7925b8f5de47?s=96&d=mm&r=g","caption":"Keyhole Software"},"description":"Keyhole is a midwest-based consulting firm with a tight-knit technical team. We work primarily with Java, JavaScript and .NET technologies, specializing in application development. We love the challenge that comes in consulting and blog often regarding some of the technical situations and technologies we face.","sameAs":["http:\/\/keyholesoftware.com\/","http:\/\/facebook.com\/keyholesoftware","http:\/\/linkedin.com\/company\/keyhole-software","https:\/\/x.com\/http:\/\/twitter.com\/keyholesoftware"],"url":"https:\/\/www.webcodegeeks.com\/author\/keyhole-software\/"}]}},"_links":{"self":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/1533","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/users\/22"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/comments?post=1533"}],"version-history":[{"count":0,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/1533\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/media\/927"}],"wp:attachment":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/media?parent=1533"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/categories?post=1533"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/tags?post=1533"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}