关于js当中一些糟糕的特性

页面导航:首页 > 网络编程 > JavaScript > 关于js当中一些糟糕的特性

关于js当中一些糟糕的特性

来源: 作者: 时间:2016-02-02 09:58 【

首先,不可否认,js是一门具有许多优秀特性的弱类型语言,但是这门语言在设计之初就投入了工程实践,没有经历严格的实验室测试,以致力于它是如此的粗糙,在相当长的一段时间很
首先,不可否认,js是一门具有许多优秀特性的弱类型语言,但是这门语言在设计之初就投入了工程实践,没有经历严格的实验室测试,以致力于它是如此的粗糙,在相当长的一段时间很不受开发者待见,被视为一门玩具性的语言,而且有些特性确实设计的很糟糕,今天就这些糟糕的特性我就具体谈一谈。
 
  1.js当中首要的最糟糕的特性应该要数它对全局变量的依赖性。什么是全局变量?也就是对所有域都开放,能在任意时间、任意部分对其进行修改,这极大地降低了程序的可靠性。其次对于大型项目而言,随着业务拓展,代码量的增加,程序越来越庞大,子程序当中的变量命名很有可能与全局变量出现命名冲突,这很有可能导致程序无法正常运行。最理想的设计就是整个程序只有一个全局变量,这一点可以利用闭包来实现。
 
  2.作用域。js没有块级作用域,只有函数作用域,,在变量声明的不符合一般习惯,当然这里也可以利用比宝来模拟块级作用域。
 
  3.保留字。js里面有许多不会使用但会保留的单词,如class,它们不能被命名成变量或参数,用作对象声明的属性名时必须加引号,以保留字做对象属性的名字,不能通过点表示法来访问,只能通过括号表示法来访问。
 
  var a;//正确
 
  var class;//错误,不能以保留字做变量
 
  var person={
 
  name:"aaa"
 
  }//正确
 
  var person={
 
  class:"ren";
 
  }//错误,保留字作对象属性名必须加引号
 
  var person={
 
  "class":"ren"
 
  }//正确
 
  person.class//错误,不能通过点表示法访问保留字做属性名的对象
 
  person['class']//正确
 
  4.typeof运算符。typeof运算符用于返回一个对象所属的基本类型,如:typeof 1返回number,但是很可惜在typeof null中返回的是object,而我们更期望它返回的是null,因为返回object毫无意义。
 
  5.浮点数。二进制浮点数不能正确地处理十进制小数,如0.1+0.2的结果绝不可能是0.3。这是遵循二进制浮点数算术标准造成的,这有点不合我们一直所学的数学知识,如果不了解个中原因会造成一定的误导,不过对于整数的处理倒是精确的。
 
  6.NaN.这表示一个特殊的数量值,但它不是一个数字,尽管typeof NaN==="number"(在这里又要吐槽一下typeof了,太坑了)。要注意NaN并不等于它本身,即NaN!==NaN(这是true。切记!!!)。NaN的产生主要是你想要将一个非数字的字符串转化成数字而产生。
 
  7.伪数组。严格意义上来说,Script上没有真正的数组,它里面的数组实际上是一个属性名为整数,且具有一个length属性的对象,在运行效率上比不上真正的数组,但是我们不必担心发生越界错误。通过typeof无法判断数组和对象。一个看起来比较可靠的判断一个值是数组的程序可能是这样:
 
  if(value&&typeof value==="object"&&value.constructor===Array){//value是数组},但是在不同帧或窗口创建的数组会得到false,下面的程序是我所知最可靠的检测数组的程序,下面分享给大家,代码如下:
 
  if(value&&typeof value==="object"&&typeof value.length==="number"&&typeof value.splice==="function"&&!(value.propertyIsEnumerable("length"))){//value是一个数组};
 
  当然糟糕的特性还不止上面这些,比如还有自动插入分号导致return换行以后返回值是undefined,Unicode字符,parseInt函数,连接符"+",假值等等。上面所述的是主要的糟糕特性,当然小伙伴们有不同见解也可分享。
Tags:

文章评论

最 近 更 新
热 点 排 行
Js与CSS工具
代码转换工具

<