JavaScript简介


Posted in Javascript onFebruary 15, 2015

本文不是参考手册式文章,仅适用于对JS产生一个大致的认知,如需JS的详细语法与应用请移步w3school

JavaScript是什么?

JavaScript的诞生

在1995年前后,当时世界上的主流带宽为28.8Kbps,现在世界平均下载带宽为21.9Mbps(数据来源于http://www.netindex.com)。当时的网民,每提交一次表单,都需要等待很久才能收到服务器的回应,甚至很可能等了几分钟收到的却是说缺少了某一项。为了改善用户体验,嵌入浏览器客户端的能实现简单表单判断的脚本诞生了,这就是JavaScript。

JavaScript最早是工作于Netscape (网景公司)的 Brendan Eich为即将在1995年发行的NetscapeNavigator 2.0(NN2.0)开发的,当时叫做LiveScript。由于当时是和非常热门的Sun公司合作的,为了赶上当时的潮流——Java语言,这门语言被命名为JavaScript。

JavaScript跟Java有什么关系?

这也是外行人听到JavaScript的第一反应,也是这门语言被诟病最多的问题之一。

严格的说,没有半毛钱关系。如果非要扯上关系,也许就是两者的部分函数相同、面向对象思想、判断结构、循环语句相同等等等等,但这些显然不是Java的专利,而是编程语言的共识。

JavaScript的标准化及发展历史

JavaScript推出时,用户体验更好的NN 浏览器主宰了浏览器市场,而微软一直在追赶。在推出IE3的时候,微软发布了VBScript并以JScript为名,实际上和Netscape的JavaScript没有多大区别(用今天的话来讲就是山寨)。面对微软的竞争,Netscape和Sun公司将自己的JavaScript草案提交给ECMA(欧洲计算机制造商协会)对JavaScript进行了标准化,最后形成了ECMAScript 的第一个版本(ECMA-262)。

有意思的是,网景公司在标准化JavaScript之后,内部却出现了问题,JavaScript的研究停滞,而微软则趁机赶超,推出了IE4,内置了第一个遵循ECMA规范的JavaScript引擎,比NN提前了一年。再加上微软系统逐步占领计算机操作系统市场,其预装的IE浏览器市场份额逐渐加大,NN不断被挤占市场。然而,当微软失去了最大的对手后,它就没有了发展的动力,IE6~IE8,无论是界面渲染还是脚本执行,都互不兼容,成为浏览器史上的一朵奇葩,也是前端开发者的噩梦。

1.v1 1997年06月 首版

2.v2 1998年06月 格式修正,以使得其形式与ISO/IEC16262国际标准一致

3.v3 1999年12月 强大的正则表达式,更好的文字链处理,新的控制指令,异常处理,错误定义更加明确,数输出的格式化及其它改变

4.v4 未完成...可能更明确的类的定义,命名空间等等...

5.v5 2009年12月  新增“严格模式(strict mode)”,一个子集用作提供更彻底的错误检查,以避免结构出错。澄清了许多第3版本的模糊规范,and accommodates behaviour of real-world implementations that differed consistently from that specification。增加了部分新功能,如getters及setters,支持JSON以及在物件属性上更完整的反射。

****2004年6月欧洲计算机制造商协会发表了ECMA-357标准,它是ECMAScript的一个扩延,它也被称为E4X(ECMAScript for XML)。

JavaScript跟ECMAScript有什么关系?

其实问题应该是JavaScript、JScript、ECMAScript三者有什么关系。实际上,ECMAScript是总的规范,JavaScript和JScript都是依照这个规范开发的,和ECMAScript相容,但包含了超出ECMAScript的功能。不过,现在无论是哪种,都通称为JavaScript,只因其最早出现,影响力最大,名字流传至今。

JavaScript能干什么?

网页上面,一切需要逻辑处理的操作都可以由JavaScript来完成。譬如:

•表单验证

•动画效果

•网页游戏

•倒计时

•……

还有很多很多种应用,在这里不赘述,相信大家学会这门语言之后会发现很多应用到的地方。

为什么要学JavaScript?

1.因为你别无选择,只有JavaScript可以控制所有常用的浏览器,而且JavaScript是世界上最重要的编程语言之一,学习web技术必须学会JavaScript。

2.JavaScript是一种优美的语言,它很好,所以我们要学

JavaScript的定位

1.JavaScript是一门轻量级的脚本语言,不需要编译,由JavaScript解析引擎解析运行(一般指浏览器,当然不排除node之类的解析器)

2.JavaScript拥有非函数式语言特性、函数式语言特性和动态语言特性,它的语法非常灵活

3.JavaScript是一门面向对象的编程语言,在JavaScript界有一句话:万物皆对象。其继承是基于原型的继承(我之前已经专门写了一篇阐述原型继承的文章)

4.JavaScript是一门类C语言,所以只要学过C的人都很容易上手JavaScript

5.JavaScript的编写不需要编译器,而只需要文本编辑器(记事本就免了,这里强烈推荐sublime text)

JavaScript有什么?

现在大家用的JavaScript包含了三大部分:DOM、BOM、ECMAScript(或称core js)。

DOM

这里默认大家对HTML、CSS至少有所了解,如果是直接跳过HTML、CSS来看本文的话,先看此处。

DOM,文档对象模型(document object model)

我们知道,XHTML要求标签必须闭合,嵌套必须正确。而标签的嵌套,就产生了父子关系(或者说,祖先-后代关系)。而DOM,提供了大量的API,让我们可以轻松操作DOM树。后面我会开一篇文章专门讲JS DOM。

使用DOM,我们能动态修改页面内容,调整样式等等,这也是JS多样化的一个体现。

BOM

BOM,浏览器对象模型(brower object model)

和DOM类似,只不过主体变成了浏览器。浏览器同样提供了大量的API,其中部分对JS开放,为我们提供了操作浏览器窗口的方法。

常见用处:

1.弹出新浏览器窗口的能力;

2.移动、关闭和更改浏览器窗口大小的能力;

3.可提供WEB浏览器详细信息的导航对象;

4.可提供浏览器载入页面详细信息的本地对象;

5.可提供用户屏幕分辨率详细信息的屏幕对象;

6.支持Cookies;

7.Internet Explorer对BOM进行扩展以包括ActiveX对象类,可以通过JavaScript来实现ActiveX对象。

ECMAScript core

也叫JS core,随便怎么叫,意思一样,都是表示JS这门语言的核心组成,包括变量定义,垃圾回收,语法,作用域等等。和上面提到的DOM和BOM不同,它们只要求我们能使用这些API,而ECMAScript core则是这门语言的精髓所在,需要不断钻研。下一章将进一步讲JS的语法。

JavaScript的使用

行内式

行内式即写在标签中的JavaScrip,例如我们在HTML中写入:

<button onclick="alert('be clicked');">点击</button>

当我们点击按钮时,将会弹框显示"be clicked"。
但注意,强烈不建议这么做,因为这样会给维护带来巨大的麻烦,每次需要更改事件我们都需要先找到该元素,然后修改其javascript内容,而且这些javascript代码也无法复用。

另外,写在标签中的事件需要带'on',而且标签内只能通过事件引入js,而不能写简单的js表达式

内嵌式

内嵌式即在html的script标签中写js代码,做法是在HTML中新增一个script标签,然后在标签中间插入你的任意js代码,如下:

<html>

    <body>

        <button id="btn">点击</button>

    </body>

    <script>

        <span style="font-family: Arial, Helvetica, sans-serif;">var btn = document.getElementById("btn");</span><pre name="code" class="javascript">        btn.onclick = function() {

            alert("be clicked");

        }

</script></html>

用内嵌式的话,就比行内式自由很多,可以写更多的代码,也可以避免引号的转义问题,维护也变得更轻松。但问题也是存在的,这些代码只能适用于这个页面,而无法被其他页面使用。

外联式

外联式把以上两种形式的缺点全部解决了。做法如下:

先新建一个文件,把后缀改为.js。例如,我们新建一个click.js文件,然后把刚才写的内嵌式里面的js代码拷贝进去(注意不包括script标签)

var btn = document.getElementById("btn");

btn.onclick = function() {

     alert("be clicked");

}

然后在HTML中通过script标签引入

<html>

    <body>

        <button id="btn">点击</button>

    </body>

    <script src="click.js"></script>

</html>

这样的好处在于同样的js代码可以被多个HTML页面共享,坏处是增加了文件数,增大了请求所需时间,所以应增强代码的复用性,并且最后要合并js文件(把不同的js文件合并成一个js文件)

Javascript 相关文章推荐
js中eval详解
Mar 30 Javascript
js使用post 方式打开新窗口
Feb 26 Javascript
js判断出两个字符串最大子串的函数实现方法
Nov 01 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
Dec 01 Javascript
自学实现angularjs依赖注入
Dec 20 Javascript
js实现文字无缝向上滚动
Feb 16 Javascript
js实现兼容PC端和移动端滑块拖动选择数字效果
Feb 16 Javascript
Vue结合SignalR实现前后端实时消息同步
Sep 19 Javascript
Node.js的Koa实现JWT用户认证方法
May 05 Javascript
vue添加axios,并且指定baseurl的方法
Sep 19 Javascript
JS pushlet XMLAdapter适配器用法案例解析
Oct 16 Javascript
javascript局部自定义鼠标右键菜单
Dec 08 Javascript
JavaScript的原型继承详解
Feb 15 #Javascript
javascript 闭包详解
Feb 15 #Javascript
PhotoShop给图片自动添加边框及EXIF信息的JS脚本
Feb 15 #Javascript
浅析javascript中函数声明和函数表达式的区别
Feb 15 #Javascript
不同编码的页面表单数据乱码问题解决方法
Feb 15 #Javascript
浅谈javascript中this在事件中的应用
Feb 15 #Javascript
javascript使用正则表达式实现去掉空格之后的字符
Feb 15 #Javascript
You might like
如何正确理解PHP的错误信息
2006/10/09 PHP
使用sockets:从新闻组中获取文章(二)
2006/10/09 PHP
php-accelerator网站加速PHP缓冲的方法
2008/07/30 PHP
探讨file_get_contents与curl效率及稳定性的分析
2013/06/06 PHP
PHP实现微信申请退款功能
2018/10/01 PHP
js下弹出窗口的变通
2007/04/18 Javascript
Jquery加载时从后台读取数据绑定到dropdownList实例
2013/06/09 Javascript
JavaScript中for..in循环陷阱介绍
2013/11/12 Javascript
js变形金刚文字特效代码分享
2015/08/20 Javascript
JavaScript中eval()函数用法详解
2015/12/14 Javascript
Vue.js学习之过滤器详解
2017/01/22 Javascript
JS实现弹出下载对话框及常见文件类型的下载
2017/07/13 Javascript
vue+node+webpack环境搭建教程
2017/11/05 Javascript
vue项目常用组件和框架结构介绍
2017/12/24 Javascript
React-native桥接Android原生开发详解
2018/01/17 Javascript
实时监控input框,实现输入框与下拉框联动的实例
2018/01/23 Javascript
解决vue多个路由共用一个页面的问题
2018/03/12 Javascript
关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)
2018/09/04 Javascript
JS实现计算小于非负数n的素数的数量算法示例
2019/02/26 Javascript
layui固定下拉框的显示条数(有滚动条)的方法
2019/09/10 Javascript
使用vscode快速建立vue模板过程详解
2019/10/10 Javascript
JavaScript数组去重实现方法小结
2020/01/17 Javascript
微信小程序如何实现精确的日期时间选择器
2020/01/21 Javascript
详解关于Vue单元测试的几个坑
2020/04/26 Javascript
Python类属性的延迟计算
2016/10/22 Python
浅谈python中copy和deepcopy中的区别
2017/10/23 Python
python实现kMeans算法
2017/12/21 Python
python的依赖管理的实现
2019/05/14 Python
树莓派+摄像头实现对移动物体的检测
2019/06/22 Python
在python中用print()输出多个格式化参数的方法
2019/07/16 Python
Python实现变声器功能(萝莉音御姐音)
2019/12/05 Python
亚洲独特体验旅游专家:eOasia
2018/08/15 全球购物
表扬信格式
2014/01/12 职场文书
长城导游词400字
2015/01/30 职场文书
入党转正介绍人意见
2015/06/03 职场文书
2015年党建工作汇报材料
2015/06/25 职场文书