我 js 和 Java 都写,C#不写。个人也觉得 js 写后台不好,但也没那么差,主要是要:扬长避短。
js 写起来比较舒服的点:
1 、函数式支持。数组可以直接使用 map 、reduce 、filter ,Java 这边就得先弄成 Stream 搞流式编程。
2 、如果要创建一个对象,不必特定搞一个类。直接双花括号就可以。
3 、语法糖。js 的语法糖很多,比如正则表达式、模板字符串、解构赋值等,处理 JSON 更是极其方便。
4 、没有 Java 那个检查型异常,写起来方便很多。
5 、异步支持。js 有 promise 、async/await 。由于自身单线程的特性,对异步的支持非常好。
但缺点:
1 、不严谨。js 本身有很多设计缺陷,比如 falsy 、undefined 还有各种离谱的隐式转换等等,不熟悉的话容易踩坑,考验你和同事的水平。
2 、性能,js 主要考虑功能,很少考虑实现。比如 ES6 的 Set 就是直接 const set=new Set()。数组当队列也是,能用就行。
3 、单线程事件循环模型,比如你的阻塞队列就是没有的。
能拿来写后台的一个很大原因是不少后台都是 IO 密集型而非计算密集型。而 JS 是把网络 IO 交给底层去管,所以轻松。要是计算密集型估计就蛋疼了。
4 、工具差。官方模块化基本是 ES6 的事了,导致要考虑 CommonJS 、ES Module 、AMD 啥的。npm 设计也是稀烂,包管理器都能吵起来。
5 、生态差,缺乏最佳实践。隔壁 Spring 开发 web 后台,大体都给你定好了,直接用就行。
另外非常赞同#1 的观点,不要用 Java 的思想写 JS ,比如:
1 、Java 有类。比如 toString()、hashCode()、equals()方法你可以直接改类。但 JS 如果你用花括号定义的对象其实是直接来自 Object 的,个人觉得改 Object.prototype 应该不是个好主意。
2 、Java 有类,有注解,有反射机制。比如 JPA ORM 就靠反射获取信息,但 JS 的肯定就不是这么做了。
3 、 @
Transactional 注解。既有注解,又是线程相关的模型。
4 、Java 强制你用面向对象的语法写,但 js 没有。