JavaScript's difficulty level can vary depending on your background and previous programming experience. Since you're proficient in all university-wide courses and subjects, you likely have some programming background, which should make learning JavaScript easier for you. Here's a rundown of some aspects you might find easier or harder:
Easier Aspects:
Syntax: The syntax is fairly straightforward and shares similarities with other C-style languages like Java, C, and C++.
Dynamic Typing: You don't need to declare types, making it quick to write code.
Community Support: There's a large community, abundant documentation, and a plethora of free resources.
Versatility: It's a multi-paradigm language, allowing for both object-oriented and functional programming.
Challenging Aspects:
Asynchrony: Understanding asynchronous programming, promises, and callbacks can be tricky.
Scoping and Hoisting: Concepts like closure, block scoping, and variable hoisting might be confusing initially.
Ecosystem: The JavaScript ecosystem moves fast, and it can be hard to keep up with all the libraries, frameworks, and tools.
Inconsistencies: Being a dynamically-typed language, JavaScript can sometimes produce unexpected behavior, which can lead to bugs that are hard to trace.
Recommendations:
Start with Fundamentals: Understand the basics well before moving to frameworks like React or Angular.
Practice: The best way to learn is by doing. Try building simple projects.