-------------------------------------------------------------------------<<JavaScript>>---------------------------------------------------------------------------------------
核心(ECMAScript)
文档对象模型(DOM)Documnt object model(整合js,css,html)
浏览器对象模型(BOM)Broswer object model(整合js和浏览器)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1:语法
2:类型
3:语句
4:关键字
5:保留字
6:运算符
7:对象(封装 继承 多态)基于对象的语言,使用对象。
------------------------------------------------------------------------js的引入方式-------------------------------------------------------------------------------------------
1:直接编写
<script>
alert('helo wukong')
</script>
2:导入文件
<script src='js文件路径'></script>
------------------------------------------------------------------------js的变量,常亮和标识符----------------------------------------------------------------------------------
1:js的变量。
(1):--------声明变量时不用声明变量类型,用var关键字。
var a;<br>a=3;
(2):--------一行可以声明多个变量,并且可以是不同类型。
var name='wukong',age=20,job="lecture";
(3):声明变量时可以不用var,如果不用var那么他是全局变量。
(4):变量命名,首字符只能字母,下划线$符,区分大小写。
2:常量:---------------------------直接在程序中出现的数值
(1):由不以数字开头的字母,数字,下划线_,$符组成
(2):常用于表示函数,变量名等名称。
(3):js语言中代表特定含义的词称为保留字,不允许程序再定义为标识符
------------------------------------------------------------------------js的数据类型-------------------------------------------------------------------------------------------
1:number--------数字类型-------NaN:属于Number类型的一个特殊值,当遇到将字符串转成数字无效时,就会得到一个NaN数据
2:boolean-------布尔值
3:string--------字符串
4:undefined-----(不明确,未定义的)
Undefined 类型只有一个值,即 undefined。当声明的变量未初始化时,该变量的默认值是 undefined。
当函数无明确返回值时,返回的也是值 "undefined";
5:null-----------(只有一个值的类型)
6:typeof---------查看数据类型
------------------------------------------------------------------------运算符-------------------------------------------------------------------------------------------------
1:算数运算符:
+ - * / % ++ --
2:比较运算符:--------比较运算符两侧如果一个是数字类型,一个是其他类型,会将其类型转换成数字类型.
--------比较运算符两侧如果都是字符串类型,比较的是最高位的asc码,如果最高位相等,继续取第二位比较.
> < >= <= != == ===(全等于) !==
3:逻辑运算符:
&& || !
4:赋值运算符
= + -= *= /=
5:字符串运算符
+ 连接(两边操作数有一个或两个是字符串做连接运算)
------------------------------------------------------------------------流程控制-----------------------------------------------------------------------------------------------
1:顺序结构
<script>
console.log("星期一");
console.log("星期二");
console.log("星期三");
</script>
2:分支结构;
(1):if-else结构
if (表达式){
语句1;
......
}
else{
语句2;
......
}
(2):if-elif-else结构:
if (表达式1){
语句1;
}
else if (表达式2){
语句2;
}
else if (表达式3){
语句3;
}
else{
语句4;
}
(3):switch-case结构
switch (表达式){
case 值1:语句1:break;
case 值2:语句1:break;
case 值3:语句1:break;
case 值4:语句1:break;
default:语句4;
}
3:循环结构
(1):for循环:
for(初始表达式;条件表达式;自增或自减)
{
执行语句
......
}
for(变量 in 数组或对象)
{
执行语句
......
}
(2):while循环
while (条件)
{
语句1;
...
}
------------------------------------------------------------------------异常处理-----------------------------------------------------------------------------------------------
try{
这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行
}
catch (e){
如果try代码块中抛出了异常,catch代码块中的代码就会被执行。
e是一个局部变量,用来指向Error对象或者其他抛出的对象
}
finally{
无论try中代码是否有异常抛出(甚至是try代码块中有return语句),finally代码块中始终会被执行。
}
------------------------------------------------------------------------JavaScript对象-----------------------------------------------------------------------------------------
一:string对象(字符串)
1:创建
(1)变量 = "字符串"
var str1="hello word";
(2)字符串对象名称=new String(字符串)
var str1=new String("hello word")
2:字符串对象的属性和函数
(1):x.length----------------------------------------------------获取字符串的长度
(2):x.toLowerCase()---------------------------------------------转小写
(3):x.trim()----------------------------------------------------转大写
-------------------------------字符串查询方法-----------------------------------------
(4):x.charAt(index)---------------------------------------------获取指定位置字符的索引。
str1.charAt(index)------------------------------------------获取指定字符。
index-------------------------------------------------------获取字符索引。
(5):x.indexof(findstr,index)------------------------------------查询字符串位置
x.lastIndexof(findstr)
(6):x.match(regexp)---------------------------------------------match返回匹配字符串的数组,没有匹配则返回null
x.search(regexp)--------------------------------------------search返回匹配字符串的首字符位置索引
------------------------------字符串处理方法-------------------------------------------
(7):x.substr(start,length)--------------------------------------start表示开始位置,length表示截取长度
x.substr(start,end)-----------------------------------------end是结束位置
(8):x.slice(start,end)------------------------------------------切片操作
(9):x.replace(findstr,tostr)------------------------------------字符串替换,findstr(搜索文本)
(10):x.split()--------------------------------------------------分割字符串
(11):x.concat(addstr)-------------------------------------------拼接字符串
二:Array对象(数组)
1:创建
(1):var arrname = [元素0,元素1,......];
var arr=[1,2,3];
(2):var arrname = new Array(元素0,元素1,......);
var test = new Array(100,"a",true);
(3):var arrname = new Array(长度);
var cnweek = new Array(7);
cnweek[0]="星期日";
cnweek{1}="星期一";
...
cnweek[6]="星期六";
2:数组对象的属性和方法
(1):join方法:
x.join(bystr)------------------------------------------将数组元素拼接成字符串
var arr1=[1,2,3,4,5,6,7];
var str1=arr.join("-")
(2):concat方法:
x.concat(value,......)
var a = [1,2,3];
var b = a.concat(4,5);
(3):reverse sort;数组排序;
var arr1=[32,12,111,444];
arrl.reverse();------------------------------------------到序
arr1.sort();---------------------------------------------排序数组元素
(4):数组切片操作;
var arr1=['a','b','c','d','e','f','g','h'];
var arr2=arr1.slice(2,4);
var arr3=arr1.slice(4);
var arr4=arr1.slice(2,-1);
alert(arr2.toString());
//结果为"c,d"
alert(arr3.toString());
//结果为"e,f,g,h"
alert(arr4.toString());
//结果为"c,d,e,f,g"
(5):删除数组
var a = [1,2,3,4,5,6,7,8];
a.splice(1,2);
alert(a.toString());//a变为 [1,4,5,6,7,8]
a.splice(1,1);
alert(a.toString());//a变为[1,5,6,7,8]
a.splice(1,0,2,3);
alert(a.toString());//a变为[1,2,3,5,6,7,8]
(6):数组push和pop;-------------------------------------------模拟栈操作
x.push()--------------压栈
x.pop()---------------弹栈
var arr1=[1,2,3];
arr1.push(4,5);
alert(arr1);
//结果为"1,2,3,4,5"
arr1.push([6,7]);
alert(arr1)
//结果为"1,2,3,4,5,6,7"
arr1.pop();
alert(arr1);
//结果为"1,2,3,4,5"
(7):数组shift和unshift
x.shift()------------------------------------------------将数组x的第一个元素删除
x.unshift()----------------------------------------------将value值插入到数字x的开始
var arr1=[1,2,3];
arr1.unshift(4,5);
alert(arr1); //结果为"4,5,1,2,3"
arr1. unshift([6,7]);
alert(arr1); //结果为"6,7,4,5,1,2,3"
arr1.shift();
alert(arr1); //结果为"4,5,1,2,3
三:Data对象
(1):创建Datad对象
//方法1:不指定参数
var nowd1=new Date();
alert(nowd1.toLocaleString( ));
//方法2:参数为日期字符串
var nowd2=new Date("2004/3/20 11:12");
alert(nowd2.toLocaleString( ));
var nowd3=new Date("04/03/20 11:12");
alert(nowd3.toLocaleString( ));
//方法3:参数为毫秒数
var nowd3=new Date(5000);
alert(nowd3.toLocaleString( ));
alert(nowd3.toUTCString());
//方法4:参数为年月日小时分钟秒毫秒
var nowd4=new Date(2004,2,20,11,12,0,300);
alert(nowd4.toLocaleString( ));//毫秒并不直接显示
(2):获取日期和时间
获取日期和时间
getDate() 获取日
getDay () 获取星期
getMonth () 获取月(0-11)
getFullYear () 获取完整年份
getYear () 获取年
getHours () 获取小时
getMinutes () 获取分钟
getSeconds () 获取秒
getMilliseconds () 获取毫秒
getTime () 返回累计毫秒数(从1970/1/1午夜)
四:Math对象
abs(x) 返回数的绝对值。
exp(x) 返回 e 的指数。
floor(x) 对数进行下舍入。
log(x) 返回数的自然对数(底为e)。
max(x,y) 返回 x 和 y 中的最高值。
min(x,y) 返回 x 和 y 中的最低值。
pow(x,y) 返回 x 的 y 次幂。
random() 返回 0 ~ 1 之间的随机数。
round(x) 把数四舍五入为最接近的整数。
sin(x) 返回数的正弦。
sqrt(x) 返回数的平方根。
tan(x) 返回角的正切。
alert(Math.pow(2,4));// pow 计算参数1 的参数2 次方.
五:Function对象(函数)
1:函数的定义:
function 函数名 (参数)
{<br> 函数体;
return 返回值;
}
2:功能说明:
可以使用变量,常量或表达式作为函数调用的参数
函数由关键字function定义
函数名的定义规则与标识符一致,大小写是敏感的
返回值必须使用return
function类可以表示开发者定义的任何函数
3:语法:
var 函数名=new function("参数1","参数2","function_body");
4:function对象的属性---------------------------------------------函数属于引用类型,所以他们也有属性和方法。
alert(fun1.length)--------------------------------------length声明了函数期望的参数个数。
5:function的调用
function func1(a,b){
alert(a+b);
}
func1(1,2); //3
func1(1,2,3);//3
func1(1); //NaN
func1(); //NaN
//只要函数名写对即可,参数怎么填都不报错.
-------------------面试题-----------
function a(a,b){
alert(a+b);
}
var a=1;
var b=2;
a(a,b)
6:函数的内置对象arguments:
function add(a,b){
console.log(a+b);//3
console.log(arguments.length);//2
console.log(arguments);//[1,2]
}
add(1,2)
------------------arguments的用处1 ------------------
function nxAdd(){
var result=0;
for (var num in arguments){
result+=arguments[num]
}
alert(result)
}
nxAdd(1,2,3,4,5)
------------------arguments的用处2 ------------------
function f(a,b,c){
if (arguments.length!=3){
throw new Error("function f called with "+arguments.length+" arguments,but it just need 3 arguments")
}
else {
alert("success!")
}
}
f(1,2,3,4,5)
7:匿名函数
// 匿名函数
var func = function(arg){
return "tony";
}
// 匿名函数的应用
(function(){
alert("tony");
} )()
(function(arg){
console.log(arg);
})('123')
------------------------------------------------------------------------BOM对象------------------------------------------------------------------------------------------------
浏览器对象模型(BOM)Broswer object model(整合js和浏览器)
1:window对象:
所有浏览器都支持window对象。
概念:一个html文档对应一个window对象。
功能:控制浏览器窗口的
使用:window对象不需要创建对象,直接使用。
2:window方法:
(1):alert()----------------显示一段消息和一个确认按钮的警告框。
var result = confirm("您确定要删除吗");
alert(result);
(2):confirm()--------------显示带有一段消息以及确认按钮和取消按钮的对话框。
var result = confirm("您确定要删除吗");
alert(result);
(3):prompt()---------------显示可提示用户输入的对话框。
var result = prompt("请输入一个数字!");
alert(result);
(4):open()-----------------打开一个新的浏览器窗口或查找一个已命名的窗口。
open('','','width=200,resizable=no,height=100');
(5):close()----------------关闭浏览器窗口。
(6):setInterval()----------按照指定的周期(以毫秒计)来调用函数或计算表达式。
ID=setInterval(showTime,1000);
(7):clearInterval()----------取消setInterval设置的timeout。
clearInterval(ID);
(8):setTimeout()-----------在指定的毫秒数后调用函数或计算表达式。
(9):clearTimeout()---------取消由 setTimeout() 方法设置的 timeout。
(10):scrollTo()------------把内容滚动到指定的坐标。
-------------------------------------------DOM----------------------------------------------
文档对象模型(DOM)Documnt object model(整合js,css,html)
HTML Documnt Object Model(文档对象模型)
HTML DOM定义了访问和操作HTML文档的标准方法
HTML DOM把HTML文档呈现为带有元素,属性和文本的树结构(节点树)
-------------------------------------------DOM节点-----------------------------------
1:节点关系
(1):root--------------------根(在节点树中,顶端节点称为根)
(2):parent------------------父(每个节点都有父节点,除了根节点)
(3):child-------------------子(一个节点可拥有任意数量的子)
(4):sibling-----------------同胞(拥有相同父节点的节点)
2:节点查找
--直接查找节点
(1):document.getElementById("idname")
(2):document.getElementsByTagName("tagname")
(3):document.getElementByName("name")
(4):document.getElementByClassName("name")
--局部查找
(1):parentElement------------父节点标签元素
(2):children-----------------所有子标签
(3):firstElementChild--------第一个子标签元素
(4):lastElementChild---------最后一个子标签元素
(5):nextElementtSibling------下一个兄弟标签元素
(6):previousElementSibling---上一个兄弟标签元素
3:节点操作
(1):创建节点:
createElement(标签名):创建一个指定名称的元素。
var tag=document.createElement("input")
tag.setAttribute('type','text');
(2):添加节点;
追加一个子节点(作为最后的子节点)
somenode.appendChild(nawnode)
把增加的节点放到某个节点的前边
somenode.inserBefore(newnode,某个节点);
(3):删除节点:
removeChild():获得要删除的元素,通过父元素调用删除
(4):替换节点:
somenode.replaceChild(newnode,某个节点);
(5):节点的属性操作:
1:获取文本节点的值:innerText innerHTML
2:attribute操作:
elementNode.setAttribute(name,value)
elementNode.getAttribute(属性名)----elementNode.属性名(DHTML)
elementNode.removeAttribute("属性名");
3:value获取当前选中的value值
(1):input
(2):select(selectdindex)
(3):textarea
4:innerHTML给节点添加html代码:
该方法不是w3c的标准,但是主流浏览器支持
tag.innerHTML = “<p>要显示内容</p>”;
5:关于class的操作:
elementNode.className
elementNode.classList.add
elementNode.classList.remove
6:改变css样式:
<p id="p2">Hello world!</p>
document.getElementById("p2").style.color="blue";
.style.fontSize=48px
------------------------------------------------------------------------DOM Event(事件)----------------------------------------------------------------------------------------
1;事件类型
onclick---------------------------------------------------------当用户点击某个对象时调用的事件句柄。
ondblclick------------------------------------------------------当用户双击某个对象时调用的事件句柄。
onfocus---------------------------------------------------------元素获得焦点。 练习:输入框
onblur----------------------------------------------------------元素失去焦点。 应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证.
onchange--------------------------------------------------------域的内容被改变。应用场景:通常用于表单元素,当元素内容被改变时触发.(三级联动)
onkeydown-------------------------------------------------------某个键盘按键被按下。应用场景: 当用户在最后一个输入框按下回车按键时,表单提交.
onkeypress------------------------------------------------------某个键盘按键被按下并松开。
onkeyup---------------------------------------------------------某个键盘按键被松开。
onload----------------------------------------------------------一张页面或一幅图像完成加载。
onmousedown------------------------------------------------------鼠标按钮被按下。
onmousemove------------------------------------------------------鼠标被移动。
onmouseout-------------------------------------------------------鼠标从某元素移开。
onmouseover------------------------------------------------------鼠标移到某元素之上。
onmouseleave-----------------------------------------------------鼠标从元素离开
onselect 文本被选中。
onsubmit 确认按钮被点击。
2:绑定方式
(1):<div id="div" onclick="foo(this)">点击我</div>
<script>
function foo(self)
console.log("点你大爷!");
console.log(self);
</script>
(2):<p id="abc">试一试!</p>
<script>
var ele=document.getElementById("abc");
ele.onclick=function(){
console.log("ok");
console.log(this);
}
</script>
3:事件介绍:
(1):onload:-----------onload 属性开发中 只给 body元素加.这个属性的触发 标志着 页面内容被加载完成.应用场景:
当有些事情我们希望页面加载完立刻执行,那么可以使用该事件属性.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
/*
window.onload=function(){
var ele=document.getElementById("ppp");
ele.onclick=function(){
alert(123)
};
};
*/
function fun() {
var ele=document.getElementById("ppp");
ele.onclick=function(){
alert(123)
};
}
</script>
</head>
<body onload="fun()">
<p id="ppp">hello p</p>
</body>
</html>
(2):onsubmit:当表单在提交时触发. 该属性也只能给form元素使用.应用场景: 在表单提交前验证用户输入是否正确.如果验证失败
.在该方法中我们应该阻止表单的提交.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
window.onload=function(){
//阻止表单提交方式1().
//onsubmit 命名的事件函数,可以接受返回值. 其中返回false表示拦截表单提交.其他为放行.
var ele=document.getElementById("form");
ele.onsubmit=function(event) {
// alert("验证失败 表单不会提交!");
// return false;
// 阻止表单提交方式2 event.preventDefault(); ==>通知浏览器不要执行与事件关联的默认动作。
alert("验证失败 表单不会提交!");
event.preventDefault();
}
};
</script>
</head>
<body>
<form id="form">
<input type="text"/>
<input type="submit" value="点我!" />
</form>
</body>
</html>
(3):事件传播:
<div id="abc_1" style="border:1px solid red;width:300px;height:300px;">
<div id="abc_2" style="border:1px solid red;width:200px;height:200px;">
</div>
</div>
<script type="text/javascript">
document.getElementById("abc_1").onclick=function(){
alert('111');
};
document.getElementById("abc_2").onclick=function(event){
alert('222');
event.stopPropagation(); //阻止事件向外层div传播.
}
</script>
(4):onselect
<input type="text">
<script>
var ele=document.getElementsByTagName("input")[0];
ele.onselect=function(){
alert(123);
}
</script>
(5):onchange
<select name="" id="">
<option value="">111</option>
<option value="">222</option>
<option value="">333</option>
</select>
<script>
var ele=document.getElementsByTagName("select")[0];
ele.onchange=function(){
alert(123);
}
</script>
(6):onkeydown
<input type="text" id="t1"/>
<script type="text/javascript">
var ele=document.getElementById("t1");
ele.onkeydown=function(e){
e=e||window.event;
var keynum=e.keyCode;
var keychar=String.fromCharCode(keynum);
alert(keynum+'----->'+keychar);
};
</script>
(7):onmouseout与onmouseleave事件的区别:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
#container{
width: 300px;
}
#title{
cursor: pointer;
background: #ccc;
}
#list{
display: none;
background:#fff;
}
#list div{
line-height: 50px;
}
#list .item1{
background-color: green;
}
#list .item2{
background-color: rebeccapurple;
}
#list .item3{
background-color: lemonchiffon;
}
</style>
</head>
<body>
<p>先看下使用mouseout的效果:</p>
<div id="container">
<div id="title">使用了mouseout事件↓</div>
<div id="list">
<div class="item1">第一行</div>
<div class="item2">第二行</div>
<div class="item3">第三行</div>
</div>
</div>
<script>
// 1.不论鼠标指针离开被选元素还是任何子元素,都会触发 mouseout 事件。
// 2.只有在鼠标指针离开被选元素时,才会触发 mouseleave 事件。
var container=document.getElementById("container");
var title=document.getElementById("title");
var list=document.getElementById("list");
title.onmouseover=function(){
list.style.display="block";
};
container.onmouseleave=function(){ // 改为mouseout试一下
list.style.display="none";
};
/*
因为mouseout事件是会冒泡的,也就是onmouseout事件可能被同时绑定到了container的子元素title和list
上,所以鼠标移出每个子元素时也都会触发我们的list.style.display="none";
*/
/*
思考:
if:
list.onmouseout=function(){
list.style.display="none";
};
为什么移出第一行时,整个list会被隐藏?
其实是同样的道理,onmouseout事件被同时绑定到list和它的三个子元素item上,所以离开任何一个
子元素同样会触发list.style.display="none";
*/
</script>
</body>
</html