0.1概述
javascript:是运行在浏览器是上的脚本语言,简称js
javascript的出现让浏览器更加的生动,不再是单纯的静态页面。页面更具有交互性。
javascript程序不需要我们程序员手动编译,浏览器直接手动打开解释执行。
javascript包括三块:ECMAScript、DOM、BOM
ECMAScript是核心语法。
DOM编程是通过js对HTML中的dom节点进行操作。
BOM编程是对浏览器本身进行操作。
DOM和BOM的区别和联系?
BOM的顶级对象是:window
DOM的顶级对象是:document
实际上BOM是包括DOM的!
0.2HTML嵌套javascript代码的三种方式
方式一:事件句柄
js是一门事件驱动型的编程语言,依靠事件去驱动,然后执行对应的程序。
在js中有很多事件,并且任何事件都会对应一个事件句柄,事件和事件句柄的区别:事件句柄是在事件单词前添加一个on。
事件句柄是以HTML标签的属性存在的,在该属性中写js代码,一条语句结束之后可以使用分号,也可以不用。
方式二:脚本块
<script type="text/javascript">
js代码
//遵守自上而下的顺序依次逐行执行,可以有多个脚本块,出现位置随意
// js单行注释
/**/js多行注释
</script>
方式三:引入外部js文件
<script type="text/javascript" src="js文件路径">
//js文件中的代码也会遵循自上而下的顺序依次逐行执行
//引入的同时不能执行js代码,也就是不能写js代码
//必须有结束标签
</script>
同一文件可以引入多次
0.3js语法
标识符:命名规则和规范按照java执行
变量:
js是一种弱类型语言,没有编译阶段,可以所以赋值。
声明:var
全局变量:在函数体之外声明的变量属于全局变量。
生命周期:浏览器打开时声明,浏览器关闭时销毁
局部变量:在函数体当中声明的变量,包括形参,如果不加var就会成为全局变量。
生命周期:函数开始执行时局部变量的内存空间开辟,函数结束之后,局部变量的内存空间释放。
函数:
等同于java语言的方法,函数也是一段可以被重复利用的代码片段,函数一般都是可以完成某个特定功能的。
js的函数不需要指定返回值类型,返回什么类型都行。
js的函数在调用的时候,参数的类型和个数没有限制。
方式一:
function 函数名(形参列表){
函数体;
}
方式二:
函数名 = function(形参列表){
函数体;
}
js数据类型:
js的变量在声明的时候不需要指定数据类型,但是在赋值时,每一个数据还是有类型的。
js中的数据类型有:原始类型、引用类型
原始类型:Undefined、Nnmber、String、Boolean、Null
引用类型:Object及其子类
ES规范,在ES6及之后基于以上6种之外添加一种新的类型:Symbol。
typeof运算符,可以在程序的运行阶段动态获取变量的数据类型。
typeof的运算结果是这6个字符串之一:"undefined"、"number"、"string"、"boolean"、"object"、"function"。
变量为空,tyoeof运算结果为"object"。
在js中比较字符串是否相等使用"==",没有equals。
Undefined:Undefined类型只有一个值undefined,当一个变量没有赋值,系统默认赋值undefined。
Number:整数、小数、正数、负数、NaN、Infinity都属于Number类型。
NaN:运算结果本来应该是一个数字,但是最后不是数字,就是NaN,比如:100/"中国人"。
Infinity:当除数为0的时候,结果无穷大,比如:10/0。
isNaN函数:true表示不是一个数字,false表示是一个数字。
Boolean:true和false
Boolean类型有个函数Boolean(),可以将非布尔类型转为布尔类型。
一般在if()里的Boolean()可以省略。
String:可以使用单引号,也可以使用双引号
方式一:
var s = "abc"; //s是"string",属于String类型
方式二:
var s2 = new String("abc"); //s2是"object",属于Object类型
String是一个内置类,父类是Object。
Object:是所有类型的超类,自定义的任何类型都默认继承Object,会继承Object类中所有的属性以及函数。
prototype属性:给类动态的扩展属性和函数。
定义类:定义类就跟定义函数一样,得看你是如何来区别是函数还是方法。类的定义也是构造函数的定义。
方法名(); //普通函数调用
var obj = new 方法名(); //这时的方法就当做一个类创建对象
定义类的属性:this.属性名 = 形参名
定义类的函数:this.函数名 = function(){};
null NaN undefined的区别:
数据类型不一致:null是"object"为Null类型,NaN是"number"为Number类型,undefined是"undefined"为Undefined类型。
null和undefined可以等同,==为true,===为false。
js中有两个特殊的运算符:
==(等同运算符,值判断值是否相等)。
===(全等运算符,即判断值是否相等,又判断数据类型是否相等)。
0.4事件
回调函数:自己把函数写出来了,但是这个函数不是自己负责调用,由其他程序负责调用该函数。
注册事件方式一:使用事件句柄,将回调函数注册到按钮上。
注册事件方式二:使用纯js代码
var aa = 获取按钮对象
aa.事件句柄 = 回调函数,函数不需要加小括号
0.5js代码的执行顺序
1.onload事件句柄:页面加载完成执行
<body onload="回调函数">
<script type="text/javascript">
function 函数名(){};
</script>
</body>
2.window.onload
<script type="text/javascript">
window.onload=function 函数名(){};
</script>
0.6捕捉回车键值
<script type="text/javascript">
window.onload=function 函数名(){
var usernameElt = document.getElementById("username");
//回车键的键值是13
//ESC的键值是27
//onkeydown键盘按下事件,event是形参名,接收的是事件对象,不管是什么事件都会传事件对象
usernameElt.onkeydown = function(event){
//获取键值,对于键盘事件,都有keyCode属性用来获取键值
if(event.keyCode==13){
//js代码
}
}
};
</script>
0.7void运算符
void运算符:执行表达式,但不返回任何结果。
javascript::告诉浏览器后面是一段js代码。
<a href="javascript:void(0)" onclick="window.alert("test code")">
既保留住超链接的样式,同时用户点击该超链接的时候执行一段js代码,但页面不能跳转
</a>
0.8控制语句
控制语句和java一样用。
if、switch
while、do..while..、for循环
break、continue
for..in(了解)
for(var i in arr){ //i是数组的下标,如果是对象,那么i就是对象的属性名,是字符串
alert(arr[i]);
}
with(了解)
with(u){
alert(username); //会在username前加上u.,变成u.username
}
0.9DOM编程
1.获取并修改文本框的value
var aa = document.getElementById("id");
var bb = aa.value; //获取
aa.value = "zhangsan"; //修改
2.innerHTML和innerText属性设置元素内部的内容
相同点:innerHTML和innerText都是设置元素内部的内容
不同点:
innerHTML会把后面的"字符串"当做一段HTML代码解释并执行。
innerText即使后面是一段HTML代码,也只会将其当做普通的字符串来看待。
var aa = document.getElementById("id");
aa.innerHTML="<font color='red'>用户名</font>";
aa.innerText="<font color='red'>用户名</font>";
3.正则表达式
正则表达式主要用于字符串格式匹配方面
常见的正则表达式符号:
.:匹配除换行符以外的任意字符
\w:匹配字母或数字或下划线或汉字
\s:匹配任意的空白符
\d:匹配数字
\b:匹配单词的开始或结束
^:匹配字符串的开始
$:匹配字符串的结束
*:重复零次或更多次
+:重复一次或更多次
?:重复零次或一次
{n}:重复n次
{n,}:重复n次或更多次
{n,m}:重复n到m次
\W:匹配任意不是字母、数字、下划线、汉字的字符
\S:匹配任意不是空白符的字符
\D:匹配任意非数字的字符
\B:匹配不是单词开头或结束的位置
[^x]:匹配除了x以外的任意字符
[^aeiou]:匹配除了aeiou这几个字母以外的任意字符
创建方式一:
var regExp = /正则表达式/flags;
创建方式二:使用内置类RegExp
var regExp = new RegExp("正则表达式","flags");
关于flags:
g:全局匹配
i:忽略大小写
m:多行搜索(如果前面是正则表达式,不能使用m。只有前面是普通字符串才可以使用)
test()方法:
true|false = 正则表达式.test("用户填写的字符串");
true:字符串格式匹配成功
false:字符串匹配失败
4.复选框的全选和取消全选
5.获取下拉列表选中项的value
6.输出
document.write(内容):将内容输出到页面中,可以是HTML代码
7.周期函数
var aa = window.setInterval(code,millisec); //执行
window.clearInterval(aa); //取消执行
code:必需,要调用的函数或要执行的字符串。
millisec:周期性执行或调用code之间的时间间隔,以毫秒计。
1.0BOM编程
1.开启窗口,可以添加具体的地址为参数
window.open("地址","窗口类型")
第二个参数可取值:
_blank:新窗口(默认)
_parent:父窗口
_self:当前窗口
_top:顶级窗口
2.关闭当前窗口
window.close()
3.消息框
window.alert("消息")
4.确认框
window.confrim("确认信息")
返回值Boolean
5.history的前进和后退
<input type="button" value="前进" onclick="window.history.go(-1)" />
<input type="button" value="后退" onclick="window.history.back()" />
6.将当前窗口设置为顶级窗口
//如果当前窗口的顶级窗口不是自己,就把自己设置为顶级窗口
if(window.top!=window.self){
window.top.location = window.self.location;
}
7.将字符串当做一段js代码解释并执行
window.eval("var i = 100");
alert("i = " + i); //i = 100
8.location设置浏览器的请求地址
var aa = window.location;
aa.href="http://www.jd.com";
总结有哪些方法可以通过浏览器往服务器发请求?
1.表单form的提交
2.超链接
3.document.location.href
4.window.location
5.window.open("url")
6.直接在浏览器地址栏输入url,任何回车
以上所有的请求均可以携带数据给服务器,只有通过表单提交的数据才是动态的
1.1数组
方式一:
var arr = []; //创建长度为0的数组
var arr2 = [1,2,3,false,"abc",3.14]; //数据类型随意
arr2[1000] = "test"; //数组会自动扩容,前面下标位置的值为"undefined"
方式二:
var a = new Array();
var a2 = new Array(3); //3表示长度
var a3 = new Array(3,2); //3和2就是具体的元素
1.2JSON
json是一种标准的轻量级的数据交换格式。
特点:体积小,易解析
在实际的开发中有两种数据交换格式,使用最多,其一是JSON,另一个是XML。
XML体积较大,解析麻烦,优点是语法严谨。
1.创建json对象
var studentObj = {
"sno" : "110",
"sname" : "张三",
"sex" : "男"
}
2.访问json对象的属性
alert(studentObj.sno)
3.创建json数组
var students = [
{"sno":"110","sname":"张三","sex":"男"},
{"sno":"111","sname":"张四","sex":"女"},
{"sno":"112","sname":"张五","sex":"男"}
];
4.遍历json数组
for(var i = 0; i < students.length; i++){
var stuObj = student[i];
alert(stuObj.sno);
}
在js当中:[]和{}有什么区别? []是数组,{}是json