JavaScript是互联网上最流行的脚本语言,这门语言可用于web和HTML,更广泛用于,服务器,PC端和移动端。
JavaScript是一种轻量级的编程语言,是可插入HTML页面的编程代码,可由所有浏览器执行。
HTML中脚本必须位于<script></script>中,脚本可被放置在HTML页面中的head和body中,不限制脚本数量,通常放在head中,以不干扰页面内容
JavaScript经常用来操作HTML
文档输出,document.write("<h1>你好</h1>"); document.getElementById("p").innerHTML = "你好";
JavaScript语句向浏览器发出的命令
语句之间用分号分隔
执行顺序是按照编写顺序依次执行
JavaScript标识符必须以字母,下划线或者美元符号开始(没有数字!),不可以使用关键字
JavaScript对大小写敏感
JavaScript会忽略多余的空格
单行注释// 多行注释/**/
变量是用来储存信息的容器 var a = 10; var $b = "hello";
字符串(string)、数字(number)、布尔(Boolean)、数组(array)、对象(object)、空(null)
未定义、可以通过赋值为null的方式清除变量
算术运算符:+、-、*、/、%、++、--
赋值运算符:= 、+= 、-=、*=、/=、%=
比较运算符:==、!=、<、<=、>、>=、===、!===(var i=10;var j="10"; i==j/*true*/ i===j /*false*/)
逻辑运算符:&&、||、!
条件运算符:x<10?"x<10":"x>=10"
字符串操作:var i="5"; var j="5"; i+j ------>"55"
if...else -----> if(...){...}else if(...){...}else{...}
switch -----> switch(i){ case 1: ... break; case 2: ... break; default : ... break;}
for---------->for(int i=0;i<2;i++){}
for/in------->var i=[1,2,3]; var j; for(j in i){alert i[j];}
while-------->while(i<3){...}//先判断后执行
do...while--->do{...}while(i<3);//先执行后判断
break------->跳出当前循环
continue---->结束本次循环,继续下一次循环
return------->返回
了解函数的用途:函数是事件驱动的或者当它被调用时执行的可重复使用的代码块。
定义函数:function 函数名(){函数体;(代码块)}
调用函数:函数定义好后不能自动执行,需要调用。在script标签内调用,在HTML文件中调用
带参数的函数:在函数的调用过程中,也可以传递值,这些值被称作参数。通过传递参数的个数及类型完成不同的功能。
带返回值的函数:有时我们需要把函数的值返回给调用它的地方,通过return执行,之后不要有任何代码。
局部变量和全局变量:局部(在函数内部声明var a=1;)全局(函数外面var b=2;或者任意地方c=3;但是如果在函数内部的话,需要先调用这个函数,这个变量才是全局变量。?)
异常:当JavaScript引擎执行JavaScript代码时发生错误,导致程序停止运行。
异常抛出:当异常产生的时候,并且将这个异常生成一个错误信息
异常捕获:try{发生异常的代码块}catch(err){错误信息处理}
throw语句:创建一个自定义错误
事件是可以被JavaScript侦测到的行为
onclick、onmouseover、onchange(文本内容改变)、onselect(文本框选中)、onfocus、onblur、onload(网页加载)、onunload(关闭网页)
当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)
JavaScript能够改变页面中的所有HTML元素
JavaScript能够改变页面中的所有HTML属性
JavaScript能够改变页面中的所有CSS样式
JavaScript能够对页面中的所有事件作出反应
改变HTML输出流(注意绝对不要在文档加载完成之后使用document.write(),这会覆盖该文档)
通过ID或者标签名寻找到HTML元素(document.getElementById,document.getElementByTagName相同元素中第一个)
改变HTML内容,使用innerHTML
改变HTML属性,使用attribute(eg:document.getElementById(...).href="...")
通过DOM对象改变CSS
语法:document.getElementById(id).style.property = new style;
addEventListener();//向元素添加事件句柄
removeEventListener();//移除事件句柄
document.getElementById(id).addEventListener("click",funcName);
document.getElementById(id).removeEventListener("click",funcName);
事件流:描述的是在页面中接受事件的顺序
事件冒泡:由最具体的元素接收,然后逐级向上传播至最不具体的元素的节点(文档)
事件捕获:最不具体的节点先接收事件,而最具体的节点应该是最后接收事件
通俗的讲就是事件被触发的顺序
HTML事件处理:直接添加到HTML结构之中(优点:简便;缺点:不便修改)
<button onclick="hello()">hello</button>
DOM0级事件处理:把一个函数赋值给一个事件处理程序属性(优点:和HTML无关;缺点:会被覆盖)
document.getElementById(id).onclick=function(){};
DOM2级事件处理:(优点:不会被覆盖;)
addEventListener("事件名","事件处理函数","布尔值")(true 事件捕获,false 事件冒泡)
removeEventListener();
document.getElementById(id).addEventListener("click",funcName);
兼容解决:IE事件处理(版本小于8)
attachEvent和detachEvent
“DOM2级事件”中规定的事件流同时支持了事件捕获阶段和事件冒泡阶段,而作为开发者,我们可以选择事件处理函数在哪一个阶段被调用。
addEventListener方法用来为一个特定的元素绑定一个事件处理函数,是JavaScript中的常用方法。addEventListener有三个参数:
element.addEventListener(event, function, useCapture)
第一个参数是需要绑定的事件,第二个参数是触发事件后要执行的函数。而第三个参数默认值是false,表示在事件冒泡的阶段调用事件处理函数,如果参数为true,则表示在事件捕获阶段调用处理函数。
上面一段摘自浅谈事件冒泡与事件捕获
兼容demo
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <button id="btn">hello</button> <script> var btn = document.getElementById("btn"); if(btn.addEventListener){ btn.addEventListener("click",demo); }else if(btn.attachEvent){ btn.attachEvent("onclick",demo); }else{ btn.onclick = demo(); } function demo(){ alert("hello"); } </script> </body> </html>
在出发DOM事件的时候都会产生一个对象
事件对象event:
type获取时间类型 function demo(event){alert(event.type);}//click,mouseover...
target获取事件目标 function demo(e){console.log(e.target);}//<button id="btn">hello</button>
stopPropagtion()阻止事件冒泡
preventDefault()阻止事件默认行为
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div id="div"><button id="btn">button</button></div> <script> document.getElementById("btn").addEventListener("click",showBtn); document.getElementById("div").addEventListener("click",showDiv); function showBtn(e){ alert(e.type); e.stopPropagation();//阻止事件冒泡 } function showDiv(){ alert("div"); } </script> </body> </html>当点击button按钮的时候,不仅会alert出"click",而且还会alert出"div",就是因为事件冒泡,阻止事件冒泡见上面代码注释
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <a id="a" href="http://www.baidu.com">baidu</a> <script> function showA(e){ e.preventDefault();//阻止事件默认行为(href) } </script> </body> </html>当点击a标签时,会跳转到百度首页,但是如果阻止事件默认行为,就不会跳转了。