特点:
功能:
js脚本编程步骤:
引入js脚本代码:
script的属性:
src
用于引用外部脚本代码
一般而言将通用功能的js脚本代码作为外部脚本文件引用,而实现特有功能的js脚本代码则直接嵌入HTML文档的head标记对之间。
在开发WEB应用程序的过程中,开发者可以给HTML文档中设定不同的时间处理器,通常是设置某HTML元素的属性来引用一个脚本(可以是个简单的动作或者函数),属性一般以on开头,如鼠标移动onmousemove()等。
大部分浏览器都能理解HTML标记得核心事件(键盘,鼠标,点击,双击):
onclick,odbclick,onkeydown,onkeypress,onkeyup,onmousedown,onmousemove,onmouseover,
js脚本嵌入的位置:
一般可以按需放在head标记对之间或者body标记对之间
处理不支持js脚本的情况:
解决:
使用 <!–和–>标记对 直接屏蔽法
<script type="text/javascript">
<!--
此处添加脚本代码
-->
</script>
并没有真正的隐藏代码,依然会下载脚本,并将其作为源代码使用,只是在解释的时候忽略标记对之间的代码
使用<noscript>和</noscript>标记对提示信息
<script type="text/javascript">
此处脚本代码
</script>
<noscript>
提示不支持js脚本
</noscript>
类型 | 简要说明 |
---|---|
Number | 数值型数据,包括整数型(十进制,八进制,十六进制)和浮点型 |
String | 字符型,需要加双引号或者单引号,不区分单字符和字符串 |
Boolean | 布尔类型,不需要加双引号, |
Undefined | 未定义类型,用于不存在或者没有被赋初始值的变量或对象的属性 |
Null | 空值,一般将Undefined和Null等同看待 |
Function | 函数,可以通过new 操作符和构造函数Function()来动态创建所需要功能的函数,并且添加函数体 |
每一种基本类型对应不同的存储空间
优先级:(),[] > 一元运算符(!,~,-,++,–,typeof) > 乘除余 > 加减 > 位移 > 比较 > 按位运算 > 逻辑运算 > ?: > 赋值运算 > ,(参数间隔);
sum.result=0;
function sum(x,y){
//result相当于是函数中的静态变量
sum.result=sum.result + x + y;
return sum.result;
}
function test(){
sum(2,3);
sum(4,5);
sum(6,7);
//结果是27
alert(sum.result);
}
HTML文档将元素的常用事件当做属性捆绑在HTML元素上当该元素的特定事件发生时,对应于此事件的事件处理器就被执行,并将处理结果返回给浏览器。事件捆绑导致特定的代码放置在其所处对象的事件处理器中。
文档载入事件onload
关闭文档事件onunload
失去焦点事件onblur
获得焦点事件onfocus
拖动滚动条事件onscroll
页面大小改变事件onresize
down:按下
up:松开
press:按下并松开
基于对象:以DOM和BOM中定义的对象模型及操作方法为基础,但又不具备面向对象语言所必备的显著特征,如继承,多态,封装等,只能通过嵌入其他面向对象编程语言如Java的Java Applet组件等来实现Web应用程序的功能。
JavaScript对象
客户端浏览器载入HTML文档时,对于所有可编码的HTML元素按照DOM规范和载入元素的顺序生成对象数组,然后进行初始化供JavaScript脚本使用。
文档对象的引用
HTML文档载入时,浏览器解释其代码,当遇到自身支持的HTML元素对象对应的标记时,就按HTML文档载入的顺序在内存中创建这些对象**而不管**JavaScript脚本是否真正运行这些对象。对象创建后,浏览器为这些对象提供专供JavaScript脚本使用的可选属性,方法,和处理程序。
DOM定义的HTML文档节点类型:
节点类型 | 说明 |
---|---|
元素(Element) | 标记元素 |
属性(Attribute) | 标记元素的属性 |
文本(Text) | 被标记括起来的文本段 |
注释(Comment) | |
文档(Document) | 根对象 |
文档类型(DocumentType) | 文档类型, |
文档对象属性
节点属性 | 说明 |
---|---|
nodeName | 当前节点名字 |
nodeValue | 当前节点的值,对于文本节点 |
nodeType | 节点类型相对应的值,如上表所示 |
parentNode | 父节点 |
childNodes | 子节点集合,如果存在 |
firstChild | 第一个孩子,如果存在 |
lastChild | 最后一个孩子,如果存在 |
previousSibling | 前一个兄弟节点 |
nextSibling | 下一个兄弟节点 |
Attributes | 当前节点属性列表 |
ownerDocument | 指向包含节点(标记)的HTML document对象 |
属性:length
方法 | 说明 |
---|---|
toUpperCase() | |
toLowerCase() | |
concat(String str2) | 连接字符串,可以使用+代替 |
split(separetor[,num]) | 使用分隔符进行分隔 |
split(regexpression[,num]) | 使用正则表达式分隔 |
substr(num1[,num2]) | 返回指定位置的字符串 |
indexOf(string[,num]) | 返回string所在的索引 |
lastIndexOf() | |
match(regexpression) | 匹配正则表达式 |
search(regexpression) | 匹配正则表达式,不成功返回-1 |
replace(regexpression,str2) |
所有的属性和方法都是静态的
属性:PI,E,LN10(10的自然对数),LN2(2的自然对数)等
方法 | 说明 |
---|---|
abs() | |
sin() | |
log() | |
exp() | |
ceil() | 向上取整 |
floor() | 向下取整 |
round | 最接近的整数 |
random() | 生成0到1之间的随机数 |
两种定义方法:
var array = new Array();//空数组,之后可以动态添加元素
var array = new Array(4);//长度为4
var array = new Array(arg1,…,argN);//长度为N
如果只有一个参数的话,只数组长度
var array = [arg1,,,arg4,…,argN]//有些位置可以不初始化
属性:length
方法 | 说明 |
---|---|
concat() | 连接 |
jion() | 所有数组元素转换为字符串,并把所有字符串合并,中间用“,”隔开 |
jion(string) | 用指定的字符串隔开,而不是用“,” |
pop() | 两个方法组合形成栈操作 |
push() | |
reverse() | 反转数组 |
slice(start) | 切片,从start到结尾 |
slice(start,stop) | 切片,从start到stop |
splice(start,delete,arg3,…,argN) | delete为0表示不执行任何删除操作 |
new Date()
new Date(milliseconds)
new Date(string)
new Date(year,month,day,hours,minutes,seconds,milliseconds)
定时器:
setTimeout(“function”,timeout),之执行一次
setInterval(“function”,timeout),重复执行
clearTimeout(timer)
//有对应的set方法
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth();
var day = date.getDate();
var week = date.getDay();
var hour = date.getHours();
var minute = date.getMinutes();
var second = date.getSeconds();
var millieconds = date.getMilliseconds();
var time = date.getTime();
属性:MAX_VALUE,MIN_VALUE,NaN,NEGTTIVE_INFINITY,POSITIVE_INFINITY
new Function(arg,”statement”);
function定义一个函数,是一个特殊的Function对象
Event 对象代表事件的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。
事件通常与函数结合使用,函数不会在事件发生前被执行!
事件句柄 (Event Handlers)
HTML 4.0 的新特性之一是能够使 HTML 事件触发浏览器中的行为,比如当用户点击某个 HTML 元素时启动一段 JavaScript。下面是一个属性列表,可将之插入 HTML 标签以定义事件的行为。
属性 | 此事件发生在何时… |
---|---|
onabort | 图像的加载被中断。 |
onblur | 元素失去焦点。 |
onchange | 域的内容被改变。 |
onclick | 当用户点击某个对象时调用的事件句柄。 |
ondblclick | 当用户双击某个对象时调用的事件句柄。 |
onerror | 在加载文档或图像时发生错误。 |
onfocus | 元素获得焦点。 |
onkeydown | 某个键盘按键被按下。 |
onkeypress | 某个键盘按键被按下并松开。 |
onkeyup | 某个键盘按键被松开。 |
onload | 一张页面或一幅图像完成加载。 |
onmousedown | 鼠标按钮被按下。 |
onmousemove | 鼠标被移动。 |
onmouseout | 鼠标从某元素移开。 |
onmouseover | 鼠标移到某元素之上。 |
onmouseup | 鼠标按键被松开。 |
onreset | 重置按钮被点击。 |
onresize | 窗口或框架被重新调整大小。 |
onselect | 文本被选中。 |
onsubmit | 确认按钮被点击。 |
onunload | 用户退出页面。 |
<!--
注意代码是怎么传递按键事件
-->
<body> 查询一个字符串是否存在"abc"<br/> <input type="text" id="regexTest" name="regexTest" onkeypress="seach(event)"> </body> <script type="text/javascript"> function seach(event){ var keyNum = 0; if(event.keyCode){ keyNum = event.keyCode; }else if(event.which){ keyNum = event.which; } if(keyNum == 13){ var string = document.getElementById("regexTest").value; var regex = new RegExp("abc"); if(regex.test(string)){ alert("搜索结果:目标字符串存在字符串‘abc’"); }else{ alert("搜索结果:目标字符串不存在字符串‘abc’"); } } } </script>
使用JS生成并管理浏览器基本框架,并且熟悉框架之间的通信方式
顶级对象:window,frames,navigator,screen,history,location,document
定义模式:/Expression/
两种方式创建正则表达式
显示声明:new RegExp(“pattern”[,flags])
隐式声明:/Exception/[flags]
flag:i,g,m
RegExp方法 | 说明 |
---|---|
test() | var flag = objectRegExp.test(String)对指定字符串执行一次测试性探索,返回一个Boolean值是否存在匹配。会改变lastIndex,但是不改变index;再次执行时从lastIndex开始 |
exec() | var array = objectRegExp.exec(String)返回一个数组,array[0]包含了完整的匹配结果,而元素array[0]~array[n]依次是各个子匹配结果。若没有匹配,则返回null;当设置了global时,每次从上次exec方法返回的lastIndex开始,否则每次都从0开始 |
compile() | 更换RegExp对象实例所使用的表达式模式 |
String方法 | 说明 |
---|---|
search() | var index = stringObj.search(regex);找到则返回匹配的开始位置,否则返回-1 |
match() | var array = stringObj.match(regex);执行全局查找,返回一个数组。注意如果有‘g’标识,match和exec返回结果不一样,match返回的结果是所有匹配结果的数组,而不是子匹配的数组(exec) |
replace() | var newStr = stringObj.replace(regex,”expression”); |
split() | 返回按照分隔符标识符将一个字符串拆分为若干个字符串时锁产生的字符串数组。var array = stringObject.split(regex[,limit]); |
function demo(){
var string = "在正则表达式查找前后,实例属性值不变,而静态属性值则会有明显的变化";
var regex = /属性/g;
var msg = "实例属性:";
msg += "\n\t是否全局搜索global:" + regex.global;
msg += "\n\t是否忽略大小写ignoreCase:" + regex.ignoreCase;
var len = 0;
msg += "\n匹配结果:";
var array;
while((array = regex.exec(string)) != null){
len++;
msg += "\n\t第" + len + "个匹配项:"
msg += "\n\t\t匹配子串起始位置index:" + array.index;
msg += "\n\t\t匹配子串后第一个字符的位置lastIndex:" + array.lastIndex;
}
msg += "\n\t共匹配" + len +"个。";
alert(msg);
}