一、简介
1、 什么是javascript
JavaScript 是网景(Netscape)公司开发的一种基于客户端浏览器、面向(基于)对象、事件驱动式的网页脚本语言。
2、 为什么要使用javascript
表单验证
网页特效
小游戏
Ajax
3、快速入门
在程序中,如果想编写js代码,有两种办法:
1)在html文件中,在一对script标记中,直接编写
<script language='javascript'>
document.write('hello');
</script>
2)在js中,直接编写,在html中,使用一对script标记直接引用
<script language='javascript' src='demo01.js'></script>
以上两种不能在一对script标记中重复使用
二、基础语法
1、基本格式
JavaScript区分大小写
变量a和变量A是两个变量
JavaScript脚本程序须嵌入在HTML文件中
JavaScript脚本程序中不能包含HTML标记代码
<script>
document.write(‘<table></table>’);
</script>
每行写一条脚本语句
语句末尾可以加分号
JavaScript脚本程序可以独立保存为一个外部文件
2、关于script标签
<script>
Language:引用的语言 javascript、php、c#、VBSCRIPT
Src:引用一个外部的js文件
3、关于变量
变量是用来临时存储数值的容器,变量存储的数值是可以变化的
变量必须要先声明才能使用,使用var声明变量
使用var声明:局部变量
没有使用var声明:全局变量
变量的命名规则:第一个字符必须是英文字母,或者是下划线(_);其后的字符,可以是英文字母,数字,下划线;变量名不能是JavaScript的保留字
变量的作用域:全局变量、局部变量
4、数据类型
String :字符串 ‘’ “”
Number :数字 10、10.01、100
Boolean :布尔型 true、false
Undefined :未定义
Null :空
'utf-8';
<script type="text/javascript" language="javascript">
//使用js描述一个人的完整信息
var name='张三';
var age = 30 ;
var marry = true ;
var height = 1.8 ;
//打印到列表上
document.write('<ol>');
document.write('<li>姓名'+ name + '</li>');
document.write('<li>年龄'+ age + '</li>');
document.write('<li>婚否'+ marry + '</li>');
document.write('<li>身高'+ height + '</li>');
document.write('</ol>');
Object :对象
function Person (){}
var p1 = new Person ();
p1.name = 'WangWu';
p1.age = 20 ;
document.write(p1.name+'<Br>');
document.write(p1.age);
5、运算符
算术运算符
+、-、*、/、%、++、--
i++
++i
<script type="text/javascript">
var i=10;
var j=i++; //先赋值后自加
var k=++i; //先自加后赋值
document.write(j); //10
document.write(k); //12
</script>
比较运算符
>、<、>=、<=、!=、==、===、!==
==和===有何区别?
== :判断值是否相等
===:判断值相等类型也相同
<script type="text/javascript">
var i=5; //Number
var j="5"; //String
if(i==j){document.write("相等"+'<Br>');}
if(i===j){document.write("全相等");}
</script>
逻辑运算符
&&、||、!
赋值运算符
=、+=、-=、*=、/=、%=
将运算符左边的与右边的进行计算,再赋值给左边的
字符串运算符
+、+=
三、流程结构
顺序结构
分支结构
循环结构
1、顺序结构
代码是一行接着一行执行
2、分支结构
If、else、else if、switch
3、循环结构
For、while、do....while、for.....in
小游戏:
猜数游戏:进入到页面之后、随机一个数1--500、弹出输入框,由用户输入一个数字,如果这个数字大于随机数,提示:大了,反之提示,小了。如果相等,提示:猜对了,然后程序结束
<script type="text/javascript">
// alert(Math.random()); 0到1 之间的小数
// Math.random()*500; 0到500间的小数
var n = Math.round(Math.random()*500); //四舍五入取整 ,将其赋值给一个变量
// document.write(n);
// prompt ("Please Input a number between 1~500"); 输入框
while(true){
var number = prompt (" Please Input a number:"); //接收用户输入的数据
if (number > n) alert('Big');
if (number < n) alert('Small');
if (number == n) {alert('OK'); break;}
}
</script>
四、函数
1、函数的功能
代码重复性使用
模块化编程
2、语法:
使用函数前要先定义才能调用
函数定义有三个部分:函数名,参数列表,函数体
定义函数的格式
function 函数名([参数1,参数2...]){
函数执行部分;
return 表达式;
}
调用语法:
函数名(实参1,实参2,......,);
五、代码示例
例1:关于函数的定义和调用
<script type="text/javascript">
// //函数的定义
// function display(){
// alert('Hello');
// }
// //函数的调用
// display ();
// display ();
// display ();
// display ();
</script>
例2:关于函数的参数问题
//关于函数的传参
function display (first,second){
alert(first + second);
}
var i = 10;
var j = 20;
display (i,j);
在上题中,first,second是形参,i,j是实体
在函数执行过程,形参值的改变不会影响实参
按值传递
按地址传递原理图:
在js中,对象类型默认就是按地址传递
function display(obj){
obj.name='lisi';
}
var p1 = new Object();
p1.name='zhangsan';
display(p1);
alert(p1.name);
例3:关于函数的返回值问题
var i = 10;
alert(i); //变量是可以保存数据的,也可以保存地址
function display (i) {
alert ("Hello"); //变量名存在栈中,变量的数据存在堆中(堆比栈大,栈比堆快)函数存在计算机的代码段中,代码段中的数据引用来自于栈中的一个,,,函数名就是首地址,display是存在于window对象下的
//函数和数组一样,是一段连续的地址
return i; //函数遇到return会立即返回,后面的代码不执行
}
//i = display ; //将函数的首地址赋值给i ,变量i 也指向了这个函数的首地址
//i(); //括号表示执行;
//var i = display ;
// i () ;
//var i = function display (){
//alert("hello");
//}
//i();
例4:关于匿名函数
//匿名函数
// var i =function (){ //
// alert("123");
// }
// i();
Var i=10; 变量可以保存数据,也可以保存地址
Function display(){
} 在window对象下添加一个叫display的变量,它指向了这个函数的首地址
Window.i=display 我们让window对象下的i指向这个函数的首地址
display() ======= i();
例5:自调用匿名函数
(function(){alert("js");})(); //function(){} 函数的定义,返回函数的首地址
//(function(){}) //函数的首地址
//(function(){})() //小括号代表执行
(function(first){
alert(first);
alert('hello js');
})(10)
Function(){} :相当于返回首地址
(Function(){}) :把这部分看做一个整体
(function(){})():相当于找到这个地址并执行
以上这种写法:可以避免代码库中的函数有重命问题,并且以上代码只会在运行时执行一次,一般用做初始化工作。
例6:全局变量与局部变量
// i = 10 ; //全局
// var j = 20; //仍然是全局的
// function display(){
// var k = 30; //局部的
// p = 40 ; //全局的
// }
在函数内部定义的就是局部的,否则就是全局的
//var i =10 ;
function display() {
//var i =20; //局部变量只在局部作用域起作用
i =20 ; //全局的,会将全局i的值修改为20
}
display();
alert(i);
如果函数内的变量没有var声明会直接影响全局的
为什么没有var是全局的?
是因为,在js中,如果某个变量没有var声明,会自动到上一层作用域中去找这个变量的声明语句,如果找到,就使用,如果没有找到,继续向上查找,一直查找到全局作用域为止,如果全局中仍然没有这个变量的声明语句,那么会自动在全局作用域进行声明,这个就是js中的作用域链
代码示例:
<script type="text/javascript">
var i =10;
function fn1(){
// i =100;
var i=100; // 将作用域中的i修改为10000
function fn2(){
i = 1000;
function fn3(){
i=10000;
}
fn3();
}
fn2();
}
fn1();
alert(i);
</script>
局部访问全局使用作用域链
全局访问局部可以使用闭包进行模拟
六、arugments的使用
在一个函数内部,可以使用arguments属性,它表示函数的的形参列表,它是以数组形式体现的
例1:在定义display函数时,它的实参个数必须要与形参个数保持一致,有时,我们定义函数时,形参数目不能固定,如何解决?
// function display(name,name2){
// document.write(name);
// document.write(name2);
// }
// display("lisi",'zhangsan');
例2:如果定义时,参数个数不确定,可以通过arguments来保存所有实参
function display(){
//没有定义形参,那么形参会自动存放到arguments这个属性数组中
for(var i=0;i<arguments.length;i++){
document.write(arguments[i]+'<br>');
}
}
display('zhangsan','lisi','wanwu'); //三个实参
display('zhangsan','lisi','wanwu','zhaoliu','guanyu'); //五个实参
例3:使用js函数来计算每个公司的员工工资总额
<script type="text/javascript">
//sum =0;
function display(){
var sum =0; //总额
for(var i= 0; i< arguments.length;i++){
sum+=arguments[i];
}
document.write(sum+'<br>');
}
//A公司
display(10000,2000,5000);
//B公司
display(1000,2000,5000,8000,10000);
</script>
七、javascript中的词法分析
Js中的script是分段执行的
例1:在之前script语句段定义的变量和函数可以在其它script语句段使用。
<script type="text/javascript">
// var i =10;
</script>
<script type="text/javascript">
// alert(i);
/</script>
例2:在一个js程序中,可以有多个script语句段,那么它们如何工作?
1、读入第一个代码段
2、编译
声明变量、声明函数、语法检查、语义检查、代码优化、分析并得到代码树.......
Var i=10;
Var i;
3、执行
i=10;
4、读入下一个代码段
5、编译
6、执行
7、……
8、结束
<script type="text/javascript">
//alert(i); //undefined 运行错误,语法没问题
//var i = 10; //编译进行声明,执行进行赋值
</script>
首先,对上面这个script语句段进行编译,这时已经声明了变量i,这时它是undefind
例3:js中的错误类型
编译错误 :是指在编译时发生的错误,如:语法错误
<script type="text/javascript">
//alert(i; //语法错误
</script>
运行错误 :是指在运行时发生的错误
<script type="text/javascript">
//alert(i); //undefined 运行错误,语法没问题
//var i = 10; //编译进行声明,执行进行赋值
alert(i; //编译错误
alert(i); //运行错误
alert('hello'); //编译在执行前,编译错了,代码就不执行了
</script>
无论是哪种错误,当前代码段中的后面的代码都不执行
编译时,如果发生错误,那么当前代码会停止执行,而执行后面代码段的内容
运行时,如果发生错误,但前面的代码已经执行完毕,所以不会影响前面的内容
alert('hello');
alert(i; //编译错误
alert(i); //运行错误
无论是哪种错误,不会影响后面的代码的执行
<script type="text/javascript">
alert(i; //编译错误
alert(i); //运行错误
</script>
<script type="text/javascript">
alert('hello'); </script>
编译错误和运行错误出现时,对各自代码段的影响
<script type="text/javascript">
alert(i; //如果代码中出现了编译错误,代码中所有的声明全都无效
alert(i); //运行错误
var first =10;
function display(){
alert('hello');
}
</script>
<script type="text/javascript">
alert(first);
display();
</script>