关于JavaScript的冷知识

441 阅读3分钟

关于本文的js设计缺陷引用于阮一峰的网络日志 链接

JavaScript的由来

在1995年,JavaScript由网景公司(Netscape)的Brendan Eich为网景导航者浏览器设计实现的JS功能,这之间历时10天。

由于网景公司与Sun公司合作,所以网景公司的管理者要求JS必须外观上和Java相似,Java是由一款印度尼西亚爪哇岛的英文名称命名的,因为其盛产咖啡而闻名,因此JS在早先的名字其实是Mocha,而后改名为LiveScript,然后在改名为现在熟知的JavaScript。

虽然JavaScript这一名称是最为被大家熟知的名字,然而JavaScript的语言标准却是ECMAScript,这是由于Java版权的问题导致的。ECMAScript的版本往往落后于JS,是因为他们采取先实现,在写进标准的的政策。

在1997年6月,第一版ECMAScript发布了,到1999年12月,第三版发布,这个版本是使用最广的,最后直到2015年6月,第六版发布,目前新的浏览器都支持这一版且,之后每年发布一版,版本号就以当年的年份命名,这里值得注意的是ECMAScript没有第四版,是因为当时添加了过多的功能以至于后面无法实现,最后导致第四版'流产'。

JavaScript的兴起

  1. 微软的懈怠以及Chrome抓住机会(Chrome在2016年的全球份额为62%)
  2. 移动市场的兴起(智能手机崛起)
  3. 2004年,Gmail的发布

JavaScript的爆发

Chrome的JS引擎叫做V8,2009年Ryan基于v8创建了node.js,2010年,Isaac基于Node.js写出npm,此时,实现了前端工程师在浏览器之外可以执行js,同年,TJ发布了Express.js,使得前端工程师可以写后端应用

JavaScript的设计缺陷

由于js的设计实现过于仓促并且过早地标准化导致没有时间重新调整设计,使得js存在一些设计上的缺陷

  1. 不适合大型程序:由于js没有名称空间,导致其很难模块化
  2. 标准函数库非常小,只能完成一些基本操作
  3. null属于对象的一种,意味这这个对象为空,但是undefined是一种数据类型,表示未定义,但是实践中,null使用几率非常小
  4. 全局变量控制困难
  5. 若程序的结尾不是以分号结尾,解释器会自动把分号插入行尾,此时可能会导致一些难以发现的错误
  6. 如果一个操作项为字符另一个是数字,则数字自动转换为字符
  7. NAN表示解释器的极限,下面是一些特性:
 NaN === NaN; //false
  NaN !== NaN; //true
  alert( 1 + NaN ); // NaN
  1. js的数组也是对象,所以要区分一个对象是不是数组十分麻烦
  2. ==是用来判断两个值是不是相等,当两个值不相同的时候,会发生自动转化,所以推荐用===
    "" == "0" // false
  0 == "" // true
  0 == "0" // true
  false == "false" // false
  false == "0" // true
  false == undefined // false
  false == null // false
  null == undefined // true
  " \t\r\n" == 0 // true
  1. 与基本数据类型对应的对象类型作用很小