js:javascript用来展示与用户交互的行为。
ECMA:欧洲计算机制造协会
ISO/IEC:国际标准化组织以及攻击电工委员会
ECMAScript描述的内容
- 语法
- 类型
- 语句
- 关键字
- 保留字
- 运算符
- 对象
ECMAScript规范的三种实现
- JavaScript
- ActionScript 基于flash实现的前端动画效果 简称as
- ScriptEase
JavaScript的构成
- 核心(ECMAScript) js语法规范
- 文档对象模型(DOM) document object model 作用:整合js HTML css
- 浏览器对象模型(BOM) Browser object model 作用:整合js和浏览器 控制浏览器的行为
JavaScript在开发过程中大多数情况下是基于对象的,也是面向对象的。
面向对象编程语言的四个基本特征:
- 封装
- 继承
- 多态
- 聚集(抽象):在对象中具有包含(引用)其他对象的能力
js使用中,绝大多数情况下,不需要进行面向对象的设计,绝大多数情况下是使用已有的设计好的对象。
js与HTML结合的两种方式
- 在页面中使用
alert(1);
来直接写js代码 标签位置任意 - 通过
来引用JavaScript代码
js标签可以放在页面的任意位置 位置越靠前,执行越早。
js外部文件推荐扩展名是.js。其实可以使用任意扩展名。
通过script标签引入外部js文件,那么在该标签中就不要书写js代码。
在一个页面中引入的script标签数量没有任何限制。
ECMAScript语法
- 变量区分大小写
- 可以一次声明多个变量,并且变量不必具有相同的类型
- 命名规范:
- 第一个字符必须是字母,下划线 或者美元符号
- 余下的字符可以是下划线,美元符号或者字母或者数字字符,但是不能包含其他特殊字符。
- 变量是若类型的
- 每一行的分号可有可无,没有就按换行符的末尾作为结尾
- 注释与Java相同
- 使用{}来封装代码块
- 变量声明不是必须的
- 变量使用var声明
- 字符串使用单引号或者双引号引起来
- 变量的类型可以改变
- 变量命名遵循驼峰式命名规则
- 变量声明时,var不是必须的:如果在变量声明时,不适用var,那么该变量是全局变量,使用变量时,会全局查找,找不到则会创建。var关键字创建的是局部变量。
ECMAScript的程序遇到未声明的标识符时,用该变量名创建一个全局变量,并将其初始化为指定值。
最好的习惯是像使用其他语言一样,总是声明所有变量。
js中没有文档注释,但是可以使用文档注释,效果和多行注释效果是一样的
js中数据类型分为原始数据类型和对象数据类型。
js中的原始数据类型: number 和string Boolean类型 null undefined js中没有char类型
null通常用来表示该变量是一个对象
js中变量的默认初始值默认是undefined
函数中没有返回值时,默认返回undefined
js中 typeof 用来判断一个变量时那种原始数据类型
null返回object时js的一个bug,但是被认为很贴切,所以保留了 该bug。
js中的语句
- 循环 for for(var x in xxx )(用来遍历对象的属性) while(){} do{}while()
- 判断 if(){} if(){}else{}……
- 选择 switch(){}
var c = +”abc”转换失败,类型为number 返回NaN
NaN not a number 专门用来表示无效数字的特殊值
在js中if语句的条件可以是任意的对象
js中Boolean运算数据类型的自动转换的规律
- String “”转换为false ,其他转换成true
- number NaN和0转换成 false,其他都转换成true
- null 转换成false
- undefined 转换成false undefined由null衍生出来的,所以undefined == null
NaN的特性
- NaN参与的任何布尔型运算返回值都是false,除了 !=
- NaN 与NaN之间也是不想等的
在比较的时候
- 当运算符两端,一端是数字,一端是其他类型时,其他类型会自动像数字类型转换(abc……等字符串会转换成NaN)
- 字符串在进行比较时,规律是:比较首字符的asc码,如果一样,比较第二位,……
js中 false === 0, true == 1 undefined 与null 都 !=0
js中没有真正意义上的类。
object类是所有类的父类。
js中通过function关键字来定义方法,在js中一个方法就是一个函数对象,只是该对象可以调用执行
函数对象的toString方法,打印的是函数对象的完整定义。
函数的定义方式:
//函数的定义方式一
var fun = new Function("a,b","alert(a+b)");//等价于
var fun = new Function("a","b","alert(a+b)");//也等价于
function fun(a,b){
alert(a+b);
}
//方式二:
function fun(){
}
//方式三:
var func = function(){
}
匿名函数
function(){
}
可以自执行,在函数的定义之后添加一个().
在js中,可以定义同名的变量,后定义的变量会覆盖先定义的变量。函数其实就是一个以函数名为变量名的变量。
function a(a,b){
alert(a+b);
}//相当于var a = function(a,b){alert(a+b);}
var a = 1;
var b = 2;
a(a,b);//这一行出错,因为a已经在后面定义成了number而不在是一个函数。
在js中,给函数传递的参数不受定义时的参数个数限制,可以传递多于定义时的参数个数,多余的参数不会被使用到,也可少传递参数,少传递的参数默认赋值为undefined。甚至可以传递0个参数。
总结:js中函数的调用只看函数名称,不看参数列表。
js中没有函数重载,后定义的同名函数,不管参数是否相同,都会覆盖之前定义的函数。
js中,函数都有一个属性arguments.length 表示函数运行时的实际参数个数。
return的两个作用:
- 返回值
结束方法的调用
<a href="javascript:void(0)"></a>
是为了给a标签添加事件,而不进行跳转
void()是用来拦截函数的返回值的。
ECMAScript中的对象分类
- ECMAScript自己定义的对象 也称之为本地对象。 包括
- Object
- Function
- String
- Boolean
- Number
- Array
- Date
- RegExp
- 内建对象 build in object 可以直接使用而无需创建实例。(Global和Math)
- 不是ECMAScript自己定义的对象 主机对象(host object)包括
- BOM
- DOM
js中原始类型的string number boolean可以直接使用对象类型的方法和属性
string number boolean 是原始数据类型 也是伪对象
String Number Boolean是对象类型
Boolean和Number在开发中几乎不使用。
String的属性和方法
属性
- length 字符串长度
- prototype 允许通过该属性添加属性和方法
- constructor 创建该对象的函数的引用
方法
在js中对象通过new关键字创建。
instanceof判断属于那种对象。typeof判断的是属于那种原始数据类型。
通常会对URL进行转码提交
js中创建数组的方式:
- 1.var arr = [1,2,4]; var arr=[]创建一个空数组
- 2.var arr1 = new Array(1,2,3);
- 3.var arr2 = new Array(3);
- 创建数组时,数组Array的构造函数如果只传递一个参数,并且这个参数是整数,那么这个整数就是数组的初始长度。
- 在js中数组的长度是可以改变的。
- js中数组可以存放多种类型的数据。—类型任意
数组的角标必须是连续的。
join可以给数组添加一个分割符
js中大量字符串相加的时候,可以使用join来进行优化 把字符串都放在数组里面,然后join(“”)
在Java中stringbuffere的效率之所以相对较高,是因为创建的对象少。
sort()方法排序,默认按照字符串规则排序
date对象
date.getDay()获得星期几
月份计数是0-11
星期计数是0-6,国外是从星期天开始计数的。
正则表达式
构造方法,接受两个参数
* 1.正则表达式
* 2.匹配模式
- i 忽略大小写 ignoreDCase
- g 全局匹配 global
方法:
test 测试表达式是否与正则规则匹配