Hire The Top 1% Freelance JavaScript Developers

Flexiple is a network of top JavaScript developers, engineers, and architects with hourly rates ranging from $30 to $100. Join 100+ teams who have hired JavaScript developers from Flexiple for a few weeks to a few years!
JEFF LEI

JEFF LEI

Senior JavaScript Developer

PREVIOUSLY AT

phData
NICK IVANOV

NICK IVANOV

Senior JavaScript Developer

PREVIOUSLY AT

Metro
ERIC GROSSE

ERIC GROSSE

Senior JavaScript Developer

PREVIOUSLY AT

Navori Labs
RON WANG

RON WANG

Senior JavaScript Developer

PREVIOUSLY AT

ClickUp
TAKSHAY PATEL

TAKSHAY PATEL

Senior JavaScript Developer

PREVIOUSLY AT

Cybage

Flexiple spent good amount of time understanding our requirements, resulting in accurate recommendations and quick ramp up by quality developers.

Narayan Vyas, Senior PM (YC S12)

Overall Flexiple brought in high-level of transparency with quick turnarounds in the hiring process at a significantly lower cost than any alternate options.

Esther Hersh, Co-founder ('17 NYU Grad)

Flexiple has been instrumental in helping us grow at a fast pace. Their vetting process for engineers is top notch and they connected us with quality talent quickly.

Tanu V, Founder (#1 Salesforce Leads App)

Work With Flexiple's Expert JavaScript Developers!

Be a short-term or a long-term project, don't compromise on the quality of talent you work with. Flexiple handpicks only the Top 1% through a 6-stage screening process.
  • SAURAV PANDA
    SAURAV PANDA
    NODE REACT EXPRESS

    A CS grad with over 11 years of experience, Saurav has worked across prominent companies like Cognizant and Credit Suisse. A seasoned senior developer, he ... is well-versed in technologies like NodeJS, ExpressJS, ReactJS, etc. Having developed across diverse spheres like healthcare, financial, educational, he has been deploying his skills as a freelance JavaScript developer. Having founded multiple tech startups, he's also an entrepreneur. Saurav took to freelancing, enjoying the flexibility and freedom to choose his clients Read more

    Previously at Cognizant

    Hire Saurav
  • RICHA VERMA
    RICHA VERMA
    REACT NODE

    Richa is a freelance JavaScript developer with 5+ years of software development experience across both large companies and fast-growing tech startups. She started her career ... as a Rails loyalist. She then also slowly developed a liking for ReactJS, NodeJS and has hence also dabbled in JS frameworks. A graduate from IIT Kanpur (India's premier tech institute), she wishes to explore the latest technologies while enjoying her off-time travelling. Read more

    Previously at Plivo

    Hire Richa
  • JUDE DIKE
    JUDE DIKE
    NODE VUE

    Jude has an engineering degree in Computer Science from the University of Lagos and has been programming for over 2 years. A skilled freelance JavaScript ... developer who’s also skilled in backend technologies and an avid learner of new technologies, he has worked on projects with companies in Nigeria and Canada across varied skill sets spanning VueJS, Python, PHP, NodeJS, Ethereum, Solidity and Machine Learning. Read more

    Previously at Teller Finance

    Hire Jude
  • SURBHI AIRAN
    SURBHI AIRAN
    ANGULAR NODE

    Surbhi has 4+ years of experience in software development and has worked as a full stack developer with experience in building apps across AngularJS, ReactJS ... and NodeJS. She has been working as a freelance JavaScript developer on remote contracts for the past couple of years and possesses good communications skills (verbal and written) and is very responsive. Read more

    Previously at DXC Tech

    Hire Surbhi
  • NICK IVANOV
    NICK IVANOV
    Angular ReactJS .NET

    Nick is a senior engineer with 13 years of experience in the software industry. He is adept in technologies like .Net, C Sharp, ReactJS, Angular, ... etc. He has experience working as a team member and has also developed applications from scratch as a sole developer. He has developed applications for a diverse set of industries like e-commerce, pharmaceutical, finance, etc. He is a passionate developer with excellent communication skills. Read more

    Previously at Metro

    Hire Nick
  • HEMALATHA MALLAVARAM
    HEMALATHA MALLAVARAM
    ANGULAR REACT NODE

    Hemalatha is a seniordeveloper with more than a decade of experience and has worked across fields like finance, retail, public sector, etc. She has worked ... on ExpressJS, React-Redux, React Native, Angular,js, NodeJS, Ionic, AWS, Kubernetes, etc. Hemalatha has experience as an architect while designing & developing mobile and web applications for top-notch companies like G&E, J.P Morgan, and Coco-Cola. After having worked as a part of a team and as a lead, she has been venturing as a freelance JavaScript developer. Read more

    Previously at Baker Hughes

    Hire Hemalatha
  • ERIC GROSSE
    ERIC GROSSE
    REACT NODE ANGULAR

    Eric has a prolific record of building frontend for multiple large-scale web applications. Having been freelancing for the past 4 years, he has worked for ... various startups in roles that range from junior to lead developer. He is an experienced JavaScript developer and an accomplished blogger with several published tech articles under his belt. Read more

    Previously at Navori Labs

    Hire Eric
  • TAKSHAY PATEL
    TAKSHAY PATEL
    AngularJS Java

    A senior developer with 11 years of experience, Takshay has worked across prominent companies like Capgemini. He has developed several web applications using technologies like ... Java, AngularJS, AWS, etc. as a lead developer and an individual contributor. Over his career, he has developed products for different domains like insurance, cybersecurity, law and is now exploring life as a remote freelancer. A lucid communicator, he proves to be a seamless fit in every team. Read more

    Previously at Cybage

    Hire Takshay

Flexiple Helps You Hire Quality Developers, Handpicked for You

  • Work only with the best

    Our developers are selected through a 6-stage screening process. As a result, our developers have an average of 5-years industry experience and are ready to immediately contribute on projects.
  • Work with Role-specific Developers

    Save time and energy lost in manually sifting through profiles. Our solutions expert along with our Director of Technology will handpick developers who are a perfect match for your requirement.
  • Work Risk-free & Start within 2 Days

    With immense confidence in the quality of our developers and the accuracy of our recommendations, we are happy to offer you a 1-week trial where you pay only if you are satisfied.

Find the perfect developer for your team at the right price

  • Individual Contributor

    $
    /year
    $30-50
    /hour
    • 1-3 years of experience
    • Mostly worked on a single stack
    • Top Individual Contributor
  • Multi-faceted Contributor

    $
    /year
    $50-80
    /hour
    • 3-7 years of experience
    • Expertise in multiple stacks
    • Worked on niche skills
    • Mentors Junior Developers
  • Leader & Diverse Contributor

    $
    /year
    $80+
    /hour
    • 7-10+ years of experience
    • Worked across stacks, products
    • Multiple niche skills
    • Led multiple teams in the past

How We Select the Top 1%

45.4%pass rate

Depth in past work

Flexiple Developers are reviewed on their experience and complexity of products built. Those who display depth and have worked on end-to-end projects are given an introductory call.

14.6%pass rate

Good communication and motivation

Over a call, the developer’s ability to communicate in an articulate manner is tested. A deeper understanding of the candidate’s technical experience and also motivation to freelance is achieved.

3.1%pass rate

Strong technical abilities

Over one or more F2F interviews, the developer’s involvement and performance in building complex software products are assessed. This sets the platform to delve deeper into technology-specific discussions.

1.5%pass rate

Keen problem solving and coding

Developers' mental agility and problem-solving abilities are tested through a coding test involving algorithmic as well as skill-specific problems. A mixture of live evaluation and timed coding tests is used.

1.2%pass rate

Splendid reviews in background check

The live experience of working with developers is verified by reaching out to past clients and/or employers. Inputs on various qualitative factors such as reliability, punctuality, communication and responsiveness are received.

1%pass rate

Consistent exemplary performance

Performance during each engagement is continually assessed. Our developers are expected to maintain Flexiple standards across all engagements with our customers.

Hire Freelance JavaScript Developers within 48 Hours!

Our simple process gets you working with the right freelancer quickly and seamlessly

Don't Just Take Our Word For It!

(Y-Combinator S12 and Andreessen Horowitz-backed Company)

Quality product launched on schedule by a team of 8 engineers

"Flexiple helped us hire quality developers across technologies - Node, Rails, PHP, Python. They spent a good amount of time understanding our requirements, resulting in accurate recommendations and quick ramp up by developers. We also found them to be much more affordable than other alternatives for the same level of quality."

Narayan Vyas,

Senior Product manager, Plivo Inc

(Incubated at the European Space Agency)

Helped set up and scale tech team on demand

"Flexiple has exceeded our expectations with their focus on customer satisfaction! The freelancers are brilliant at what they do and have made an immense impact. Highly recommended :)"

Henning Grimm,

Founder, Aquaplot

(Acquired by Unicorn, Hike Messenger)

Saved 30% costs with 2 software products delivered

“Overall Flexiple brought in high-level of transparency with extremely quick turnarounds in the hiring process at a significantly lower cost than any alternate options we had considered.”

Kislay Shashwat,

VP Finance, CREO

('17 NYU Graduates)

Found a perfect new member for its globally distributed team

"Working with Flexiple has provided us with partners who are providing us with the required technical support for our growth and success!"

Esther Hersh,

Co-founder, Peblio Inc

(Y-Combinator S18)

Hired the first remote engineer to work directly with the CTO

"It has been great working with Flexiple for hiring highly talented and hardworking folks on contract. We were looking for a suitable developer on the back-end and we got to know Ankur through Flexiple. We are very happy with the commitment and skills he brings to the job and we will be working with Flexiple going forward as well after this positive experience. I recommend them highly for any freelancing talent you are looking to hire!"

Neil Shah,

Chief of Staff, Prodigal Tech

(#1 Lead Routing App for Salesforce)

Helped scale the product with a team of engineers

"Flexiple has been instrumental in helping us grow at a fast pace. Their vetting process for engineers is top notch and they were able to connect us with quality talent quickly. The team put great emphasis in understanding our requirements and getting to know us which ensured that we were matched with folks who were a great fit not only technically but also culturally."

Tanu V,

Founder, Power Router

(Acquired by Reliance for $100 million)

Delivered 2 high quality products forming a long partnership

"The engagement with Flexiple and their community members has helped us get work done in a timely manner and helped us go above and beyond."

Swapan R,

Co-founder, Haptik

(Acquired by PayU for $70 million)

Built their first remote tech team of a frontend and backend engineer

"Highly responsive team with prompt support and willingness to go the extra mile. Powered by technically brilliant personnel on board, we have happy results – all this at an affordable price!"

Sajith N,

Product Manager, Wibmo Inc
  • How to Hire a Great Freelance JavaScript Developer?

  • JavaScript was invented around 30 years ago by Brendan Eich. Since then, many frameworks and libraries have been built on top of it. Today, it is the most widely used programming language across the world. It is supported across platforms - laptops, phones and tablets. JavaScript can be used on the client side as well as server side.

    JavaScript developers are highly versatile and a great addition to your developer team. If you are looking to hire one, you’re at the right place. Below, we have put together all the details you need to know about hiring a skilled JavaScript developer.

    WWe have split the sections into the following parts:
    1. Let's introduce JavaScript development to you
    2. Why is JavaScript development widespread?
    3. What are the tools used by JavaScript developers?
    4. Writing the Job Description to hire a freelance JavaScript developer
    5. Interview questions for hiring a freelance JavaScript developer
    - Basic Questions
    - Advanced Questions
    - Data Structures/Algo Questions




    1. Let's introduce JavaScript development to you

    • Origin Story: Brendan Eich invented JavaScript close to 30 years ago, in 1995. Initially, JavaScript was developed for Netscape 2. Later, in 1997, it became the ECMA-262 standard. Then, Mozilla worked on developing JavaScript to be used in the Firefox browser. In the same year, Internet Explorer was the first browser to support the first version of JavaScript, ECMA-262 Edition 1.

    • Widely popular: According to Statista, JavaScript is the most used programming language in the world. More than 64% of all developers globally make use of this language.

    • Versatility: JavaScript is a highly versatile programming language. Knowledge of JavaScript makes it easier to pick up popular front-end as well as back-end frameworks like Angular, React and NodeJS.

    • 2. Why is JavaScript widespread?

      • Completely customizable: JavaScript alone can be used in combination with HTML/CSS to build a simple, yet fully functioning application.
      • Open community and standards: Having been around for so many years, the JavaScript community is huge. Clear documentation is available which makes it easy to solve challenges.

      3. What are the tools used by JavaScript developers?

      1. Code Editors

      • Atom: Atom is a code editor with a lot of intuitive features that make writing JavaScript code easy. Developers can download a variety of plugins to improve their experience.
      • Visual Studio Code: This tool includes inbuilt JS debugging, code navigation, formatting, and other useful features which make the JavaScript coding experience easy and fruitful.

      2. Package Manager - npm

      npm or Node Package Manager is a tool that puts modules in order so that these become easy to find and any dependency conflicts are easily managed.

      3. Task Runner - Gulp

      This is a cross-platform streaming task runner using which developers can automate a lot of tasks, reducing development time.

      4. Module Bundler - Webpack

      Webpack is a free, open-source module bundler. It bundles JavaScript files for usage in browsers. It generates a single or few files from a large number of files that are used to then run the app.

      5. Code Analysis - ESLint

      ESLint is a JavaScript linter that statically analyzes the written code to find any problems present in it. This helps JavaScript developers to make the code more consistent and avoid any bugs.

      6. Testing - Mocha

      Mocha is a simple and easy-to-use JavaScript testing framework, mainly for Node.js programs. It has features like browser support, async testing, and coverage reports.


      4. Writing the Job Description to hire a freelance JavaScript developer

      Given below are key points that we at Flexiple have learned through trial and error - a process of filtering through over 15,000 developers.

      • No. of years of software development experience: Be specific about the technology you’re looking for and the number of years of experience needed. The number of production apps worked on can also be used as a proxy to this parameter.

      • Type of products built in the past: Based on the type of product you are trying to build - social network, SAAS product, etc. - you can prioritize certain developers over others

      • Industry-specific exposure: JavaScript developers who have built products in certain industries have better knowledge of the key aspects of laying the foundation for a great product. This makes prediction of possible problems easier.

      • Experience working remotely: Hiring someone who has worked remotely in the past is an added benefit as they have front-hand experience of everything right from how the contracts work to communication and from timelines to deliverables.

      • Strong communication: A vital thing to look at when hiring a freelancer is excellent communication skills. Since all interactions happen online, a freelancer should be able to effectively communicate to ensure a streamlined execution of all work

      • 5. Interview questions for hiring a freelance JavaScript developer

        Now that you have prepared a quality JD, it can still be tricky to evaluate the skills of your applicants. To help you with that, we have created a pool of questions that a good JavaScript developer should be comfortable with.
        Note that the ability to answer these questions doesn't imply that you have a top quality candidate. But, it definitely is a big step in that direction.

        To help you navigate through these questions, we’ve categorized the interview questions in 3 parts:

        A. Basic concepts: Includes all basic concepts used across languages. This will give you an understanding of how strong their programming foundation is.

        B. Advanced concepts: Includes all concepts that someone with higher expertise should know.

        C. DS/Algorithm questions: To test the logical capability of the candidate.


        A. Basic concepts


  • 1. Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid. An input string is valid if: Open brackets must be closed by the same type of brackets. Open brackets must be closed in the correct order. Note that an empty string is also considered valid.


    class ValidParenthesesFunc {
        func isValid(_ s: String) -> Bool {
            var sta = [Character]()
    
            for char in s {
                if char == "(" || char == "[" || char == "{" {
                    sta.append(char)
                } else if char == ")" {
                    guard sta.count != 0 && sta.removeLast() == "(" else {
                        return false
                    }
                } else if char == "]" {
                    guard sta.count != 0 && sta.removeLast() == "[" else {
                        return false
                    }
                } else if char == "}" {
                    guard sta.count != 0 && sta.removeLast() == "{" else {
                        return false
                    }
                }
            }
            return sta.isEmpty
        }
    }
    

    The above code will input 0(false). 
  • What is the popular open standard file format (like XML) used with javascript and node.js? And what are the popular commands to convert string to that and vice versa?

    It is JSON which stands for Javascript Object Notation. It is a lightweight data interchange format. It is easy for humans to read. Even though it has Javascript in its full form, it is language independent.

    It’s built on 2 structures:
    • Collection of key-value pairs. This is called an object, dictionary, hashmap, associative array, in different languages
    • Ordered list of values, This is called an array, list, vector, in different languages
    These are universal data structures which is important for a file format which is language independent.

    Example of JSON:

    {
      "flexiple": {
          "top": "1%",
          "location": "remote"
      },
      "blog": {
        "topic": "engineering",
        "title": "What are stable coins and how do they work?"
      }
    }
    


    This in XML would look like this:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <blog>
          <title>What are stable coins and how do they work?</title>
          <topic>engineering</topic>
       </blog>
       <flexiple>
          <location>"remote"</location>
          <top>1%</top>
       </flexiple>
    </root>
    


    Valid JSON

    Few of the rules to remember while handling JSON are that:

    • Empty objects and arrays are okay
    • Strings can contain any unicode character, this includes object properties
    • null is a valid JSON value on its own
    • All object properties should always be double quoted
    • Object property values must be one of the following: String, Number, Boolean, Object, Array, null
    • Number values must be in decimal format, no octal or hex representations
    • Trailing commas on arrays are not allowed


    • These are all examples of valid JSON: -

      {"name":"John Doe","age":32,"title":"Vice President of JavaScript"}
      
      ["one", "two", "three"]
      
      // nesting valid values is okay
      {"names": ["John Doe", "Jane Doe"] }
      
      [ { "name": "John Doe"}, {"name": "Jane Doe"} ]
      
      {} // empty hash
      
      [] // empty list
      
      null
      
      { "key": "\uFDD0" } // unicode escape codes
      


      These are all examples of bad JSON formatting:-

      { name: "John Doe", 'age': 32 } // name and age should be in double quotes
      
      [32, 64, 128, 0xFFF] // hex numbers are not allowed
      
      { "name": "John Doe", "age": undefined } // undefined is an invalid value
      
      // functions and dates are not allowed
      { "name": "John Doe",
        "birthday": new Date('Fri, 26 Jan 2019 07:13:10 GMT'),
        "getName": function() {
            return this.name;
        }
      }
      


      Javascript provides 2 methods to encode data structures to JSON and to convert JSON to objects or arrays. These methods are JSON.stringify() and JSON.parse().

      JSON.stringify()

      It takes a Javascript object or array as input and returns a serialised string form of it.

      const obj = {
          name: "Flexiple",
          city: "Bengaluru"
      }
      
      const jsonStr = JSON.stringify(obj)
      console.log(jsonStr)
      // output is {"name":"Flexiple","city":"Bengaluru"}
      


      JSON.stringify() can take 3 arguments in total, the first one being the data structure. The second argument, called the replacer parameter, can either be a function or an array. It is used to manipulate the properties (keys and values) in JSON.

      let cost = {
          candy: 5,
          bread: 20,
          cheese: 100,
          milk: 15
      }
      
      let func = (key, value) => {
          if (value < 15) {
              return undefined
          }
          return value
      }
      
      let arr = ['candy', 'bread']
      
      let jsonStrWithFunc = JSON.stringify(cost, func)
      console.log(jsonStrWithFunc)
      // Output is {"bread":20,"cheese":100,"milk":15}
      
      let jsonStrWithArr = JSON.stringify(cost, arr)
      console.log(jsonStrWithArr)
      // Output is {"candy":5,"bread":20}
      


      The third argument, called the space parameter, takes in either a number or a string. It is used to control the spacing of the final string by deciding the size of indentation.

      let cost = {
          candy: 5,
          bread: 20,
          cheese: 100,
          milk: 15
      }
      
      let jsonStrWithNum = JSON.stringify(cost, null, 2)
      console.log(jsonStrWithNum)
      // Output is 
      // {
      //   "candy": 5,
      //   "bread": 20,
      //   "cheese": 100,
      //   "milk": 15
      // }
      
      let jsonStrWithStr = JSON.stringify(cost, null, 'xx')
      console.log(jsonStrWithStr)
      // Output is 
      // {
      //     xx"candy": 5,
      //     xx"bread": 20,
      //     xx"cheese": 100,
      //     xx"milk": 15
      // }
      


      JSON.stringify() is also popularly used for debugging, as trying to see a JSON object using console.log() isn’t always successful

      const obj = {
          "nest1": {
              "ex": "ex",
              "nest2": {
                  "nest3": {
                      "ex": "ex",
                  }
              }
          }
      }
        
      console.log(obj)
      // Output is { nest1: { ex: 'ex', nest2: { nest3: [Object] } } }
      


      As we can see that after a certain level of nesting the log just displays ‘[Object]’. Therefore, JSON.stringify() can be used to make debugging easier.

      const obj = {
          "nest1": {
              "ex": "ex",
              "nest2": {
                  "nest3": {
                      "ex": "ex",
                  }
              }
          }
      }
        
      console.log(JSON.stringify(obj,null,2))
      // Output is 
      // {
      //     "nest1": {
      //       "ex": "ex",
      //       "nest2": {
      //         "nest3": {
      //           "ex": "ex"
      //         }
      //       }
      //     }
      // }
      


      JSON.parse()

      It takes a JSON string and converts it into its respective data structure

       const jsonStr = '{"name":"Flexiple","city":"Bengaluru"}'
      const obj = JSON.parse(jsonStr)
      
      console.log(obj)
      // output is { name: 'Flexiple', city: 'Bengaluru' }
      


      Calling JSON.parse() on invalid JSON string will throw a SyntaxError.

      Cloning Objects in Javascript

      These 2 functions of JSON can be used together to clone javascript objects.

      const obj = {
          "prop1": {
              "ex": "ex",
              "prop2": {
                  "ex": "ex"
              }
          }
      }
      
      const objCopy = JSON.parse(JSON.stringify(obj))
        
      console.log(objCopy)
      // Output is { prop1: { ex: 'ex', prop2: { ex: 'ex' } } }
      


      But this is not recommended, because of multiple reasons:
      • It is slower than alternatives
      • This works properly only for valid JSON, but not all javascript objects fall in that category
      A better alternative for deep cloning objects would be to either use an npm library called ‘lodash’ or write a custom recursive function to do the same. The spread operator can be used for shallow cloning of objects.


      B. Advanced concepts


  • What is a lint? Have you ever worked with one before, if yes which one?

    Linting is the automatic checking of source code for programmatic and stylistic errors. Programmatic errors are the errors such as compilation and run time errors. Each company decides to write their code in a certain style and format, this is done for easy maintenance and to provide further structure to the code.

    Stylistic errors are those which might compile without an issue but it does not meet the standards set by the company. Apart from stylistic checks, it is able to identify certain types of bugs like those related to variable scope, undeclared variables, global variables and so on.

    Linting is done using a lint tool or linter, which is basically a static code analyzer. It is important as it reduces errors and increases the standard of the code. It can greatly benefit early stages of development and can save time during code reviews and code maintenance.

    ESLint

    ESLint is one the most popular lints available for Javascript. Let us go into the basics of using ESLint. This is going to the most basic version of ESLint, remember you can install it with different code style plugins as per your choice.
    • After setting up your project (that is running ‘npm init’), run ‘npm install eslint --save-dev’.
    • After that we run ‘npx eslint --init’ this is used to generate the ‘.eslintrc.json’ file which is the config file for eslint.
    • When we are generating a the config file, it asks a bunch of questions to generate it, these are what I’ve chosen:
     How would you like to use ESLint? · style
     What type of modules does your project use? · commonjs
     Which framework does your project use? · none
     Does your project use TypeScript? · No / Yes
     Where does your code run? · node
     How would you like to define a style for your project? · guide
     Which style guide do you want to follow? · standard
     What format do you want your config file to be in? · JSON 
    


    • It might have some peer dependencies that it wants you to install - install them too.
    • Now we come to using the linter. We run ‘npx eslint app.js’ (here app.js is the source js file).
    My app.js file looks like this:

    const obj = {
        "prop1": {
            "ex": "ex",
            "prop2": {
                "ex": "ex"
            }
        }
    }
    
    const objCopy = JSON.parse(JSON.stringify(obj))
      
    console.log(objCopy)
    


    And the output after running ‘npx eslint app.js’ is:

    2:1   error  Expected indentation of 2 spaces but found 4   indent
       2:5   error  Strings must use singlequote                   quotes
       2:5   error  Unnecessarily quoted property 'prop1' found    quote-props
       3:1   error  Expected indentation of 4 spaces but found 8   indent
       3:9   error  Unnecessarily quoted property 'ex' found       quote-props
       3:9   error  Strings must use singlequote                   quotes
       3:15  error  Strings must use singlequote                   quotes
       4:1   error  Expected indentation of 4 spaces but found 8   indent
       4:9   error  Strings must use singlequote                   quotes
       4:9   error  Unnecessarily quoted property 'prop2' found    quote-props
       5:1   error  Expected indentation of 6 spaces but found 12  indent
       5:13  error  Strings must use singlequote                   quotes
       5:13  error  Unnecessarily quoted property 'ex' found       quote-props
       5:19  error  Strings must use singlequote                   quotes
       6:1   error  Expected indentation of 4 spaces but found 8   indent
       7:1   error  Expected indentation of 2 spaces but found 4   indent
      11:1   error  Trailing spaces not allowed                    no-trailing-spaces
      12:21  error  Newline required at end of file but not found  eol-last
    
     18 problems (18 errors, 0 warnings)
      18 errors and 0 warnings potentially fixable with the `--fix` option.
    


    Some of the errors can be fixed using the ‘--fix’ flag, so run ‘npx eslint app.js --fix’. This is how my app.js changed after that:

    const obj = {
      prop1: {
        ex: 'ex',
        prop2: {
          ex: 'ex'
        }
      }
    }
    
    const objCopy = JSON.parse(JSON.stringify(obj))
    
    console.log(objCopy)
    


    Now it does not show any errors on running ‘npx eslint app.js’.

    Similarly ESLint can be used to either check syntax, fix bugs, enforce code style and it has a lot of different options to choose from. It supports plugins and allows custom rules also. Apart from ESLint, some of the other popular lints for Javascript are JSLint and JSHint.

  • What are the vulnerabilities of using cookies? What about the usage of local storage?

    Cookies and local storage are primarily used for session management in web application development. What this means is that once the user is authenticated, there needs to be a way for the application to remember the user for a period of time without asking the user to login again.

    In an architecture design it is standard to keep the server stateless, but this would mean that the user information cannot be stored on the server. Therefore, the decision was taken to store it on the client. This was originally done using cookies. Cookies are basically a storage facility with the browser, which the client side javascript or the server (using headers) can interact with.

    Each item stored in cookies is called a cookie, and each cookie has an expiration time which can be manually set too. The cookie persists in the browser for that duration and is not removed by page refreshes or window being shut. When a client interacts with a server using HTTP requests, then the cookies are also sent along in headers.

    The data which is stored in a cookie is generally a token such as a JSON Web Token (JWT). JWT consists of a payload which is used to fetch information about the user. JWT tokens are signed on the server using a secret key. The routes allow only authorized users to check whether the token is present in the cookies. This is the outline of the architecture followed for session management.

    Difference between Cookie and Local Storage 

    Primarily both function in similar ways - i.e. both involve persistent storage in the browser. The differences come in slight nuances of their functioning:
    • Local storage does not have the concept of expiration time. So, the developer dealing with it needs to handle the expiration of tokens stored in it. Whereas, the expiration time for cookies can be set while storing the cookie and the browser handles the rest.
    • Local storage is not sent with every HTTP request, like a cookie is sent. This reduces load on especially those HTTP requests which are public and do not require to use the token stored.
    • The server can directly interact with cookies, whereas only the client side script can interact with local storage.
    • Local storage has a much larger storage capacity of 5mb compared to 4kb of cookie. This is primarily because cookies are meant to be read by the server, whereas local storage is meant for the client side to be able to persistently store data.

    Vulnerabilities

    Local storage

    Local storage is accessible only by client-side javascript code. This makes it particularly vulnerable to XSS attacks. XSS (Cross-Site Scripting) attacks are a type of injections in which malicious scripts are injected into otherwise trusted websites due to a vulnerability.

    This script then executes on the client’s browser and can access the local storage quite easily. XSS attacks are mainly used to steal cookies, session tokens and other information. After obtaining session tokens they can access protected routes using it. Therefore, storing authentication tokens on local storage is very risky.

    Cookies

    Cookies function similarly as they can also be accessed by client-side javascript code. They are also vulnerable to XSS attacks, but there can be a further layer of protection added to prevent this.

    If the ‘httpOnly’ flag is marked as true while setting cookies then client side javascript cannot access that cookie. This allows only the server side code to interact with it. So this protects it from XSS attacks. However, due to its property of sending a cookie on every request, it gets vulnerable to CSRF/XSRF attacks.

    CSRF/XSRF (Cross-Site Request Forgery) attacks are when malicious web apps can influence the interaction between a client browser and a web server that trusts the browser. Therefore, further measures need to be taken like using CSRF tokens and proper use of the Same-Site cookie attribute.


    C. Data Structure/ Algorithm

  • 1. Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid. An input string is valid if: Open brackets must be closed by the same type of brackets. Open brackets must be closed in the correct order. Note that an empty string is also considered valid.


    class ValidParenthesesF {
        func isValid(_ s: String) -> Bool {
            var stg = [Character]()
    
            for char in s {
                if char == "(" || char == "[" || char == "{" {
                    stg.append(char)
                } else if char == ")" {
                    guard stg.count != 0 && stg.removeLast() == "(" else {
                        return false
                    }
                } else if char == "]" {
                    guard stg.count != 0 && stg.removeLast() == "[" else {
                        return false
                    }
                } else if char == "}" {
                    guard stg.count != 0 && stg.removeLast() == "{" else {
                        return false
                    }
                }
            }
            return stg.isEmpty
        }
    }
    

    The above code will input 0(false). 
  • 2. What will the output of the following code be?


    var p = 2;
    var q = 4;
    var r = 6;
    if (p > q > r)
         document.write("true");
    else
        document.write("false");

    The answer is False. It may look like the output can be true because 6 > 4 > 2 is true, but PHP evaluates $z > $y 
    first, which returns a boolean value of 1 or true. This value (true or 1) is compared to the 
    next integer in the chain, bool(1) > $z, which will result in NULL and echo “false.”

    Parting thoughts on hiring a freelance JavaScript developer


    This is everything you need to know about hiring a freelance JavaScript developer. As mentioned, it isn't easy to find a quality freelance JavaScript developer but this guide makes the process easier for you. To offload the entire hiring process, reach out to us at Flexiple. We've designed a high-quality, 6-step screening process to find the top 1%, freelance developers. You can find the best freelance JavaScript developers here. We've already served over a hundred clients, earning great reviews for the quality of service.

    Lastly, to quickly summarize it for you:
    1. Note your project requirements and hire accordingly. Do not go for the lowest or the highest-paid developer.
    2. Don’t hire without vetting- consider asking questions right from the basics to advanced to logical questions.
    3. Look for companies like Flexiple that help you find the perfect fit.

    Happy hiring! :)

Try a Top Quality JavaScript Developer for 7 Days.
Pay Only If Satisfied.