js 基础(1)

一, 什么是js?
javascript简称js,是目前web开发中不可缺少的脚本语言。js不需要编译即可运行,“寄生”在html体内随网络传输到客户端的浏览器的内存中解析。
js是基于对象和事件驱动的脚本语言。js是弱语言。
2.js的作用是什么?
最常用的:1)js可以动态的修改html及css的代码(修改的是浏览器内存中的那一份代码)DOM操作
2)js可以对表单进行校验
3.js由三部分组成:
1)ECMAScript:这一部分主要是js的基本语法
2)BOM:Brower Object Model 浏览器对象模型,主要是获取浏览器信息或操作 浏览器的,例如:浏览器的前进与后退、浏览器弹出提示框、浏览器地址栏输入网址 跳转等操作等。
3)DOM:Document Object Model 文档(html)对象模型,此处的文档暂且理解为html, html加载到浏览器的内存中,可以使用js的DOM技术对内存中的html节点进行修 改,用户从浏览器看到的是js动态修改后页面。

4.js的引入方式(重点)
1)内部js:也就是在html源码中嵌入js代码,语法格式如下:

<head>
				<meta charset="UTF-8">
				<title></title>
				<script type="text/javascript">
					alert(“这里写你的js代码”);
				</script>
			</head>

注意:

外部js:也就是将js代码单独写成一个js文件(扩展名是.js而不是.javascript),在 html代码中引入这个封装好的js文件。语法格式如下:
在这里插入图片描述注意:无论是内部js还是外部js在html中引入的位置是随意的,
引入有一个原则就是:在不影响页面功 能的情况下js越晚加载越好,所以建议

二,js的基本语法
1.js变量的定义
js是弱类型语言,不重视类型的定义
定义直接通过var关键字就行。如:

整型:var i = 0; 浮点型:var d = 2.35; 字符串:var str = “用心做教育”; 布尔型:var b =
true; 数组:

2.js的数据类型
js的数据类型分为基本数据类型(原始数据类型)和引用数据类型
1)原始/基本数据类型:
数字类型:number 包含了小数和整数
布尔类型:boolean
字符串类型:string 在js中字符串类型包含了字符 ‘’和“”引起来的都是字符串。
未定义类型:undefined
空类型:null

重要的转换:
(1) 数字字符串 转 数字
parseInt
parseFloat

<script type="text/javascript">
	var value = "22";
	//var num = parseInt(value);
	var num = parseInt(value);
	alert(num + "===" + typeof (num));
</script>

2)引用数据类型:
与java一样,js中的对象都是引用数据类型,所以你也可以使用我们熟知new 来“造对象”

例如: 造一个上帝对象:var obj = new Object(); 造一个字符串对象:var str = new String();
造一个日期对象:var date = new Date();

3.js的运算符
在js中,如下运算符除了极个别的,其他绝大多数的运算都是和java中一模一样的运算法则。
1)赋值运算符 var x = 5;
2)比较运算符 > < == != ===
3)逻辑运算符 && || !

注意的是,在js中,不光boolean值能够参数逻辑运算。所有的值都能参与逻辑运算。

1.== 只比较数值的大小,不区分数据类型。因为 js是弱数据类型
2. === 绝对等 不光比较数值的大小,还比较数据的类型
3. js中:非零,非null,非undefined理解成true(即 零0,null,undefined理解成false)
4.算数运算符 + - * / %
5.三元运算符 条件?a:b 1?“2”:“3”
6.js中只有双与和双或 没有单与和单或

4.js的逻辑语句
跟java一样,js也存在if、if-else、for、switch等逻辑语句,与java使用方式一致.
三、js的函数(重点)
js中,通过function关键字来定义函数
在这里插入图片描述

/*
		首先我们需要知道的第一点就是:函数需要被调用才能执行。
		 * */
		function demo1(){
			alert("ss");//这句代码的含义是将内容弹到页面上。
		}
//		demo1();
		/*
		 第二点:js中,如果函数需要返回值我们直接return就行了。
		 	   定义函数的时候不需要声明返回值的类型,因为js是弱数据类型。
		 * */
		function demo2(){
			return 2;
		}
//		alert(demo2());
		/*
		 第三点:在js中,如果我们需要给函数传递参数,那么我们直接写变量名就行。
		     也不需要声明传入变量的类型。
		 * */
		function demo3(value){
			alert(value);
		}
//		demo3(3);
		/*
		 看如下代码,很明显我定义了2个函数名一样,只是参数列表不一样的函数。
		 在java中我们都知道这叫做函数的重载。
		 然后我调用的时候是不带参数的。查看结果,很显然,最终调用的是带参数的函数。
		 第四点:在js中,不存在函数重载的概念,如果2个函数名一样,后面出现的函数会将前面出现的函数覆盖。
		 * */
		function demo4(){
			alert("demo4_1");
		}
		function demo4(value){
			alert("demo4_2");
		}
		demo4();

总结:
1.函数需要被调用才能执行。
2.js中,如果函数需要返回值我们直接return就行了。
定义函数的时候不需要声明返回值的类型,因为js是弱数据类型。
3.在js中,如果我们需要给函数传递参数,那么我们直接写变量名就行。
也不需要声明传入变量的类型。
4.在js中,不存在函数重载的概念,如果2个函数名一样,后面出现的函数会将前面出现的函数覆盖。

了解一下:

    	/*
		 很明显,我定义了带参数的函数,而我们调用的时候没有带参数,函数也能照样执行。
		 第五点:如果函数的声明带有参数,调用时不带参数,函数可以正常被调用。
		 * */
		function demo5(value){
			alert("demo5");
		}
//		demo5();
		/*
		 同样,我定义一个不带参数的函数,但是我调用的时候给函数传递了参数,那么函数也能照样执行。
		 第六点:如果函数声明时没有参数列表,调用的时候传入参数,函数也能照样执行。
		 * */
		function demo6(){
			alert("demo6");
		}
//		demo6("aa");
		/**
		 * 基于第六点
		 第七点:既然可以给函数传入参数,在js中,可以通过arguments来获取传入的参数。
		 		arguments是js专门用来存放参数的数组。
		 */
		function demo7(){
			alert(arguments[0]);
		}
//		demo7("aa");
		/**
		 * 看如下案例,我给函数起了个别名,然后可以通过别名来正常的调用函数。
		 第八点:可以给函数起个别名,然后通过别名来调用函数。
		 */
		function adfadfsdfafd(){
			alert("demo8");
		}
		var demo8 = adfadfsdfafd;
		demo8();

2)匿名函数:匿名函数也就是没有名字的函数
function(参数列表){
js逻辑代码
}

但是匿名函数没有办法直接调用,一般情况下匿名函数有两种使用场景:
第一种:将匿名函数赋值给一个变量,使用变量调用函数
定义函数并赋值给变量:var fn = function(参数列表){js逻辑代码}
调用函数:fn(实际参数);
第二种:匿名函数直接作为某个函数实际参数
例如:
function xxx(数字类型参数,字符串类型的参数,函数类型的参数){
//js逻辑代码
}
调用该函数:
xxx(100,”abc”,function(){});

四、js的事件(重点)
1.事件概述
什么是事件?
我们用户发出的一些动作或者行为,这些能被js检测到,那么这些行为就叫做事件。
当我们输入完用户名,鼠标光标移开的时候,这样的一个动作我们的js或者说浏览器是能够知晓这 样一个动作的,所以这样的动作叫做事件。而我眼睛盯着浏览器看这么一个动作,浏览器并不知道,所以不是一个事件。
事件的作用:我们可以给事件绑定一个函数,当事件触发的时候,就会执行这个函数。

js的事件,理解如下几个概念:
1)事件源:被监听的html元素
2)事件:某类动作,例如点击事件,移入移除事件,敲击键盘事件等
3)事件与事件源的绑定:在事件源上注册上某事件
4)事件触发后的响应行为:事件触发后需要执行的代码,一般使用函数进行封装
2.常用的事件
在这里插入图片描述
事件绑定的第一种方式:

<script type="text/javascript">
		/**
		 * 		事件绑定的第一种方式:
		 * 			格式:
		 * 		<标签名  事件名="函数名"></标签名>
		 * 
		 * 		给按钮绑定单击事件,输出一段话。
		 */
		function demo(){
			alert("单击事件绑定成功");
			//首先获取标签对象,document.getElementById();通过标签的id值获取标签对象
			var mydiv = document.getElementById("mydiv");
			//修改标签对象的css样式
			mydiv.style.backgroundColor = "white";
		}
		/**
		 * 	给div绑定鼠标悬浮事件,修改div的背景色为蓝色。
		 * 	给div绑定鼠标移出事件,修改div的背景色为绿色。
		 * 
		 */
		function changeBlue(){
			//首先获取标签对象,document.getElementById();通过标签的id值获取标签对象
			var mydiv = document.getElementById("mydiv");
			//修改标签对象的css样式
			mydiv.style.backgroundColor = "blue";
		}
		function changeGreen(){
			//首先获取标签对象,document.getElementById();通过标签的id值获取标签对象
			var mydiv = document.getElementById("mydiv");
			//修改标签对象的css样式
			mydiv.style.backgroundColor = "green";
		}
	</script>

事件绑定的第二种方式:动态绑定

<body>
		密码: <input type="password"  id="pwd" />
		重复密码:<input type="password" id="repwd" />
	</body>
	<script type="text/javascript">
		/**
		 * 	js中 事件绑定的第二种方式:动态绑定
		 * 		
		 * 		格式:
		 * 		标签对象.事件名  = function(){
		 * 			}
		 */
		
		//首先获取重复密码标签对象
		var repwd = document.getElementById("repwd");
		repwd.onblur = function(){
			//首先获取第一次输入的密码
			// 对于表单标签的子标签来说,value一般指的就是提交给服务器的值。
			var pwd1 = document.getElementById("pwd").value;
			//再获取第二次输入的密码
			var pwd2 = document.getElementById("repwd").value;
			//比较密码的值
			if(pwd1==pwd2){
				alert("密码一致");
			}else{
				alert("密码不一致");
			}
		}
	</script>

五、js的BOM
js的BOM概述
BOM(Browser Object Mode),浏览器对象模型,是将我们使用的浏览器抽象成对象模型,例如我们打开一个浏览器,会呈现出以下页面,通过js提供浏览器对象模型对象我们可以模拟浏览器功能。
例如,在浏览器地址栏输入地址,敲击回车这个过程,我们可以使用location对象进行模拟。在例如,浏览器中的前进和后退按钮,我们可以使用history对象模拟。
在这里插入图片描述
2.js的BOM对象

  1. Screen对象,Screen 对象中存放着有关显示浏览器屏幕的信息。
  2. Window对象,Window 对象表示一个浏览器窗口或一个框架。
  3. Navigator对象,包含的属性描述了正在使用的浏览器
  4. History对象,其实就是来保存浏览器历史记录信息。
  5. Location对象,Location 对象是 Window 对象的一个部分,可通过 window.location 属性来访问。

3.Window对象
学习它的三个作用:
1)弹框的方法
(1)弹框的方法(重点)
如支付宝经常 会弹出一个框框,问我们是否确认付款。这样一个弹窗非常有必要,这样防止我们用户的误操作。
1)提示框:alert(提示信息);

2)确认框:confirm(提示信息);

3)输入框:prompt(提示信息);

<script type="text/javascript">
//alert("FBI WARNING!!!");
//var res = confirm("是否确认付款");
//alert(res);
var res = prompt("请输入一个值");
		alert(res);
</script>

2)定时器

js中的定时器

  • setInterval(函数名,毫秒值);周期性的执行某个函数。
  • clearInterval(id_of_setinterval);停止setInterval周期性执行的函数。
    (id_of_setinterval就是setInterval函数的返回值。)
  • setTimeout(函数名,毫秒值);一段时间后执行一次代码

常用的全局方法
1)parseInt/parseFloat函数
2)eval函数—特点:可以将字符串解析成js脚本
(1)1.js的源码或者在一些框架的源码中比较多。
(2)2.eval()可以用来解析json。

 var jsonStr = "{'name':'柳岩','age':'30','sex':'male'}";
	var json = eval("("+jsonStr+")");
	alert(json.name);

3)decodeURI();解码 encodeURI();编码

var url = "http://www.baidu.com?username=张三&password=李四";
	var enUrl = encodeURI(url);
	//alert(enUrl);
	var deUrl = decodeURI(enUrl);
	//alert(deUrl);

4.Location对象(重点)
重点记忆location.href可以在js中进行url访问

案例:

1.图片轮播:
<body>
	<img id="myimg" src="1.jpg" width="700px" onmouseover="stop()" onmouseout="start()">
</body>
<script type="text/javascript">
	var i = 1;
	function change(){
       //获取img标签对象
		var myimg = document.getElementById("myimg");
		if(i<7){
			i++;
		}else{
			i=1;
		}
    //修改img标签对象的src属性值,也就是切换图片的路径
		myimg.src  = i+".jpg";	
	}
	var id = setInterval("change()",1000);
	function stop(){
		clearInterval(id);
	}
	function start(){
		id = setInterval("change()",1000);
	}
</script>

2.图片弹出:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<div id="mydiv" style="display: none;">
			<img src="../img/1.jpg" />
		</div>
	</body>
	<script type="text/javascript">
		function show(){
			//获取div标签对象,修该div标签对象的display为block,使div显示出来。
			document.getElementById("mydiv").style.display="block";
			setTimeout("hidden()",3000);
		}
		function hidden(){
			//获取div标签对象,修该div标签对象的display为none,使div隐藏。
			document.getElementById("mydiv").style.display="none";
		}
		setTimeout("show()",3000);
	</script>
</html>

3.表单验证:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>注册页面</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<script type="text/javascript">
	// 给用户名增加点击事件对应的函数
	function func() {
		var usernameVal = document.getElementById("user").value;
		// 判断
		if(usernameVal == "请输入用户名"){
			document.getElementById("user").value = "";
		}
	}
	
	// 给用户名标签对象绑定离焦事件对应的函数
	// 判断用户名的格式是否正确, 返回值应该是boolean类型
	function checkuser(){
		// 定义一个标志位,初始值为false,表示不合法
		var flag = false;
		
		// 获取用户输入的值
		var usernameVal = document.getElementById("user").value;
		// 用户名必须是4~12位的字母数字下划线的组合!
		if(usernameVal.match("^\\w{4,12}$")){
			// 合法
			// 取消错误提示信息
			document.getElementById("userspan").innerHTML = "";
			// 修改标志位
			flag = true;
		} else {
			// 不合法 提示用户名格式不正确!
			document.getElementById("userspan").innerHTML = "<font color='red'>用户名必须是4~12位的字母数字下划线的组合!</font>";
		}
		
		return flag;
	}
	
	// 需求: 校验性别是必填项 返回值也是boolean类型
	function checksex(){
		// 定义一个标志位,初始值为false,表示不合法
		var flag = false;
		
		// 获取性别标签数组
		var sexArr = document.getElementsByName("sex");
		// 遍历
		for(var i=0; i<sexArr.length; i++) {
			if(sexArr[i].checked) {
				// 选中
				flag = true;
			}
		}
		
		// 判断
		if(!flag) {
			// 如果没有选中性别 提示性别不得为空
			document.getElementById("sexpan").innerHTML = "<font color='red'>性别是必选项!</font>";
		} else {
			// 如果选中性别, 取消错误提示
			document.getElementById("sexpan").innerHTML = "";
		}
		
		return flag;
	}
	
	// 需求: 校验表单信息
	function validate(){
		// 初始化标识位 为false ,不通过
		var flag = false;
		
		// 如果通过所有的校验,将标识位修改成true
		if(checkuser() && checksex()){
			flag = true;
		}
		
		return flag;
	}
	
</script>
</head>
<body>
	<fieldset>
		<legend>注册页面</legend>
		<!-- 在form标签中有个默认的事件 -->
		<form action="http://127.0.0.1:9090" method="post"
			onsubmit="return validate();">
			<table>
				<tr>
					<td>用户名称:</td>
					<td><input id="user" type="text" name="user" value="请输入用户名"
						onclick="func()" onblur="checkuser()" /> <span id="userspan"></span>
					</td>
				</tr>

				<tr>
					<td>用户密码:</td>
					<td><input id="pwd" type="text" name="pwd" onblur="checkpwd()" />
						<span id="pwdspan"></span></td>
				</tr>

				<tr>
					<td>确认密码:</td>
					<td><input id="repwd" type="text" name="repwd"
						onblur="checkrepwd()" /> <span id="repwdspan"></span></td>
				</tr>

				<tr>
					<td>选择性别:</td>
					<td>
						<input type="radio" name="sex" value="nan" onchange="checksex()" />男 
						<input type="radio" name="sex" value="nv" onchange="checksex()"/>女 
						<span id="sexpan"></span>
					</td>
				</tr>
				<tr>
					<td>选择爱好:</td>
					<td><input type="checkbox" name="hobby" value="C" />C <input
						type="checkbox" name="hobby" value="C++" />C++ <input
						type="checkbox" name="hobby" value="Java" />Java <input
						type="checkbox" name="hobby" value="PHP" />PHP <input
						type="checkbox" name="hobby" value=".net" />.net <span id="hspan"></span>
					</td>
				</tr>
				<tr>
					<td>选择国家:</td>
					<td><select name="country">
							<option>---请选择国家----</option>
							<option value="CN">中国</option>
							<option value="US">美国</option>
							<option value="EN">英国</option>
					</select></td>
				</tr>

				<tr>
					<td>自我评价:</td>
					<td><textarea rows="10" cols="40" name="desc">
						</textarea></td>
				</tr>
				<tr>
					<td><input type="submit" value="注册" /></td>
					<td><input type="reset" value="重置" /></td>
				</tr>
			</table>
		</form>
	</fieldset>

</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值