原生js或者是es中让人厌恶的一些地方
js总体来说,是个不错的语言,最大的好处的是简单。
但这个基于es6的一些js也有一些非常怪异的写法,这是非常令人憎恶的地方。
c++总体上也算不错,但为什么不是很受欢迎,因为它把自己搞得太复杂了,复杂到已经不太适合编写过于大型的系统。
当我们看到这些复杂的语法的时候,难免有点癫狂。
我们必须推崇简单而规范的语法,这非常有利于开发和维护,一些奇奇怪怪的语法,对于一些非常精通的人而言,并不算是个问题。
但这些语法的存在,复杂化了编译器,也弄糊涂了维护人员的脑子。
所以,我常常告诫我的同事们:当能够用简单通用方式写代码的时候,千万不要过分炫技,这些炫技对于工程维护并没有什么特别的好处,除了
好像看起来起来更加简洁。但除了更加简洁,并没有其它的特别好处, 更快?还是更好理解维护?更容易学习?
说穿了,这些复杂的语法更多时候,只是一个障眼法,一个语法糖!
所以,我只喜欢类似pascal,TypeScript之类的语言!
c++在于它把自己搞得太复杂了,js的问题则在于把自己搞得太随意。
我个人认为,如果使用js编写大量的代码,则应该舍弃其中随意的地方,而保留其严谨整齐的方面,否则调试和查找问题是够呛的!
废话少说,现在列出鄙人认为js令人厌恶的地方。
一、数据类型
- 无法规定类型
- 可以随意转换
所以,在某些情况下,可能会是一个巨大的隐患。此外某些情况下也不是很利于阅读。
为了便于阅读,我们有时候在定义变量的时候,需要使用固定的前缀来表示类型,例如sName,iQty.
不过这个好像有ts来解决了。
二、内部模型
前端代码越写越复杂,所以浏览器的内存模型也只好越做越复杂,这一些都是为了性能考虑。
不过这种复杂性也是可以容忍的,某些情况下!
三、奇怪的简写
如果我们总之使用规范严谨的写法,那么很多时候程序的维护和升级就不需要那么复杂,大家也可以节约更多的时间用于其它方面:
理解业务,编写更加精美的函数,复杂的算法。
通过简写是否可以节约时间了?可以,不过仅仅是纯粹打特定篇幅字的时间!
四、没有包或者作用域
这个对于习惯后端的而言,觉得还是很难受的!
从长远来看,js一定会发展为类似后端的语言,毕竟我们是为了做工程,不是为了逗乐子,或者用棍子大大路边的杂草,严谨一点还是好更好的!
原生js或者是es中让人厌恶的一些地方的更多相关文章
- 原生js实现jquery库中部分事件的功能(jquery库封装二)
继续昨天的封装,今天的部分继昨天选择器之后实现了css样式的获取和添加,attr的获取和添加和一部分事件的封装:只是我自己的理解,不妥之处欢迎大家在评论中提出,相互学习,共同提高 /** * Crea ...
- 原生js实现jquery库中选择器的功能(jquery库封装一)
今天是2017.1.1,新的一天,新的一年,新的一年里继续夯实基础知识,在工作中多些项目,多思考,多总结,前端是不断更新,在更新的过程中也是发现乐趣和挑战自我的过程,希望年轻的我和年轻的javascr ...
- 分享一个基于长连接+长轮询+原生的JS及AJAX实现的多人在线即时交流聊天室
实现网页版的在线聊天室的方法有很多,在没有来到HTML5之前,常见的有:定时轮询.长连接+长轮询.基于第三方插件(如FLASH的Socket),而如果是HTML5,则比较简单,可以直接使用WebSoc ...
- C#保留2位小数几种场景总结 游标遍历所有数据库循环执行修改数据库的sql命令 原生js轮盘抽奖实例分析(幸运大转盘抽奖) javascript中的typeof和类型判断
C#保留2位小数几种场景总结 场景1: C#保留2位小数,.ToString("f2")确实可以,但是如果这个数字本来就小数点后面三位比如1.253,那么转化之后就会变成1.2 ...
- 原生JS中apply()方法的一个值得注意的用法
今天在学习vue.js的render时,遇到需要重复构造多个同类型对象的问题,在这里发现原生JS中apply()方法的一个特殊的用法: var ary = Array.apply(null, { &q ...
- 原生js中slice()方法和splice()区别
slice()方法和splice()方法都是原生js中对数组操作的方法. slice(),返回一个新的数组,该方法可从已有的数组中返回选定的元素.例如:arrObject(start,end),sta ...
- ThinkPHP 中使用 IS_AJAX 判断原生 JS 中的 Ajax 出现问题
问题: 在 ThinkPHP 中使用原生 js 发起 Ajax 请求的时候.在控制器无法使用 IS_AJAX 进行判断.而使用 jQuery 中的 ajax 是没有问题的. 在ThinkPHP中.有一 ...
- 【面试篇】寒冬求职季之你必须要懂的原生JS(中)
互联网寒冬之际,各大公司都缩减了HC,甚至是采取了“裁员”措施,在这样的大环境之下,想要获得一份更好的工作,必然需要付出更多的努力. 一年前,也许你搞清楚闭包,this,原型链,就能获得认可.但是现在 ...
- 使用call、apply和bind解决js中烦人的this,事件绑定时的this和传参问题
1.什么是this 在JavaScript中this可以是全局对象.当前对象或者任意对象,这完全取决于函数的调用方式,this 绑定的对象即函数执行的上下文环境(context). 为了帮助理解,让我 ...
- 原生js(form)验证,可以借鉴下思路,应用到工作中
我在工作中时常使用form验证,在目前的公司做的表单验证用的angular的form组件,对于一个有追求的前端,或者应用在移动端写个form验证,引入angular或者jquery组件等验证,难免显得 ...
随机推荐
- 四、【转】基于知识图谱的推荐系统(KGRS)综述
以下文章来源于AI自然语言处理与知识图谱 ,作者Elesdspline 导语 本文是2020年针对知识图谱作为辅助信息用于推荐系统的一篇综述.知识图谱对于推荐系统不仅能够进行更精确的个性化推荐,而且对 ...
- 【简说Python WEB】Flask应用的单元测试
[简说Python WEB]Flask应用的单元测试 tests/test_basics.py import unittest from flask import current_app from a ...
- MySQL 数据库重置密码
1.Linux 中 MySQL 数据库重置密码 停止服务:systemctl stop mysql 打开 my.cnf(没有则创建一个):vim /etc/my.cnf 在 [mysqld] 下添加: ...
- 06. rails gem 安装mysql
修改Gamefile Gamefile 里添加 gem 'mysql2' 执行命令行 bundle 可以看到下图片上已经安装好依赖了 修改配置文件 修改config/database.yml文件 # ...
- 抽丝剥茧:详述一次DevServer Proxy配置无效问题的细致排查过程
事情的起因是这样的,在一个已上线的项目中,其中一个包含登录和获取菜单的接口因响应时间较长,后端让我尝试未经服务转发的另一域名下的新接口,旧接口允许跨域请求,但新接口不允许本地访问(只允许发布测试/生产 ...
- apisix~自定义插件的部署
参考 https://docs.api7.ai/apisix/how-to-guide/custom-plugins/create-plugin-in-lua https://apisix.apach ...
- 基于Python实现MapReduce
一.什么是MapReduce 首先,将这个单词分解为Map.Reduce. Map阶段:在这个阶段,输入数据集被分割成小块,并由多个Map任务处理.每个Map任务将输入数据映射为一系列(key, va ...
- Linux 磁盘、CPU、内存获取脚本
脚本 脚本 #!/bin/bash # 获取要监控的本地服务器IP地址 IP=`/usr/sbin/ifconfig | grep inet | grep -vE 'inet6|127.0.0.1' ...
- Android 13 - Media框架(12)- MediaCodec(二)
关注公众号免费阅读全文,进入音视频开发技术分享群! 前面一节我们学习了 MediaCodec 的创建以及配置过程,了解部分设计机制以及功能,这一节我们将继续学习其他方法. 1.start start ...
- Vue3.0极速入门(三) - 登录demo
Talk is cheap, Show the code · 在完成npm和vue的环境安装,并了解了基本的目录和文件结构以后,直接写一个带登录和首页的demo做示例,快速了解一个vue工程的创建和基 ...