Uni-directional singly linked list in JavaScript
Just to be sure, this will always be slower than a plain Array() in JavaScript, no matter the optimizations we might find.

After perusing your code I came to:


I like your old school prototyping approach with prototype
You should have a function to retrieve the last element
I would call the root tail or root, as the last element tends to be the head
I would not declare null values in your constructors, it makes no difference:

function Node(val){
  this.data = val;
};

function SinglyList(){
  this._length = 0;
};

You almost never use (read) ._length, I would not keep track of it and just have a function that calculates the length, your code would be so much neater
I would let removeByVal() find the index that needs to be removed and then call removeAt()
I like reverse(), I had to scratch my head at first, it's quite clever for me
JS people would expect unshift instead of prepend
JS people would expect push instead of add
I like that you provided a chainable version of push