Thanks for taking the time to respond, it's helpful.
I do tend to self-deprecate. I'm really working on not doing that anymore. I've come a long way but the past few weeks have been really discouraging. I interviewed for some jobs and got turned down. The sad thing is, after talking to the devs that interviewed me, I was pretty certain that I'm more competent than they are. I was turned away because I'm "obviously not passionate about front-end", whatever that means... Interview process was long and I wasted a lot of time.
Then I came to this place where I realized I'm writing lots of framework code, and not really understanding Javascript as well as I thought. Heck, I've forgotten more about Javascript than I can remember.
Anyway the most discouraging thing is that I can become as competent as I have, and still have a very difficult time getting work. The people I am contracting for are very, very happy with my work (probably because they're getting a good deal).
EDIT: I'm really good at cranking out work. I'm a workhorse. Some days I can put in 8 - 10 hours of solid coding if I need to, and my bug count is pretty low...really low. But I'm terrible at remembering specific technical knowledge. A lot of things, I internalize and practice intuitively. I get in interviews and they start asking "gotcha" language questions and I just choke. Then I leave and kick myself because I knew the answer all along, but I couldn't remember it during the conversation. So I need to get better at interviewing, build a better portfolio, learn new frameworks, keep working so I can eat... Sorry for the sob story, it's just rather daunting at the moment.