个人Javascript学习

一、JavaScript简介

1.1        什么是JavaScript

JavaScript,简称JS,由NetScape(网景)公司提供的一门语言;

JS是一门嵌入在网页中执行的脚本语言,专门用于实现网页交互;

JS嵌入在网页中,由浏览器负责解析并执行。为网页添加各种各样的动态效果或者为表单添加校验,目的是为了提供更好的用户体验;

JS和其他语言一样,有自身的数据类型、表达式、运算符、语句等程序的基本组成部分;

JS目前已经被广泛的应用于Web开发。

1.2        JS特点和优势(了解)

        1、特点:

                (1)JS是一门直译式的语言,直接执行的就是源代码,是一边解释一遍执行,没有编译的过程(不像Java需要提前编译为class文件再运行)

                (2)JS是一门弱类型的语言。

                Java中声明变量:

                String s1 = "Hello Java";

                int num = 100;

                JS中声明变量:

                var s1 = "Hello JS";

                var num = 100;

                var x = 100;

                x = "abc";

                x = true;

                x = [];

                x = {};

        2、优势:

                (1)良好的交互性

                (2)一定的安全性(JS被强制的要求,不能访问浏览器以外的东西,只能访问浏览器和浏览器内部的资源)

                (3)跨平台性(Java语言具有跨平台性,是因为有虚拟机):只要有浏览器的地方都能执行JS

1.3        在HTML书写JS的方式

        1、在script标签内部可以书写JS代码:

<!-- 引入JS的第一种方式: 直接在script标签内部书写JS代码 -->

<script type="text/javascript">

/* 在script标签内部可以书写JS代码和JS注释 */

alert( "引入JS的第 1 种方式...." );//alert在网页中弹出一个警告框

</script>

        2、通过script标签引入外部的JS文件

<!-- 引入JS的第二种方式: 引入外部的JS文件 -->

<script type="text/javascript" src="test.js"></script>

需要注意的是:

(1)引入JS文件的script标签最好不要自闭,如果自闭了可能会导致部分浏览器引入JS文件失败!例如:

        <script src="demo.js"/>

(2)引入JS文件的script标签内部不要再写JS代码,即使写了也无法执行

        <!-- 引入JS的第二种方式: 引入外部的JS文件 -->

        <script src="demo.js">

        alert( 333 ); //此处的代码是不会执行的!

        </script>

(3)script标签通常会放在head或body标签内部(放在其他地方也可以执行)

(4)通过事件绑定,也可以将JS代码直接写在元素上,例如:

        <input type="button" value="别点我" onclick="alert('不让你点你非要点!!!')"/>

二、JavaScript语法

2.1        注释格式

        JS的注释符合和Java的注释符合相同,如下:

        // 单行注释内容

        /* 多行注释内容 */

2.2        数据类型

        1、基本数据类型

        JS的基本数据类型一共有五种,分别是数值类型、字符串类型、布尔类型、undefined、null。

(1)数值类型(number)

JS中的数值在底层都是浮点型,但在需要时会自动的和整型之间进行转换,例如:

        2.4+3.6 结果是6,而不是6.0

还有一些是js数值类型中的特殊值:

Infinity 正无穷大

-Infinity 负无穷大

NaN 非数值

(2)字符串(string)

JS中字符串属于基本数据类型,并且JS中的字符串类型可以使用单引号或者双引号引起来,例如:

var str1 = "Hello JS";

var str2 = 'Hello JS';

JS的字符串类型在底层有对应的包装对象--String

var str3 = "Hello JS";                                     // typeof str3 -- string

//js中的一个运算符typeof:是用来返回变量或者是表达式的数据类型

var str4 = new String("Hello JS");                 // typeof str4 -- Object

str3.valueOf(); // 当需要时,会将字符串转成对应的包装对象,从而调用属性或方法

str4.valueOf();

(3)布尔类型(boolean)

布尔类型常用于条件测试中,值为true和false。

(4)undefined 和 null

undefined类型的值只有一个,就是undefined,从字面上理解就是变量未定义,当声明了变量但没有为变量赋值时,该变量的值就是undefined。

null类型的值也只有一个,就是null,表示空值,可以用于函数的返回值,表示函数返回的是一个空的对象。

        2、复杂数据类型

        JS的复杂数据类型主要指对象(JS的内置对象、JS自定义对象、数组、函数)

2.3        变量声明

        1、在JS中通过var关键字声明变量,例如:

var a = 10; //声明一个变量,赋值为10

var b = true; //声明一个变量, 赋值为true

var c = "Hello JS"; //声明一个变量,赋值为字符串"Hello JS";

        2、在JS中声明的变量不区分类型,可以指向任意类型的数据,例如:

var x = 10; //声明一个变量x, 并赋值为10, 此时变量x的数据类型为 number

x = "abc"; //将字符串"abc"赋值给x, 此时变量x的数据类型为string

x = false; //将布尔值false赋值给x, 此时变量x的数据类型为boolean

x = []; //将数组赋值给x, 此时变量x的数据类型为object。

x = {}; //将对象赋值给x, 此时变量x的数据类型为object

...

2.4        JS运算符

JS和Java中的运算符大致相同,例如:

算术运算符: +,-,*,/,%,++,--

赋值运算符: =,+=,-=,*=,/=,%=

比较运算符: ==,!=,>,>=,<,<=

位运算符: & , |

逻辑运算符: && ,||

前置逻辑运算符: ! (not)

三元运算符: 表达式 ? 表达式1 : 表达式2

...........

2.5        JS语句

        JS中的语句和Java中的大致相同

1、if分支结构

if分支结构用于基于不同的条件来执行不同的动作。语法结构如下:

if (条件 1){

当条件 1 为 true 时执行的代码

}else if (条件 2){

当条件 2 为 true 时执行的代码

}else{

当条件 1 和 条件 2 都不为 true 时执行的代码

}

案例1if分支案例

(1)例子: 接收用户输入的成绩,判断成绩所属的等级

80~100(包括80,也包括100)                 优秀 

60~80(包括60,但不包括80)                 中等

0~60(包括0,但不包括60)                     不及格

其他值                                                    输入有误

(2)代码实现如下:

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<script type="text/javascript">
		/* 案例1:if分支案例:
		接收用户输入的成绩,判断成绩所属的等级
		80~100(包括80,也包括100)			 优秀 
		60~80(包括60,但不包括80) 		中等
		0~60(包括0,但不包括60) 			不及格
		其他值 							输入有误
		*/
		//prompt函数可以弹框提示用户输入成绩, 并返回用户输入的内容
		var score = prompt("请输入你的成绩:")
		//console.log();是浏览器提供的一个方法,可以将内容输出到浏览器的控制台上。
		console.log(score);
		if( score >= 80 && score <=100 ){
			alert("您的成绩属于:优秀!");
		}else if( score >= 60 && score < 80 ){
			alert("您的成绩属于:中等!");
		}else if( score >= 0 && score < 60 ){
			alert("您的成绩属于:不及格!");
		}else{
			alert("您输入的成绩不合法,请重新输入!");
		}
	</script>
</head>
<body>
	<h1>js的语句示例...</h1>
</body>
</html>

2switch语句

        使用 switch 语句来选择要执行的多个代码块之一。语法结构如下:

switch(n){

    case 1:

        执行代码块 1

        break;

    case 2:

        执行代码块 2

        break;

    default:

        与 case 1 和 case 2 不同时执行的代码

}

执行原理:首先设置表达式 n(通常是一个变量)。随后表达式的值会与结构中的每个 case 的值做比较。如果存在匹配,则与该 case 关联的代码块会被执行。请使用 break 来阻止代码自动地向下一个 case 运行。

案例2switch语句案例

(1)实现一个简易的计算器:

        可以接收用户输入的两个数值和一个操作符(+、-、*、/),根据操作符号的不同,对两个数值执行不同的运算。

(2)代码实现如下:

/** 2、switch语句案例:实现一个简易的计算器:可以接收用户输入的两个数值和一个运算符

(+、-、*、/),根据运算符的不同,对两个数值执行不同的运算。 */

var s = prompt("请输入数值1、运算符、数值2,中间用逗号分隔:"); // "100,+,5"

var arr = s.split(","); //[ "100", "+", "5" ],split元素是用来建立一个分割的作用

var num1 = parseFloat( arr[0] );//转换成字符串类型

var opt = arr[1]; // + - * /

var num2 = parseFloat( arr[2] );

switch( opt ){

case "+":

alert( "两个数的和为: "+( num1+num2 ) );

break;

case "-":

alert( "两个数的差为: "+( num1-num2 ) );

break;

case "*":

alert( "两个数的乘积为: "+( num1*num2 ) );

break;

case "/":

alert( "两个数的商为: "+( num1/num2 ) );

break;

default:

alert( "您输入的运算符不合法! ");

}

3for循环语句 -- 循环代码块一定的次数

for 循环的语法结构如下:

for (语句 1; 语句 2; 语句 3){

被执行的代码块

}

案例3for循环语句案例

(1)例题:

        遍历1~100之间的所有整数,求1~100之间所有整数的和,并输出到控制台;

(2)代码实现如下:

//for循环实现上面的练习

var sum1 = 0;

for( var i=1; i<=100; i++ ){

sum1 += i; //sum1 = sum1+i;

}

console.log( "(for)1~100之间所有整数的和为: "+sum1 );

//while循环实现上面的练习

var sum2 = 0, i=1;

while( i <= 100 ){

sum2 += i;

i++;

}

console.log( "(while)1~100之间所有整数的和为: "+sum2 );

4while循环 -- 在指定条件为真时循环执行代码块

JS中while循环也分为while和do/while循环,下面为while循环语法结构:

while (条件){

    需要执行的代码

}

while 循环会在指定条件为真时循环执行代码块。

案例4while循环语句案例

(1)遍历下面数组中的元素,将元素输出到控制台。

var arr = [123, "abc", false, new Object() ];

(2)代码实现如下:

var arr = [123, "abc", false, new Object() ]

//for循环实现遍历数组

for( var i=0; i< arr.length; i++ ){

console.log( arr[i] );

}

console.log( "------------------------" );

//while循环实现遍历数组

var i = 0;

while( i < arr.length ){

console.log( arr[i] );

i++;

}

2.6        JS数组

JS数组用于在单个的变量中存储多个值(其实就是一个容器)。

JS中的数组可以存储例如:数值、字符串、布尔值、undefined、null、对象、函数等

声明方式一:

(1)声明一个空数组

var arr1 = [];

(2)声明一个指定初始值的数组

var arr2 = [88, "Hello", true, 123];

声明方式二:

(3)通过Array函数创建一个空数组

var arr3 = new Array();

(4)声明一个指定初始值的数组

var arr4 = new Array(88, "Hello", true, 123);

关于JS中数组的细节:

(1)JS中的数组可以存放任意类型数据

(2)JS中数组的长度可以通过length属性获取或设置,并且JS中数组的长度是可以被任意改变。

//声明一个空数组

var arr1 = [];

console.log( arr1.length ); //此时数组长度为 0

arr1.length = 10;

console.log( arr1.length ); //此时数组长度为 10

arr1[99] = "abc";

console.log( arr1.length ); //此时数组长度为 100

arr1.length = 0;

console.log( arr1.length ); //此时数组长度为 0

2.7        JS函数

函数就是一个具有功能的代码块, 可以反复调用

函数就是包裹在花括号中的代码块,前面使用了关键词 function。

声明函数的语法:

function funName([参数1,参数2,…]){

需要执行的代码

}

调用函数: funName([参数1,参数2,…]);

//声明一个函数,接收两个数值并计算两个数值的和并返回

function getSum(a, b){

return a + b;

}

var sum = getSum(123, 345);

console.log( sum );

另外,也可以按照如下方式声明函数:

var funName = function ([参数1,参数2,…]){

需要执行的代码

}

调用函数: funName([参数1,参数2,…]);

2.8        综合练习

(自己完成)声明一个函数fn,在函数中实现:遍历指定的两个数值(例如1和100)之间的整数,将是3的倍数的数值存入到一个数组中,并将数组返回。

1、声明fn函数

function fn(x,y){

var arr = [];

for(var i=x,j=0;i<y;i++){

if(i%3==0){

arr[j] = i;

j++;

}

}

return arr;

}

2、调用fn函数, 获取1~100之间是3的倍数的数值组成的数组

var arr = fn(1,100);

3、遍历数组中的元素, 输出在网页上(提示: document.write("输出的内容") )

for(var i=0;i<arr.length;i++){

document.write(arr[i]+" ");

}

三、DOM操作

        DOM: (Document Object Model)文档对象模型,DOM是由W3C组织制定的一种处理HTML(包括xml)文件的标准API

        DOM提供了对整个HTML文档的访问模型,将文档作为一个树形结构,树的每个节点都表示了一个HTML标签或者标签中的文本。

        在JS中,是将每一个HTML元素、属性、内容都当成一个一个的JS对象,利用对象的方法和属性,可以方便的访问、修改、添加、删除HTML中的元素、属性和内容

3.1        案例:电灯开关

用Eclipse软件编写:

        (1)点击电灯可以实现开/关灯,代码实现如下:

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>js开、关灯练习</title>
	<style type="text/css">
		body{
			padding:20px;
			font-size:20px;
		}
		img{
			width:200px;
			height:200px;
		}
	</style>
	<script type="text/javascript">
	
	/** 练习:点击按钮,开灯或关灯 */
	var flag = "off"; //表示灯默认的关闭状态
	function changeImg(){
		//1.通过id属性获取img元素(返回表示img元素的JS对象)
		var img = document.getElementById("light");
		if( flag == "off" ){ //表示灯是关闭状态,点击后则需要打开
			//2.通过img元素的src属性值修改图片的路径
			img.src = "imgs/on.jpg"; //开灯
			flag = "on";
		}else{ //表示灯是打开状态, 点击后则需要关闭
			img.src = "imgs/off.jpg"; //关灯
			flag = "off";
		}
	}

	</script>
</head>
<body>
	<img src="imgs/off.jpg" id="light"><br/>
	<input type="button" value="开/关灯"  onclick="changeImg()"/>
</body>
</html>

        (2)代码分析:

<script type="text/javascript">
            /* 声明一个函数,用来点击按钮,触发函数 */
            function changeimg(){
                //3.所以定义一个用来表示灯泡状态的值
                var flag = "off";//表示灯的默认值是处于关闭状态的
                //1.通过元素的id属性获取img元素(返回表示img元素的JS对象)
                var img = document.getElementById("light");
                //4.判断灯的状态
                if(flag == "off"){//表示灯是关闭状态,点击按钮后需要打开
                    //5.所以将这个img.src = "imgs/on.jpg";提到判断语句里面
                    img.src = "imgs/on.jpg";//开灯
                    flag = "on";
                }else{//表示灯是打开的,点击后则需要关闭
                    img.src = "imgs/off.jpg";//关灯
                    flag = "off";
                }
                
                /* //2.通过img元素的src属性值修改图片的路径
                img.src = "imgs/on.jpg";//只有这个判断只能开不能关,除非刷新网页 */
        /*1. document:表示当前这个HTML文档
             by:是通过;get:是获取;Element:是元素
             整个意思就是说:在整个文档里面通过id获取所需的元素
        2.声明一个对象用来接收:var img = document.getElementById(light);*/
        
            }
        </script>

        (3)效果为:

 

3.2        案例:增删改元素

        点击网页中的按钮对html元素进行操作

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>jsDOM操作增删改</title>
		<style>
			div { border:#0099FF 2px solid;
			height:60px;
			width:350px;
			margin:20px 10px;
			padding:5px 7px;
			line-height:60px;
			font-size:26px;
			text-align:center;
			}
			#div_1{ background-color:#d400ff; }
			#div_2{ background-color:#FF3399; }
			#div_3{ background-color:#00FF00; }
			#div_4{ background-color:#FFFF66; }
			#info{ width:250px;
				   height:90px;
				   font-size:22px;
			       padding:5px;
				   resize:none;
				}
			input{font-size:18px;}
		</style>
		<script>
			/*练习1、添加元素:添加一个div元素到body中  */
			function addNode(){
				//1.创建一个新的div元素并声明一个变量(返回的是一个JS对象,表示新创建的div元素)
				var oNewDiv = document.createElement("div");
				//4.给新创建的div里面添加内容
				/*oNewDiv.innerHTML的作用:1.获取当前元素的内容,当前元素如果为空就返回一个字符串
										   2.通过这个属性可以给元素设置内容,设置了新内容将会把原先的内容全部覆盖掉*/
				oNewDiv.innerHTML = "我是一个新添加的div元素";
				//2.获取body元素(父元素)
				//var oBody = document.getElementsByTagName("body")[0];
				/* 在整个文档里通过标签名获取元素,此方法返回的一定是一个数组 ,好处就是通过元素名
				可以获取元素,还可以通过下标设定要找的元素*/
				/* 更简便的获取body元素的方法如下: */
				var oBody = document.body;
				//3.通过父元素调用方法将div添加到父元素内部
				oBody.appendChild(oNewDiv);
			}
			/*练习2、删除元素:删除id为div_2的元素  */
			function deleteNode(){
				//1.获取要删除的元素(id为div_2的元素)
				var oDiv2 = document.getElementById("div_2");
				//2.获取要删除的父元素
				var oParent = oDiv2.parentNode;
				/* parentNode属性:不管它的父元素是谁,都能通过这个属性获取当前元素的父元素 */
				//3.通过父元素调用方法将div_2删除
				oParent.removeChild(oDiv2);
			}
			/*练习3、更新元素:更新div_3元素里面的内容  */
			function updateNode(){
				//1.获取要更新的元素(id为div_3)
				var oDiv3 = document.getElementById("div_3");
				//2.更新元素里面的内容(innerHTML)
				console.log(oDiv3.innerHTML);//更新之前的内容
				oDiv3.innerHTML = "我是新的div_3";//设置内容
				console.log(oDiv3.innerHTML);//更新之后的内容
			}
		</script>
	</head>
	<body>
		<!-- 1.在body里面创建三个按钮和四个div元素 -->
		<input type="button" value="第一个添加元素的按钮" onclick="addNode()" /><br /><br />
		<input type="button" value="第二个删除元素的按钮" onclick="deleteNode()" /><br /><br />
		<input type="button" value="第三个更新元素的按钮" onclick="updateNode()" /><br/><br />
		<hr />
		<div id="div_1">
			第一个div
		</div>
		<div id="div_2">
			第二个div
		</div>
		<div id="div_3">
			第三个div
		</div>
		<div id="div_4">
			第四个div
		</div>
	</body>
</html>

3.3        案例:网页换肤

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>js-网页换肤</title>
		<style>
			body{
				font-size:18px ;
				font-family: "微软雅黑";
			}
			hr{
				border: 1px solid yellow;
			}
			a{
				font-size: 17px;
				font-weight: 500;
			}
			a:hover{
				color:#0099FF;
			}
			h2,#change-font{
				text-align: center;
			}
			#newstext{
				padding: 10px;
				margin: 0 auto;
				letter-spacing: 2px;
			}
			/* 预先定一些选择器 */
			.min{
				font-size: 16px;
			}
			.middle{
				font-size: 18px;
			}
			.max{
				font-size: 20px;
			}
			.super-max{
				font-size: 24px;
			}
		</style>
		<link href="css/none.css" id="link" rel="stylesheet"/>
		<script>
			/*练习1:执行下面的函数,切换字体大小 */
			function resize(selector){
				//1.获取包裹技能内容的div元素(id为newstext)
				var oDiv = document.getElementById("newstext");
				//2.将接收到的选择器的名字(selector)设置给div的class(className)属性值
				oDiv.className = selector;
			}
			
			/*练习2:执行下面的函数,为页面切换不同的皮肤  */
			function changeStyle(){
				//3.1定义数组,存放不同的皮肤(css文件的路径)
				var cssArr = ["css/red.css","css/green.css","css/blue.css"]
				var index = 0;//表示数组的下标
				//1.获取link标签(id=“link”)
				var oLink = document.getElementById("link");
				/* 2.为link标签href属性设置属性值,指向css/red.css,这样指向的只是一个固定路径
				oLink.href = "css/red.css"; */
				//3.所以用以下这些来设置:
				//3.2把第二个改为如下:
				oLink.href = cssArr[index];
				index++;
				if(index == cssArr.length){
					index = 0;
				}
			}
		</script>
	</head>
	<body>
		<h2>云缨技能介绍</h2>
		<div id="change-font">
			<!-- javascript:void(0):阻止超链接发生跳转,和普通按钮没什么区别 -->
			<a href="javascript:void(0)" onclick="resize('min')">小字体</a>
			<a href="javascript:void(0)" onclick="resize('middle')">中字体</a>
			<a href="javascript:void(0)" onclick="resize('max')">大字体</a>
			<a href="javascript:void(0)" onclick="resize('super-max')">超大字体</a>
			<a href="javascript:void(0)" onclick="changeStyle()">换肤</a>
		</div>
		<hr />
		
		<div id="newstext" class="middle">
			<p>云缨与神兵“掠火”心念相通,每释放一个技能,
			便会领悟一层枪意,三层枪意分别为坚意、锐意和真意。</p>
			<p>使用普通攻击会消耗枪意,并施放对应的枪意技,减少一、二技能1.25冷却时间。</p>
			<p>【一层枪意: 坚意·止戈】 对周围近距离敌人造成四次伤害,并获得2秒护盾、
			 释放期间可移动。</p>
			 <p>【二层枪意: 锐意·摧城 】 刺出三次中距离攻击造成伤害,
			 命中后回复生命值,已损生命越多,回复效果越好。</p>
			  <p>【三层枪意: 真意·燎原】 蓄势后对远距离一条直线上所有敌人造成伤害,
			  目标已损生命值越多,造成伤害越高。释放期间还可以高速移动并跨越地形。</p>
			
			
		</div>
	</body>
</html>

3.4        总结:JS获取元素

        (1)document.getElementById( id值 )

                -- 通过元素的id值,获取一个元素。返回的是表示该元素的js对象。

        (2)document.getElementsByTagName( 元素名 )

                -- 通过元素名称获取当前文档中的所有指定名称的元素,返回的是一个数组,其中包含了所有指定名称的元素。

        (3)document.body

                -- 获取当前文档中的body元素

        (4)ele.parentNode

                -- 获取当前元素的父元素。obj表示当前元素

3.5        总结:JS增删改元素

        (1)document.createElement( 元素名称 )

                -- 根据元素名称创建指定名称的元素,返回的是表示新创建元素的js对象

        (2)parent.appendChild( child )

                -- 通过父元素添加子元素,其中parent表示父元素,child表示子元素

        (3)parent.removeChild( child )

                -- 通过父元素删除子元素,其中parent表示父元素,child表示子元素

        (4)ele.innerHTML

                -- 获取当前元素的html内容(从开始标签到结束标签之间的所有内容)

                -- 或者, 还可以设置当前元素的html内容(如果元素内部有内容,将会覆盖原有内容)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值