一、简介

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是实体

在函数执行过程,形参值的改变不会影响实参

按值传递

Java Script有哪些版本 java script入门_javascript

 

按地址传递原理图:

在js中,对象类型默认就是按地址传递

 

Java Script有哪些版本 java script入门_c#_02

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>

Java Script有哪些版本 java script入门_ViewUI_03

 

局部访问全局使用作用域链

全局访问局部可以使用闭包进行模拟

 

六、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>

Script 执行流程图

Java Script有哪些版本 java script入门_游戏_04