`

js的设计缺陷

 
阅读更多

原文请搜阮一峰

 

一、js为什么有缺陷

1。设计阶段过于仓促

设计者只用十天时间完成js的设计,而且设计初衷只是为了完成简单的网页互动,并没有考虑复杂应用的需要

2。设计借鉴太杂

设计者本身擅长函数式编程,但由于某些原因又需要将js往面向对象上靠。又因为只想做一种简单的脚本语言就放弃了‘类’的想法,采用prototype继承模型,使这门语言显得有点四不像

3。过早的标准化

js的发展太快,乃至没时间调整设计。语言一经推出市场,立刻被广泛接受,用户量爆炸式增长,缺乏一个积累过程。并且netscape为了与微软的Jscript竞争,强势申请js的国际标准。使得js在推出一年半后就称为标准

 

二、js的几个设计缺陷

1。不适合开发大型程序

js没有命名空间(namespace)很难模块化;没有如何将代码分布在多个文件的规范;允许同名函数重复定义,后面的定义覆盖前面的定义,很不利于模块化加载

2。js提供的标准函数库非常小,只能完成一些基本操作

3。全局变量难以控制

在每个函数里面都能生成全局变量,增加了程序的复杂性如:function a(){b=2;} 这里的b就是全局变量

4。自动插入行尾分号

js所有语句,都必须以分号结尾。但是,如果你忘记加分号,解释器会自动加上,有时候会导致难以发现的错误比如

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

 这里解释器会自动在return后面加分号则函数返回undefined。而如果这样写

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

 则函数返回一个对象

5。数组与对象的区分

js中的数组也属于对象,所以要辨别一个对象是不是数组有点麻烦。Douglas Crockford的代码是这样的

if(arr && typeof arr ==='object' && typeof arr.length === 'number'
   && !arr.prototypeIsEnumerable('length')){
  alert("arr is an arry");
}

 其中第二个条件是限制arr首先是个对象,第三个条件arr有自有属性length并且属性类型是number(如果是继承自prototype则类型就是undefined),第四个条件限制这个属性是预定义属性而不是用户定义的,因为,预定义的属性是不可枚举的,而用户定义的属性是可枚举的

6。基本类型的包装对象

js有三种基本类型:字符串、数字、布尔值。他们又都有相应的构造函数生成相应的对象。这种设计作用很小,造成混淆不小

typeof 1234;//number
typeof new Number(1234); //object

 7。其他的一些奇怪设计

包括像null、NaN、==与===等都容易产生混淆而又比较鸡肋

分享到:
评论

相关推荐

    JavaScript的设计缺陷1

    在本文中,我们将探讨一些JavaScript设计缺陷,这些缺陷对JS新手和经验丰富的开发者来说都是让人头疼的问题。 1. 正则表达式的lastIndex属性 JS中的RegExp对象具有一个lastIndex属性,当正则表达式使用了表示全局...

    JSP+MYSQL软件缺陷管理系统的设计与实现

    "JSP+MYSQL软件缺陷管理系统的设计与实现"是一个基于Web的项目,它利用JSP(JavaServer Pages)作为前端开发技术,MySQL作为后端数据库管理系统,来构建一个高效、可靠的缺陷跟踪和管理平台。下面我们将深入探讨这个...

    JavaScript引擎JIT代码的类型混淆缺陷检测器.pdf

    该检测器基于对JavaScript引擎JIT编译器设计机制的剖析,总结出一种JavaScript引擎JIT代码中类型混淆缺陷的触发模式,并提出了一种针对上述模式的类型混淆缺陷的检测方法。 JavaScript引擎JIT代码的类型混淆缺陷是...

    基于Asp.net的缺陷跟踪管理系统毕业设计论文

    【Asp.net 缺陷跟踪管理系统毕业设计论文】 在现代软件开发中,缺陷跟踪管理系统扮演着至关重要的角色,因为有效管理软件缺陷直接关乎一个软件组织的生存与发展。本论文主要探讨了一个基于Asp.net的缺陷跟踪管理...

    设备缺陷管理 三层架构 DIV+CSS+AJAX+JQuery

    设备缺陷管理是一个重要的IT系统开发领域,特别是在工业自动化、物联网(IoT)和智能制造中,对设备缺陷的有效管理和预防是确保生产效率和安全的关键。在这个系统中,采用三层架构(Presentation Layer, Business ...

    java毕业设计基于SpringBoot+Vue的软件缺陷管理系统源码+数据库文件(高分项目).zip

    Java毕设基于SpringBoot+Vue的软件缺陷管理系统源码+数据库文件(高分项目).zip该项目是个人高分毕业设计项目源码,已获导师指导认可通过,都经过严格调试,确保可以运行!放心下载使用。 Java毕设基于SpringBoot+...

    基于软件研发过程中的缺陷管理系统 源码+数据库+录屏(毕业设计)

    Vue.js是一个轻量级的前端JavaScript框架,它易于上手且灵活,非常适合构建交互式的用户界面。在缺陷管理系统中,Vue.js可以用来创建动态的表单、实时更新的列表和详细的缺陷报告视图。它与组件化开发相结合,使得...

    ES6所改良的javascript“缺陷”问题

    这种设计导致变量提升的问题,即变量声明被提升到函数或全局作用域的顶部。ES6引入了块级作用域,使用let和const关键字来声明变量,它们只在声明它们的块级作用域内有效。 - let关键字 let提供了一种新的声明变量的...

    基于JavaScript下的网页功能设计.pdf

    文章还介绍了JavaScript设计保护框架结构的功能,解决了网页浏览中的缺陷,如页面被嵌套在其他框架结构里的问题。同时,文章还提供了JavaScript设计网页具备浏览器识别适应功能的解决方案,以适应不同浏览器对动态...

    _以HTML 5 CSS3 jQuery为基础的响应式布局网页设计探讨.pdf

    传统的网页设计虽然能够满足人们的基本应用要求,但在应用灵活性和适用性等方面存在着比较大的缺陷。响应式布局可以为不同终端的用户提供更加舒适的界面和更好的用户体验。 HTML5 是构建 Web 内容的一种语言描述...

    毕业设计:基于SSM的mysql-软件缺陷管理系统(源码 + 数据库 + 说明文档)

    毕业设计:基于SSM的mysql_软件缺陷管理系统(源码 + 数据库 + 说明文档) 第2章 可行性分析 3 2.1技术的可行性 3 2.2经济的可行性 3 2.3操作可行性 4 2.4法律的可行性 4 第3章 需求分析 5 3.1开发工具需求 5 3.1.1...

    缺陷管理系统

    JQuery是JavaScript库,简化了DOM操作、事件处理、动画设计和Ajax交互。在缺陷管理系统中,JQuery可以用来优化用户界面,提供更流畅的交互体验。例如,通过AJAX技术,用户可以在不刷新整个页面的情况下提交bug报告或...

    微信小程序软件缺陷管理系统ssm后端源码案例设计.zip

    微信小程序软件缺陷管理系统是一个专为解决软件开发过程中出现的错误和问题而设计的应用。系统采用SSM(Spring、SpringMVC、MyBatis)框架,这是一种在Java领域广泛应用的后端开发架构,因其高效、灵活和可扩展性而...

    基于SpringBoot+Vue的软件缺陷管理系统.zip

    【标题】"基于SpringBoot+Vue的软件缺陷管理系统"是一个集成现代Web开发技术的项目,主要结合了SpringBoot后端框架和Vue.js前端框架,用于构建一个高效、易用的软件缺陷跟踪与管理系统。这样的系统在软件开发流程中...

    HTML5CSS3JavaScript网页设计案例课堂.pptx

    通过使用CSS3和JavaScript等技术,可以轻松实现响应式设计,使网站能够自适应不同设备的屏幕大小和分辨率。 网页设计师需要注意的一个重要事项是跨浏览器兼容性。不同的浏览器有不同的特点和缺陷,因此在使用新技术...

    基于JavaScript程序的移动终端在线学习平台设计.pdf

    "基于JavaScript程序的移动终端在线学习平台设计" 本文设计的在线学习平台基于JavaScript程序,旨在满足移动终端在线学习的需求。该平台包括课程管理模块、用户管理模块、学习模块和后台管理模块等四个主要部分。...

    js入门(js(JavaScript)和jsp(JavaServerPages)的区别).doc

    JavaScript的历史可以追溯到Netscape公司设计浏览器时,开发了一种名为LiveWire的程式,另一种名为LiveScript的电脑语言。后来,Netscape和Sun公司合作,共同发展LiveScript语言,并将其改名为JavaScript。 ...

    商品类别修改测试用例缺陷报告.doc

    任务号和功能特性虽未明确给出,但我们可以推测这与商品管理或分类筛选有关,可能涉及到后台数据库的查询优化或前端交互逻辑的设计。 内部版本号的提及意味着这个缺陷是在软件的某个特定迭代中发现的,可能是开发...

Global site tag (gtag.js) - Google Analytics