LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

你必须要了解的JavaScript 设计缺陷

admin
2024年3月30日 0:16 本文热度 454

本文转载于稀土掘金技术社区,作者:情欲
1. JavaScript 为什么有设计缺陷?

这里有三个主要原因导致了 JavaScript 的设计不够完善。

1.1. 设计时间过短

相信大家都知道 JavaScript 诞生就只花了十天,虽然这让我们感到非常吃惊,感叹设计者的能力之强大。但是从另一个角度想,没有经过深思熟虑的东西一定就有没有考虑到的地方。相信大家在使用时也发现了 JavaScript 的一些缺陷。

我们程序猿一般都是给别人打工,很少是自己开发一个程序并且能够自给自足的,JavaScript 的设计者也是这样,也是为了给公司交差,本人并不想这样设计。

另外,JavaScript 的设计初衷是为了实现一些网页的简单互动(比如:检查用户名是否填写),并没有考虑到现今的复杂应用的开发。JavaScript 的设计者做梦也想不到 JavaScript 将来能写出如今这么极其庞大复杂的网页。

1.2. 过早的标准化

JavaScript 的发展太快了,甚至快到根本没有时间进行调整设计。

1995年5月,设计方案定稿;10月,解释器开发成功;12月,向市场推出,立刻被广泛接受,全世界的用户大量使用。Javascript缺乏一个从小到大、慢慢积累用户的过程,而是连续的爆炸式扩散增长。大量的既成网页和业余网页设计者的参与,使得调整语言规格困难重重。

更糟的是,Javascript的规格还没来及调整,就固化了。

1996年8月,微软公司强势介入,宣布推出自己的脚本语言Jscript;11月,为了压制微软,网景公司决定申请Javascript的国际标准;1997年6月,第一个国际标准ECMA-262正式颁布。

也就是说,Javascript推出一年半之后,国际标准就问世了。设计缺陷还没有充分暴露就成了标准。相比之下,C语言问世将近20年之后,国际标准才颁布。

1.3. 没有先例

JavaScript 很可能是第一个将函数式编程和面向对象编程结合的编程语言。而且到今天为止,JavaScript 仍然是世界上唯一使用 Prototype 继承模型的主要语言。这使得它没有先例可以参考。

2. JavaScript 的设计缺陷

2.1. null 和 undefined

我们在接触 JavaScript 时都会被告知 null 在设计时有一个 bug,就是 type null === "object"

null 属于对象的一种,意思为该对象为空;undefined则是一种数据类型,表示未定义。

var obj;

foo == null// true
foo == undefined// true
foo === null// false
foo === undefined// true

2.2. 全局变量

Javascript的全局变量,在任何位置中都是可见的;任何一个函数内部都可以生成全局变量,这大大加剧了程序的复杂性。

function fn({
    n = 1// 这里会创建全局变量
}

fn();
n; // 1
window.n; // 1

并且不用声明变量就可以直接赋值。

let obj = {};

obj.name = "李华"// 直接赋值即可创建变量

2.3. 自动插入行尾分号

Javascript的所有语句,都必须以分号结尾。但是,如果你忘记加分号,解释器并不报错,而是为你自动加上分号。有时候,这会导致一些难以发现的错误。

比如,下面这个函数根本无法达到预期的结果,返回值不是一个对象,而是 undefined。

function({
    return 
    {
        i1;  
    };
}

原因是解释器自动在 return 语句后买呢加上了分号。

function(){
    return;
        {  
            i:1  
        };
}

2.4. NaN

NaN 是一个数字,表示超出了解释器的极限。它有一些奇怪的特性:

NaN === NaN// false

NaN !== NaN// true

2.5. == 和 ===

== 用来判断两个值是否相等。当两个值类型不同时会发生自动转换,得到的结果不符合直觉。

"" == "0"// false

0 == ""// true

0 == "0"// true

false == "0"// true

false == null// false

false == undefined// false

" \t\r\n" == 0// true

因此推荐任何时候都使用 === 精确判断比较符。

2.6. 更多缺陷

更多缺陷请查看:wtfjs.com[1]

3. 如何看待这些缺陷

JavaScript 既然有这么多缺陷,那它是不是会被淘汰?在七八年前我们可能会有这种担忧,但在现在我们已经看到了它的未来。它的能力很强大,既能编写前端,又能编写后端,既能编写桌面应用,也能编写移动端应用。甚至在任何角落我们都能看到它的身影。

JavaScript 的第三方库也非常庞大,再加上良好的编程规范,就能回避大部分的缺陷。

另外 JavaScript 是目前网页编程的唯一语言,只要互联网继续发展,它就必然发展。目前,许多新项目大大扩展了它的用途,node.js[2]使得Javascript可以用于后端的服务器编程,coffeeScript[3]使你可以用python和ruby的语法,撰写Javascript。

最后,只要发布新版本的语言标准(比如 ECMAscript 5[4]),就可以弥补这些设计缺陷。当然,标准的发布和标准的实现是两回事,上述的很多缺陷也许会一直伴随到Javascript存在的最后一天。


该文章在 2024/3/30 0:16:22 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved