Chinaunix首页 | 论坛 | 博客
  • 博客访问: 957431
  • 博文数量: 210
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2070
  • 用 户 组: 普通用户
  • 注册时间: 2014-11-19 21:54
文章分类

全部博文(210)

文章存档

2020年(2)

2019年(18)

2018年(27)

2017年(5)

2016年(53)

2015年(88)

2014年(17)

分类: Web开发

2016-08-19 21:17:46

原文地址:javascript基础【一】 作者:windhawkgyang

2015/11/13 16:10:04

javascript自诞生之初就处于争论之中,但是这依旧不影响其成为今天WEB编程的主流语言。最初的javascript设计用于在浏览器端提供数据交互、画面渲染、会话认证等动态功能,如今node.js的流行使得javascript扩展到了服务器端。

javascript作为一门弱类型的脚本语言,语法并不复杂,作为今时代的程序猿们,无论是否进行WEB开发,熟悉了解javascript都百利无一害。所以今天就让我们来干净利落地认识下javascript吧!

一、什么是javascript?

javascript是一种动态脚本语言,专门用于Web应用开发,最主要的功能是为页面添加动态行为效果,具体有:

  • 将动态文本嵌入到HTML页面;
  • 响应浏览器事件(javascript是一种事件相应语言,对于用户鼠标点击、移动等行为都可以进行响应);
  • 读写HTML元素(如表单提交等);
  • 在数据提交到服务器前验证数据;
  • 检测访客的浏览器信息;
  • 控制cookie,包括创建和修改等;
  • 基于Node.js技术进行服务器端编程

可以说,javascript是在客户端针对HTML页面动态行为进行编程的直译型脚本语言,使得Web浏览器不仅仅是显示用户页面那么简单。但是也正是由于javascript部署在客户端,因此其安全性一直是人们关注的焦点。

二、javascript调试

javascript脚本的执行主要通过各大浏览器厂商自主开发的解析引擎实现。现有的主流javascript解析引擎主要有:Chrome的V8引擎、IE9的JS引擎以及Firefox的TraceMonkey;

进行javascript开发,我们往往习惯有个类似于VS那样的IDE可以直接使用,但是由于javascript本身就是一种“轻量级”语言,因此我们只需要简单的文本编辑器 + javascript解析引擎 就可以进行开发调试了。

大家当然可以使用Windows下的记事本或者Linux的Vim编辑器,但是我建议大家还是使用专门的代码编辑器比较好,因为具有语法高亮提示、自动补全等诸多便利。这里我使用的文本编辑器是nodepad++,而搭配的调试器就是简答的Firefox,当然你也可以使用IE、Chrome甚至Safri,因为nodepad++支持多种浏览器调试。

在Notepad++中的“运行”菜单下可以选择在哪种浏览器中运行调试javascript脚本,也可以使用上面的快捷键。

三、javascript测试程序

接下来,我们提供一个非常简答的javascript脚本,里面涉及的知识点会逐一讲解。

首先是我们的javascript脚本:program.js我们先来看一段代码:


点击(此处)折叠或打开

  1. document.writeln('');
  2. document.writeln("Hello, world!");
  3. var a = 100000000000000000000e400;
  4. if (a < Infinity)
  5. {
  6.     document.writeln(a);
  7.     document.writeln('a less than Infinity, 3Q~~');
  8. }
  9. else
  10. {
  11.     document.writeln(a);    
  12.     document.write('Sorry, a more than Infinity!\n');
  13. }

第1行:document.writeln()与document.write()都用来向终端(浏览器)输出信息,区别在于“ln”版本自带换行符;
第3行:定义一个变量,无需声明其类型,只需要使用关键字“var”即可;
第4行:javascript中依旧可以使用基本的控制结构,如if-else, while以及for等;javascript的数字统一用64位的浮点表示,所以1.0与1表示的值相同;此外,NaN表示一个不能产生正常结果的运算结果,而所有大于1.798e308的数值统一用Infinity表示,e308表示10的308次幂;所以当输入的值大于定义值时,统一显示为Infinity;


点击(此处)折叠或打开

  1. var a = 10, b = 9;

  2. document.writeln(a);

  3. function add(x,y)
  4. {
  5.     return x + y;
  6. }

  7. function subtract(x,y)
  8. {
  9.     return x - y;
  10. }

  11. document.writeln(add(a,b));

第5行开始定义了一个简单的函数,一个是加法(add),另一个则是减法(subject),然后在终端输出时调用该函数;


点击(此处)折叠或打开

  1. document.writeln("Global Object...");
  2. var MyObj = {};

  3. MyObj.member = {'first-name': "Alice", last_name : "Winston"};

  4. MyObj.record = {
  5.     airline: 'T2B',
  6.     number: 777,
  7.     departure: {
  8.         Date:"Sunday",
  9.         Time:"2015-11-01",
  10.         City:"Taiwan"
  11.     },
  12.     arrival: {
  13.         Date:'Monday',
  14.         Time:"2015-11-02",
  15.         City:"Beijing"    
  16.     }

  17. };

  18. document.writeln("Retrive a non-exit attribute value ..exa..MyObj.people..");
  19. document.writeln(MyObj.people);

  20. document.writeln("typeof MyObj.member is ...");
  21. document.writeln(typeof MyObj.member);

  22. document.writeln("MyObj.record.number is ...");
  23. document.writeln(typeof MyObj.record.number);

  24. document.writeln('MyObj.record.airline is ...');
  25. document.writeln(typeof MyObj.record.airline);

由于javascript的函数中没有局部域,因此经常使用全局域。有编程经验的大伙儿都知道,全局变量非常容易混乱,所以建议像本文一样在开头统一建立一个全局对象,然后所有的操作作为其中的一部分,也就是说我们定义的全局对象其实是一个“全局容器”。
javascript中简单数据类型包括数字、字符串、布尔值、null值和undefined五种,其它所有的值都是对象,如数组、函数以及正则表达式。简言之,javascript中对象就是可变的键控集合(keyed collections)。对象由不同的属性组成,属性的名字可以是包括空字符串在内的任意字符串,属性值可以是除undefined之外的任何值。

第2行初始化一个空的全局对象MyObj;
第4行为对象MyObj添加一个属性member,而member又是一个对象,包含两个键值对,每个键值对用','分隔,最后一个属性不用加符号;
第7-8行的属性名为一个字符串,这里建议使用javascript的标识符规范(数字、字母与下划线,首字符只能是字母),因为这样写可以省略掉“”来表示字符串,如“first-name”不能省略“”,而可以写成first_name;不仅如此,在对象的属性检索时可以方便的使用引用符号“.”进行,比如MyObj.member.last_name,而非规范标识符只能用MyObj.member.["first-name"],非常麻烦;

点击(此处)折叠或打开

  1. //对象属性值的更新
  2. document.writeln('Attribute value update...');
  3. document.writeln(' Once Date is ' + typeof MyObj.record.departure.date);

  4. MyObj.record.departure.Date = 'Saturday';

  5. document.writeln(MyObj.record.departure.Date);

  6. //对象枚举
  7. document.writeln('Object enume...')
  8. var name;
  9. for (name in MyObj.record)
  10. {
  11.     document.writeln(name + ':' + MyObj.record[name]);

第3行使用typeof获得对象的类型,typeof运算符的值只有"string"、"boolen"、"undefined"、"function"和"object"五种;
第5行直接对已有的属性更新,若已存在,则更新;若没有,则创建该属性键值对;
第9行展示了枚举一个对象的所有属性,借助for-in结构,我们可以枚举出所有的属性(包括函数和原型中的属性),而且得到的枚举不一定是按顺序的,所以一般建议使用for()的形式规定遍历方式;

接下来是我们的program.html

点击(此处)折叠或打开

  1. <html>
  2.     <body>
  3.         <pre>
  4.          <script src = "program.js">
  5.          </script>
  6.         </pre>
  7.     </body>
  8. </html>
这里关键就是第4行中嵌入了一个javascript脚本,
第3行的告诉浏览器按照源码的样式显示;
最后我们来看看结果:
  不足之处欢迎大家批评指正!
 
 Refer:《Javascript语言精粹》,Douglas Crockford, 电子工业出版社 
	


阅读(888) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~