JavaScript是一种运行在浏览器中的解释型的编程语言javascript
推荐:菜鸟教程
1、简介
js:javascript是基于对象【哪些基本对象呢】和和事件驱动【哪些主要事件呢】的语言,应用在客户端(注意与面向对象的区分)css
js的三大特色:
交互性:信息的动态交互
安全性:不能访问本地磁盘的文件
跨平台性:能支持js的浏览器都能运行html
JavaScript 对大小写敏感
与java的区别:(只是长得像而已,雷锋&雷峰塔)
1.不一样公司开发的语言,java:Oracl js:网景公司
2.java:面向对象 js:基于对象(已经有不少存在能够直接使用的对象)
3.java:强类型语言 js:弱类型语言
4.java:须要先编译再运行 js:不须要java
js的组成:
ECMAScript
ECMA:欧洲计算机组织 基本语法
BOM
Broswer Object Model 浏览器对象模型
DOM
Document Object Model 文档对象模型
用以访问 HTML 元素的正式 W3C 标准node
2、与HTML两种结合方式(建议放在</body>后)
1.使用script标签 <script type="text/javascript"> js代码 </script>
那些老旧的实例可能会在 <script> 标签中使用 type="text/javascript"。
如今已经没必要这样作了。JavaScript 是全部现代浏览器以及 HTML5 中的默认脚本语言。
2.使用script标签,引入外部js文件 <script type="text/javascript" src="js文件路径">【此处应为空】</script>
提示:外部脚本不能包含 <script> 标签。面试
请使用 document.write() 仅仅向文档输出写内容。
若是在文档已完成加载后执行 document.write,整个 HTML 页面将被覆盖:编程
3、基本语法(注释同java)
1.原始类型和变量声明:
五个数据类型:【string——详细方法,参见菜鸟教程。 number boolean】 null undifined
JavaScript 变量有不少种类型,可是如今,咱们只关注数字和字符串
极大或极小的数字能够经过科学(指数)计数法来书写:数组
使用var进行变量定义,使用typeof(变量名);查看当前变量类型
var data=new Data(); 拿到对象引用,null表示引用为空,父类都为Object浏览器
类型转换可使用对应的方法:String(x),Number(x)
2.js的语句:
if判断语句(同java)
switch语句,弱类型,都支持 switch(){
case:
break;
case:
break;
}
循环语句 for while do{}while 相似java
3.js的运算符:
与java不一样的,因为是弱类型,var i=1;1/10*10=1(不是java的0)
字符串+同java的拼接 相减时会真正执行(非数字报错NaN)- var str="2" str-1=1;
boolean类型也能够进行加减运算,true为1 false为0
== :等于,只判断值,与类型无关
=== :全等,检测值和类型
向页面输出:document.write();输出值或者HTML代码 ("aaa") ("<hr/>") 对应99乘法表案例
4.js的数组:
弱类型,存取数据无类型要求
表示方法: var arr=[1,"aa",true];
使用内置对象Array var arr1=new Array(5),长度为5; 取同java arr1[0]=1;
var arr2=new Array(3,4,5);为具体元素
长度属性:length 如arr.length
5.js的函数:【写完方法记得调用,注意单双引号和分号的使用】
定义方式:使用function关键字:function 函数名(参数列表){} 返回值可选
调用方法:函数名(参数列表);参数列表不带类型
弱类型语言,无需类型
function add(a,b){ var sum=a+b; alert(sum);}
add(2,3);
匿名函数:function(){} 调用 var add3=function(){} add3(5,6);
与上一种相似
动态函数:【做了解】使用内置对象Function new Function("参数列表","方法体和返回值");
使用方式同上,参数列表 方法体能够提出来写
6.js的全局变量和局部变量
全局变量:在一个script中定义一个变量,全局js页面中均可以使用。(其它的script也能够)
**IE中调试工具,按F12缓存
7.script标签的放置的位置:
理论上是全局均可以(包括HTML标签后)
原则:放在</body>后面,因为HTML是由上到下解析,能够保证获取到HTML中的值等。
8.js的重载:
js中是不支持重载的,缘由是js中识别函数的惟一方法就是函数的函数名
如想模拟java的重载,能够经过函数体中队参数的判断进行模拟
9. JavaScript 对象
对象由花括号分隔。在括号内部,对象的属性以名称和值对的形式 (name : value) 来定义。属性由逗号分隔:
var person={firstname:"Bill", lastname:"Gates", id:5566};
固然也能够new一个本身的 var person = new Object();
当您像这样声明一个 JavaScript 变量时:
var txt = "Hello";
您实际上已经建立了一个 JavaScript 字符串对象。字符串对象拥有内建的属性 length。
对于上面的字符串来讲,length 的值是 5。字符串对象同时拥有若干个内建的方法
JS对象:
1、string对象,相似于java两种建立方式(栈中或者堆中)HTML不区分大小写,JS区分
属性和方法:length属性 如 str.length
方法:1.与HTML相关的方法:
bold()方法:加粗。 如str.bold();
fontcolor()方法:字体颜色。如str.fontcolor("red");
fontsize()方法:字体大小。如str.fontsize(2);
link()方法:字符串显示为链接。如str.link("连接地址");str为连接显示内容
sub()与sup()方法:设置上标与下标
2.与java类似的方法:
concat()方法:链接字符串。如str.concat("a");
charAt()方法:返回指定位置字符 str.charAt(2);超出为空(非null)
indexOf()方法:返回位置,没有返回-1;
split()方法:将字符串切分为字符数组(从分隔符处分割为数组元素
replace方法:替换,如str.replace("原始值","新值");
substr()与substring():取子字符串
2、Array对象,建立方法见初识JS
属性和方法:length属性 如arr.length
方法:concat()方法:链接数组,返回一个新合成的数组
join()方法:使用指定链接符,返回元素链接而成的字符串
push()方法:向数组末尾添加新元素,而且返回新的数组长度,若加的是数组,
新返回的长度还是原长度加1,加入的视为一个元素!
pop()方法:删除最后一个元素并返回该元素
reverse()方法:颠倒数组元素顺序(改变原数组)
3、Date对象,建立 var date=new Date();类同java
方法:toLocaleString()方法:格式化方法
获得年,推荐getFullYear()方法
获得月,使用getMonth()方法,注意返回范围0-11
获得星期,使用getDay()方法,返回0-6,从周日开始
获得日,使用getDate()方法,范围1-31,正常
获得小时,getHours()方法,分秒同理
getTimes()方法:返回1970年1月1日至今的毫秒数
应用场景:使用毫秒数来处理缓存
4、Math对象,相似java也是静态方法,经过类名来调用,如Math.ceil(100.2);
方法:Math.ceil()方法:向上取整
Math.floor()方法:向下取整
Math.round()方法:四舍五入
Math.random()方法:获得随机数,同java,0.0到1.0之间的伪随机数
5、全局函数,因为全局函数不属于任何一个对象,直接写函数名使用
方法:eval();执行js代码 ,var str = "alert("1122")"";eval(str);
encodeURI:对字符编码,encodeURI(str);返回编码值
decodeURI:对字符解码,为上述逆序
isNaN();判断当前字符串是不是数字,是数字返回false,NaN表示不是数字
parseInt();类型转换,类同java,字符串转数字
6、JS的重载
注意java中重载:名称相同,参数可辨
重写:子类父类相同方法名称与参数的不一样实现
JS不存在重载!但能够经过其余方法模拟实现重载。【然而并无什么卵用,仅面试答答】
arguements数组,保存传递的参数,就经过这个数组来实现
function add(){//此处不传参数,函数内判断
if(arguements.length==2){
return arguements[0]+arguements[1];
}else if(...){
...
}
...
7、JS的BOM对象(浏览器对象)
对象:navigator:获取浏览器的信息(客户机)如navigator.appName等(注意是属性。
对象包含有关访问者浏览器的信息。具备误导性
srceen:屏幕信息,如srceen.width
location:(重点看href属性)href,设置或返回当前请求的url地址(HTML中的button的事件绑定
<input type="button" value="点击跳转" onclick="js代码方法等"/>
location.href="".
history:请求的url的历史记录
<input type="button" value="back" onclick="back()"/>
function back(){history.back();}其它同理,history.forward();
还能够history.go(-1或1实现)
【重点】window:窗口的顶层对象(包含上述四个)
方法:(window.alert();等为完整代码,可省略,依次类推
alert();警告框页面弹窗,显示内容
confirm();确认提示框,会返回一个肯定与否的boolean值
根据返回值作相关操做,if()
prompt();输入的对话框【了解】,两个参数,提示信息与默认值
close();是否关闭的方法(兼容性差)
作定时器使用的方法:
setInterval();两个参数,JS代码与毫秒数(1:1000)
如:setInterval("f1();",1000)
setTimeout();相同参数,倒计时后执行代码,单次执行
======================================
clearInterval(); 清除setInterval定时器
clearTimeout(); 同上,须要传的参数为set的返回值,清除此值实现
8、JS的DOM对象:getElementById()获取,操做使用innerHTML 以及直接.属性名操做
改变样式:document.getElementById("p2").style.color="blue";
文档对象模型,document为超文本文档,使用这些属性方法对超文本文档操做
也就是第一步须要将这些文档封装成对象,而且解析这些超文本文档(如HTML)
分配一个 树形 结构(层级结构)进行解析。好比说span里的id属性也会封装成对象
对象:
document对象:整个HTML文档
element对象:元素对象,标签对象
属性对象
文本对象
Node对象:即上述对象的父对象(树中结点对象),子对象中找不到
想找的方法时。找父对象。
DHTML:动态HTML,多项技术的合称(html,css,dom,js(此时强调的是ECMAScript))
9、document对象
方法:(注意须要调用的格式 ,如document.write())
write();向页面输出文本及html代码等
getElementById();经过ID获得元素,
如<input type="text" id="tex" name="name1" value(默认值)="aa"/> var input1 =document.getElementById(); //获得的是对象 alert(input1.value);
getElementsByName();经过NAME获得一个集合(理解为对象数组)
如同上述有四个同name的输入项 var inputs =document.getElementsByName();
经常使用的遍历,for(var i=0;i<inputs.length;i++)
getElementsByTagName();经过标签名字获得
如var inputs=document.getElementsByTagName("input");
windou弹窗案例:见案例
注意问题,案例中访问的是本地文件,因为JS的安全机制,浏览器不生效,固然此状况
仅限于此案例,实际开发不会如此操做
在末尾添加结点案例:见案例
基本思路是建立节点,进行添加。基本步骤:
1.获取ul标签
2.建立li标签
3.建立文本
4.将文本添加到li下
5.将li添加到ul下
10、元素对象,element对象:要操做必需要获取到(get...)了解。
方法:getAttribute();获得属性的值。input1.getAttribute("value");
setAttribute(name,value);设置相应属性的值IE缓存的清理。
removeAttribute();删除属性,但不能删value!
属性:childNode: 获取子标签,返回集合(对象数组) ul.childNode
兼容性差
【重点】方法:在ul下执行ul1.getElementsByTagName();获取子标签的惟一有效方法,
document里的方法特殊用法
11、Node对象
属性一:nodeName;
nodeType;
nodeVlaue;
使用DOM解析HTML的时候,HTML里面的标签 属性 文本都封装成对象
标签可使用三个属性,例如id属性也可使用三个属性,var id1 = span1.getAttribute();
标签 属性 文本
nodeType 1 2 3
nodeName 大写(SPAN等) 属性名称 如#text
nodeValue null 属性的值 文本的值
!经常使用的为nodeType(从外到内)
属性二:父节点,子节点,同辈节点:层级结构,类同数据结构
parentNode,childNodes(兼容性差)firstChild lastChild,
12、 操做DOM树:
先document.createElement("p");
var node=document.createTextNode("这是新段落。")
para.appendChild(node);
建立了一个带文本的p标签,后面能够再使用类似方法操做
appendChild()方法:实现剪切粘贴的效果。注意是剪切效果!
insertBefore(newNode,oldNode)方法:在旧结点以前实现插入新结点,经过old结点的父节点进行添加,毕竟不能本身添加本身
!不存在insertAfter方法
removeChild():方法,经过父节点进行删除操做,本身也不能删除本身
基本步骤:获取要删除的结点、获取父节点。进行删除操做
replaceChild();方法,类同上删除操做。得到要替换的旧结点,建立要替换的新结点,
获取父节点,进行替换。
cloneNode(boolean)复制结点,bool表示是否复制。通常是true,东西理解为放在剪切板
操做的是剪切板的内容(操做副本),原内容还在。
十3、innerHTML属性:非DOM组成部分,主流浏览器均兼容,【用的多】
主要做用:获取文本内容 如span1.innerHTML注意是属性
向标签里设置内容(能够是html代码)如div11.innerHTML = "";
var tab = "<table></table>";注意外面双引号,里面单引号。
案例:动态显示时间:见案例。
全选练习:见案例。checked=true表示选中
下拉列表左右选择案例:见案例。
select中multiple="multiple"属性实现显示全部下拉选择
selected="true"表示选中
省市联动案例:见案例。select的onchange方法;注意循环的长度,让i回来以便取完。
动态生成表格案例:见案例。
一些事件:
js事件,待更新。。。
实例
本例检测输入变量的值。若是值是错误的,会抛出一个异常(错误)。
catch 会捕捉到这个错误,并显示一段自定义的错误消息:
<script>
function myFunction()
{
try
{
var x=document.getElementById("demo").value;
if(x=="") throw "empty";
if(isNaN(x)) throw "not a number";
if(x>10) throw "too high";
if(x<5) throw "too low";
}
catch(err)
{
var y=document.getElementById("mess");
y.innerHTML="Error: " + err + ".";
}
}
</script>
<h1>My First JavaScript</h1>
<p>Please input a number between 5 and 10:</p>
<input id="demo" type="text">
<button type="button" onclick="myFunction()">Test Input</button>
<p id="mess"></p>