JavaScript

概述
  • 简称JS,由网景公司和Sun公司联合推出的一门编写前端脚本动作的编程语言;本质上与Java没有关系,是一门独立的编程语言
  • JS是一门前端的编程语言,主要用于给网页添加动作,如表单的验证、动态的请求服务器等
  • JS通常是书写在HTML页面中的指定位置,当使用浏览器运行HTML时浏览器会解析HTML中的JS代码并执行;属于解释型编译语言,JS的执行依赖于浏览器提供的JS解释器
  • 开发JS
  • 第一种编写位置:在html页面的head部分书写
<head>
        <script type="text/javascript">
          书写JS代码的位置,单引号双引号都行,执行顺序从上到下
          //向浏览器的控制台输出内容
          console.log("HelloWorld");//调试JS常用的输出语句
          //浏览器弹窗
          //window.alert("来嘛~");
          //向浏览器页面输出内容
          document.write("成年人的世界可以用两个字概括:算了<br/>");
          document.write("不太想活,又不敢去死");
          document.write("<a href='wallhaven-q29z2l.jpg'>图片</a>")
        </script>
</head>
  • 第二种编写位置:在一个 .js结尾的脚本文件中编写,然后在需要使用的HTML
//外部文件:jq.js
<head>
		<!-- 引入外部的JS文件,且标签必须成对出现 -->
		<script type="text/javascript" src="jq.js"></script>
</head>

JS基础语法

  • 变量
  • 声明:JS是一门弱类型的编程语言,变量没有具体的类型,所有的变量的声明都可以使用var;JS会将所有var声明的变量提到最前面,称为声明前置
  • JS对语句末的分号不是特别敏感,会自动检测与下一条语句匹配
  • 赋值:赋值不提前,还在原来位置
<script type="text/javascript">
        {
          //局部变量声明,用let声明;var声明但变量都是全局变量
          let a = 10;
        }
        //书写JS代码
        //声明
        var a;
        var a=100,b,c,d;
        //赋值
        b = 20;
        //一个变量声明但没有赋值,输出为undefined
        console.log(a,b,c,d);
        //声明并赋值
        var s=d=f=200;
        console.log(s,d,f);
        //JS解构变量赋值方式,按照数组的语法进行位置的匹配赋值
        var [aa,bb,dd] = ["hang","yuan","kun"];
        console.log(aa,bb,dd);
</script>
  • 数据类型:JS的变量不区分类型,但是变量存的值有数据类型
  • 数值类型:整形,小数
  • 字符串类型:JS中可以用单引号或双引号代表字符串
  • 布尔类型:JS中有真值和假值的区分

真值

假值

true

false

非空的变量

0

非空的内容

null(手动赋值为null或者一个对象没有值)、

undefined(一个变量声明但为赋值)

  • 特殊数据类型:
  • undefined
  • Infinity(把零作为除数时,无穷大)
  • NaN(not a number不是一个数,非法的算数运算)
  • 一个函数:isNaN(变量 / 值),是不是 不是一个数
console.log(1/0);//Infinity

console.log(isNaN('hang'));//true
  • 运算符
  • 算数运算符:+ - * / % ++ –
  • 赋值运算符:= += -= *= /= %=
  • 关系运算符:> >= < <= == === != !==
  • 逻辑运算符:&& || !
  • 三元运算符(三目运算符):布尔表达式?值1:值2
<script type="text/javascript">
    var str1 = '123';
    var m = 123;
    //两个等号比较的是变量里实际的值
    console.log(str1==m);
    //三个等号比较变量的值以及数据类型
    console.log(str1===m);

	//不等号  多一个等号会兼顾数据类型
    console.log(str1!=m); //false
    console.log(str1!==str2); //false

</script>
  • 分支语句
  • 循环语句
//分支语句:
	if(){
     	//实现
     }else if(){
     	//实现   
     }else{
    	//实现
     }

//循环语句:for循环、while循环、do ... while循环
	var sum = 0;
	for(var i = 0; i <= 100; i++){
		sum += i;
	}
  • 数据类型转换
//隐式转换:指JS在执行过程中觉得有必要,则自动完成转换
			//当遇到  -   *   /  时都会把字符串类型转换成数字类型
			//任何一个值与字符串做 + 运算,得到的还是一个字符串
		//手动转换:
			//Number():只能转换纯数值的字符串,包含字符的会返回NaN(not a number)
			//parseInt():可以转换包含字符的字符串,规则是取第一个数值作为返回的结果,如果字符串的第一个字符不是数组,则返回NaN
		//函数isNaN():用于判断给定的值或变量,是不是一个数,数值返回false,字符串返回false

//表达式:由运算符连接的变量,最终会产生一个结果

函数

  • 函数是由多个语句组成的,完成特定功能的代码块。可以提高代码的复用性
  • 函数的定义:
  • JS中的函数没有强制的返回值类型约束
  • 参数的定义不用书写类型,直接书写变量名
function 函数名(参数列表){ 	
        //函数体	
        //函数的返回值,没有类型约束,返回什么类型的值都可以
        return 返回值;  	//可以结束函数的执行
}
  • 函数的调用
  • 函数名(参数列表)
  • 参数传递的个数与参数列表可以不匹配
  • JS中每一个函数内都有一个隐含的对象arguments数组,里面封装保存了传递的所有参数
//函数的基本使用
<script type="text/javascript">
        //声明一个无参,无返回值的函数
        function fun1(){
          console.log('无参函数');
        }
        //定义一个有参有返回值的函数
        function sum(a,b){
          console.log('计算两个数的和');
          return a+b;
        }
        //调用函数
        fun1();
        var s = sum(1,2);
        console.log('和是:',s);
</script>


function funSum(a,b){
      	//JS函数中有一个隐含的封装了参数值的对象:arguments,是一个数组
      	//可以从arguments中获取调用函数传递的所有参数
            console.log('funSum:',arguments);
            for(var i = 0; i < arguments.length; i++){
                console.log('funSum:',arguments[i]);
            }
            return a+b;
}

//调用函数
//var sum = funSum();   相当于两个undefind相加
var sum = funSum(1,8,200);
console.log(sum);
  • JS函数的特殊用法
  • 匿名函数
var fun2 = function(a,b){
       console.log('匿名函数',a,b);
}
//调用
 fun2('呵呵',9);
  • 定义只能使用一次的函数
//定义完函数原地调用,没有函数名,只能调用一次
( function(){
            console.log('调用一次性函数')
} )();
  • 将函数作为参数传递
//将函数作为变量进行传递
function fun3(){
  	console.log('函数作为变量')
}
//一共调用了两次fun3()
var fun4 = fun3;
console.log(fun4);
fun4();
//定义一个函数
function fun5(m){
  	m();
}
fun5(fun4); //把fun4当作参数传递
  • 函数作为函数的返回值
//函数可以作为返回值
function fun6(){
      console.log('fun6被调用')
      return function (){
        	console.log('fun6的返回值')	
      }
}
fun6()();
  • 全局作用域:全局作用域内定义的变量,在全局范围内任何位置都可以使用
  • 局部作用域:定义在函数内部的变量,作用范围仅限当前函数内部,但是如果函数内的一个变量没有用var声明,会自动晋升为全局变量
  • 当全局变量和局部变量命名冲突,局部优先
  • 函数在定义的过程中一定避免与变量名命名冲突
<script type="text/javascript">
        //此时m的范围是全局的
        var m = 10;
        function fun1(){
            //n的使用范围仅限当前代码块中
            var n = 20;
            //没有用var声明,则自动提升为全局
            x = 100;
            console.log('fun1:',m,n,x);
        }
        function fun2(){
            console.log('fun2:',m,x)
        }
        fun1();
        fun2();
        console.log('**************');
        function fun3(){
            var a = b = c = 20;  //此时var的作用仅对a有效
        }
        fun3();
        console.log(b);

</script>

数组

  • 声明
  • JS中数组的类型没有限制
  • 定义数组
//第一种创建数组方式,声明一个空的数组,与var arr2=[];是等效的
var arr1 = new Array();
arr1[0] = 'hehe';
arr1[1] = 100;
console.log(arr1);

//第二种创建数组方式
var arr2 = [];
console.log(arr2);
var arr3 = [1,2,'erha'];
console.log(arr3[2]);
  • 遍历数组:for…in针对于稀疏数组时只输出有值的元素
//声明一个数组
var arr1 = [1,3,2,5,6];
arr1[10] = 100;//现在数组下标为10的位置有了值,但是标4-9的位置是没有值的
//遍历数组
console.log('=========for循环遍历=======');
for(var i=0;i<arr1.length;i++){//遍历所有的元素,包括undefined
  	console.log(arr1[i]);
}

//for...in    
//idx代表数组的下标,可变;且在遍历稀疏数组时只输出有值的元素
 for(idx in arr1){//只遍历有效的元素
      console.log(idx,arr1[idx]);
    }
  • 针对数组的一些函数
var arr1 = [1,23,4,5,9];
        //向数组末尾添加元素
        arr1.push(100);
        //向数组头部添加元素
        arr1.unshift(200);
        //删除数组最后一个元素
        arr1.pop();
        //删除数组第一个元素
        arr1.shift();
        //将数组的元素使用指定字符进行拼接,返回一个字符串
        var str = arr1.join(':')
        //从指定下标位置,删除n个元素
        arr1.splice(0,1);
        
        var arr2 = [10,20,30];
        var arr3 = [40,50,60];
        //concat函数,会返回两个数组合并后的大数组
        var arrs = arr2.concat(arr3);
        
        var arr4 = [1,23,2,5,19];
        //数组排序,默认按照从第一个位置从小到大排序,需要自定义规则
        arr4.sort(function(a,b){
            return a-b; //升序排列
            //return b-a;   降序排列
        });

对象

  • 对象的创建和对象中属性定义的操作
  • 通过new Object()创建
<script type="text/javascript">
        //创建一个对象
        var obj1 = new Object();
        //给对象中设置属性
        obj1.name = 'hang';
        obj1.age = 18;
        //设置对应属性的get/set方法
        obj1.setName = function(name){
          //this指当前对象
          this.name = name;
        }
        obj1.getName = function(){
          return this.name;
        }
        //调用对象中的方法
        obj1.setName('yuan');
        //访问属性
        console.log(obj1.name,obj1.age);//输出结果yuan 18
        console.log(obj1.getName());//输出结果yuan
</script>
  • 通过JSON字符串格式定义JS对象
  • JSON字符串本质就是个字符串,但JSON字符串的格式是固定的一种国际标准:{“name”:“value” , “name2”:“value2” , …},是键值对的方式,对应的值可以为数组
<script type="text/javascript">
    //创建一个对象
    var obj = {
        //"name":"hang",
        name:"yuan",//在定义JS对象中的属性key时,可以省略双引号
        "age":18,
        setName:function(name){
          this.name = name;
        },
        getName:function(){
          return this.name;
        },
        setAge:function(age){
          this.age = age;
        },
        getAge:function(){
          return age;
        }
    };
    //访问属性
    console.log(obj);
    console.log('直接过去属性值',obj.name);
    console.log('通过方法获取属性值',obj.getName());
</script>
  • 日期对象
<script type="text/javascript">
        //创建日期对象
        //var date = new Date();//当前系统时间
        var date = new Date('2022-10-22');
        //日期对象常用方法
        document.write(date+'<br>');
        document.write('年:'+date.getFullYear()+'<br>');
        document.write('月:'+date.getMonth()+1+'<br>'); //月必须加1
        document.write('日:'+date.getDate()+'<br>');
        document.write('时:'+date.getHours()+'<br>');
        document.write('分:'+date.getMinutes()+'<br>');
        document.write('秒:'+date.getSeconds()+'<br>');
        document.write('星期:'+date.getDay()+'<br>');
</script>
  • 常用的其他函数
//字符串相关
	//str.length  返回字符串str长度
	//str.indexOf(字符)  返回指定的字符串在str中出现的第一次的下标,没有返回-1
	//str.lastIndexOf(字符)  返回指定的字符串在str中最后一次出现的下标,没有返回-1

//运算相关
	//Math.random()   返回0到1之间的一个随机数
	//Math.pow(m,n)	 返回m的n次幂
	//Math.round();      返回四舍五入
  • 复杂数组小练习
<script type="text/javascript">
			//书写JS代码
			function fun1(option){
				console.log(option);
				//option传入一个对象,在函数的内部使用option对象的属性值
				console.log(option.name);
				console.log(option.age);	
			}
			var o = {
					name:'hang',
					age:18
			}
			fun1({
				name:'yuan',
				age:18
			});	
			//复杂数组
			var arr = [
			           {
			        	   id:1,
			        	   name:'北京'
			           },
			           {
			        	   id:2,
			        	   name:'天津'
			           },
			           {
			        	   id:3,
			        	   name:'上海'
			           }
			           ];
			document.write('<select>');
			for(var i=0;i<arr.length;i++){
				console.log(arr[i]);
				console.log(arr[i].id);
				console.log(arr[i].name);
				document.write('<option value="">'+arr[i].name+'</option>')
			}
			document.write('</select>');	
</script>

事件开发

  • 指JS通过捕捉用户在网页上的一系列操作(如单击鼠标等),进行相关的处理
  • 事件开发的三要素
  • 事件源:指HTML标签元素
  • 事件属性:用于捕捉事件的特殊的属性。如:捕捉单击事件的属性 onclick
  • 事件监听器:针对捕捉到的事件,进行的后续处理,一般是通过函数实现
  • 完成事件开发的流程
  • 书写HTML标签
  • 在HTML标签上定义事件属性
  • 开发事件监听函数
  • 调用事件监听函数
<!--  οnclick=""  捕捉单击事件的属性  -->
<head>
    <script type="text/javascript">
        //编写事件监听函数
        function funClick(){
            alert('你点我啊');
        }
    </script>
</head>
<body>
    <h2>事件开发</h2>
    <input type="button" value="单击鼠标事件" onclick="funClick()">
</body>
  • 调用事件回调函数,在事件属性值上传参,获取标签的属性值
  • 事件属性调用函数的时候,传的this是当前的标签对象
<script type="text/javascript">
          //编写时间监听函数
          function fn1(){
            //alert('你点啥');
            //console.log('呵呵呵');
            document.write('<select>');	
            document.write('<option>北京</option>');
            document.write('<option>上海</option>');
            document.write('</select>');

          }
          function fn2(arg){
            //输出 <input type="button" value="触发事件的时候传参" οnclick="fn2(this)"/>
            console.log(arg);
            //输出 value属性值:触发事件的时候传参
            console.log('value属性值:'+arg.value); 
            //输出 value属性值:button
            console.log('value属性值:'+arg.type);
          }
			
</script>

<body>
        <input type="button" value="普通按钮" onclick="fn1()"/>
        <!-- 事件属性调用函数的时候,传的this是当前的标签对象 -->
        <input type="button" value="触发事件的时候传参" onclick="fn2(this)"/>
</body>
  • 操作标签
  • var obj = document.getElementById(标签的ID属性值);
  • 获取标签的属性值:obj.属性名
  • 设置新的属性值:obj.属性名 = 要修改的内容
<script type="text/javascript">
          function funLight(){
            //根据标签的id属性获取标签对象
            var imgObj = document.getElementById('bulb');
            console.log(imgObj);
            console.log(imgObj.title);
            if(imgObj.title=="off"){
              //给src属性赋新值
              imgObj.src = "img/bulb_on.png";
              imgObj.title="on";
            }else{
              //给src属性赋新值
              imgObj.src = "img/bulb_off.png";
              imgObj.title="off";
            }
          }
</script>

<body>
        <img src="img/bulb_off.png" title="off" id="bulb"/><br>
        <input type="button" value="开关" onclick="funLight()">
</body>
  • 常用的事件属性

属性名

触发时机

onclick

单击鼠标触发

ondblclick

双击鼠标触发

onblur

失去焦点触发

onfocus

获得焦点触发

onmouseover

鼠标覆盖触发

onmouseout

鼠标移出触发

onmousemove

鼠标移动触发

onkeyup

抬起按键触发

onkeydown

按下按键触发

onload

加载完页面触发,用于body标签

onchange

改变下拉列表选项触发

onsubmit

提交表单的事件

  • 操作标签
<script type="text/javascript">
        function funLight(){
          //根据标签的id属性获取标签对象
          var imgObj = document.getElementById('bulb');
          console.log(imgObj);
          console.log(imgObj.title);
          if(imgObj.title=="off"){
            imgObj.src = "img/bulb_on.png";
            imgObj.title="on";
          }else{
            imgObj.src = "img/bulb_off.png";
            imgObj.title="off";
          }
        }
</script>

<body>
      <img src="img/bulb_off.png" title="off" id="bulb"/><br>
      <input type="button" value="开关" onclick="funLight()">
</body>
  • 阻止表单提交
<!-- onsubmit  -->

<script type="text/javascript">
			//表单验证的监听函数
			function funSubmit(){
				//书写表单验证的代码
				return false;	//此时会阻止表单提交
			}
</script>

<form action="http://www.baidu.com" method="post" onsubmit="return funSubmit()">
			Username:<input type="text" id="username" /><br>
			Password:<input type="password" id="password" /><br>
			<input type="submit" value="提交">
</form>
  • 阻止超链接的默认事件
<!--  第一种  -->
<a href="#" >超链接</a>

<!--  第二种  -->
<a href="javascript:void(0)" >超链接</a>
  • 事件冒泡:当父元素和子元素定义了相同的事件时,触发子元素的事件同时会扩散触发父元素的相同事件
function funSup(){
		alert('触发了父div');
}
function funSub(){
		alert('触发了子div');
}

<div id="supDiv" onclick="funSup()">
		<div id="subDiv" onclick="funSub()">
			
		</div>
</div>
  • 阻止事件冒泡
function funSub(){
		alert('触发了子div');
		//阻止事件冒泡
		//第一种方式,针对非IE浏览器兼容性好
		event.stopPropagation();
		//第二种方式,针对IE浏览器兼容性好
		event.cancelBubble = true;
}

DOM编程

  • Document Object Model,文档对象模型
  • 所有的HTML文档中的元素都封装成了一个document对象,我们可以操作和获取这些对象
  • DOM树特点
  • 我们把每一个HTML元素称为DOM树上的一个节点(node),每一个节点可以有多个子节点,只能有一个直接父节点
  • 每一个HTML元素都在这个DOM树上
  • DOM编程主要作用
  • 使用DOM编程可以修改HTML文档的样式属性
  • 使用DOM编程可以动态的添加和删除HTML元素
  • 使用DOM编程可以完成表单的验证
  • 获取标签对象
  • 根据标签ID属性值获取标签对象:document.getElementById(ID 属性值);返回一个对象
  • 根据标签的name属性值获取标签对象:document.getElementsByName(name 属性值) ;返回一组对象
  • 根据标签的class属性值获取标签对象:document.getElementsByClassName(class 属性值) ;返回一组对象
  • 根据标签名获取标签对象:document.getElementsByTagName(标签名) ;返回一组对象
<script type="text/javascript">
			function getObj(){
				//根据id获取
				var username = document.getElementById('username');
				console.log('根据id获取:',username);
				
				//根据name获取
				var sexs = document.getElementsByName('sex');
				console.log('根据name获取:',sexs);
				
				//根据class获取
				var form_inps = document.getElementsByClassName('form_inp');
				console.log('根据class获取:',form_inps);
				//根据标签获取
				var inputs = document.getElementsByTagName('input');
				console.log('根据标签名获取:',inputs);
			}
</script>

<form action="" method="POST" >
			Username:<input type="text" id="username" name="username" class="form_inp"/><br>
			Password:<input type="password" id="password" name="password" class="form_inp"/><br>
			Sex:
			<input type="radio" id="male" name="sex"/>男
			<input type="radio" id="female" name="sex"/>女
			<br>
			Hobby:
			<input type="checkbox" id="eat" value="eat" name="hobby"/>吃饭
			<input type="checkbox" id="sleep" value="sleep" name="hobby"/>睡觉
			<input type="checkbox" id="hetBee" value="hetBee" name="hobby"/>打豆豆
			<br>
			<input type="submit" value="提交" /><br>
</form>
<input type="button" value="测试" onclick="getObj()">
  • 操作标签的属性
  • 获取属性值:obj.属性名 或调用方法 obj.getAttribute(属性名);
  • 设置属性值:obj.属性名=新值 或调用方法 obj.setAttribute(属性名,属性值);
function tagAttr(){
          //根据id获得标签对象
          var obj = document.getElementById('username');
          //console.log(obj.value);
          //获取class属性值
          //console.log(obj.getAttribute('class'));
          //设置标签属性值
          //obj.value='Hello';
          obj.setAttribute('value','world');
}
  • 操作标签体内容
  • 获取标签体内容:
  • obj.innerText:只获取纯文本内容
  • obj.innerHTML:获取标签体所有内容,包含子标签
  • 设置标签体内容:
  • obj.innerText = ‘新内容’,新内容会覆盖旧内容
  • obj.InnerHTML = ‘新内容’,如果新内容包含html标签,则会解析标签功能
//操作标签体内容
			//获取
			function getTagInfo(){
				var dv = document.getElementById('dv');
				//console.log(dv.innerText);	只能操作纯文本内容
				console.log(dv.innerHTML);		
				var dvd = document.getElementById('dvd');
				//console.log(dvd.innerText);
				console.log(dvd.innerHTML);		//可以获取到标签体内的子标签
			}
			//设置
			function setTagInfo(){
				var dv = document.getElementById('dv');
				//dv.innerText='鲲之大,一锅炖不下';	只能操作纯文本内容
				dv.innerHTML='<h3>鲲之大,一锅炖不下</h3>';	//可以解析html标签功能
				var dvd = document.getElementById('dvd');	
				//dvd.innerText='鲲之大,一锅炖不下';
				dvd.innerHTML='<h3>鲲之大,一锅炖不下</h3>';
			}
  • 操作单选按钮和多选框
  • 选中:obj.checked = true;
  • 取消选中:obj.checked = false;
  • 返回当前状态:obj.checked 返回当前状态,false:未选,反之
<script type="text/javascript">
		function funTest1(){
				var man = document.getElementById('man');
				//选中
				man.checked = true;
		}
		function funTest2(){
				var man = document.getElementById('man');
				//取消
				man.checked = false;
		}
		function funSelAll(){
				//根据name获得所有的checkbox
				var hobby = document.getElementsByName('hobby');
				for(var i=0;i<hobby.length;i++){
					hobby[i].checked = true;
				}
		}
		function fun1(){
				//获取所有单选按钮
				var sexs = document.getElementsByName("sex");
				console.log(sexs);
				//选中第一个单选按钮
				//sexs[0].checked = true;
				//取消选中状态
				sexs[0].checked = false;
				console.log('单选按钮当前状态:',sexs[0].checked);
				var likes = document.getElementsByName("likes");
				for(idx in likes){
					likes[idx].checked = true;
				}
		}
</script>
  • 操作下拉列表
//下拉列表操作
function fun2(sel){
          //获取当前option选项的value属性值
          //console.log(sel.value);
          //获取当前option选项的下标
          //console.log(sel.selectedIndex);
          //获取所有的option选项
          console.log(sel.options);
}
  • 获取当前对象的关系对象,即关系节点的对象,所有属性支持链式调用,注意中间的空文本test节点标签
  • 获取父节点对象:obj.parentNode 返回值是一个对象
  • 获取所有孩子节点对象:obj.childNodes 返回一个数组
  • 获取上一个哥哥对象:obj.previousSibling 返回一个对象
  • 获取下一个弟弟对象:obj.nextSibling 返回一个对象
<script type="text/javascript">
		function funGetObj(){
				var sp = document.getElementById('dv2_inner_span1');
				//获取父节点对象
				console.log(sp.parentNode);
				//获取父节点的父节点,支持链式调用
				console.log(sp.parentNode.parentNode);
				//获取所有的子节点对象
				//var chileNodes = sp.childNodes;
				var dv2 = document.getElementById('dv2');
				//获取上一个哥哥节点
				console.log(dv2.previousSibling.previousSibling);
				//获取下一个弟弟节点
				console.log(dv2.nextSibling.nextSibling);
		}
</script>
  • 通过DOM编程动态操作HTML页面的元素创建和删除
  • 添加节点
  • var obj = document.createElement(标签名); //创建标签对象
  • parentObj.appendChild(obj); //放到指定的父节点下
function funAddNode(){
        console.log('add node');
        //创建一个span节点
        var span = document.createElement('span');
        //给节点加内容
        span.innerHTML = '新来的';

        //获取未来指定的父节点
        var dv3 = document.getElementById('dv3');
        //给dv3添加子节点
        dv3.appendChild(span); 
}
  • 删除节点
  • parentObj.removeChild(obj); //删除指定的子节点
function funDelNode(){
        var dv3 = document.getElementById('dv3');
        //获取dv3的子节点sp1
        var sp1 = document.getElementById('sp1');
        //删除子节点
        dv3.removeChild(sp1);
}

BOM编程

  • Browser Object Model,浏览器对象模型
  • 可以控制浏览器的相关动作
  • window对象:控制浏览器的窗口相关动作
  • 弹窗提示:window.alert(内容)
  • 确认提示窗口:window.confirm(提示信息) 返回值为true或false
  • 弹窗接受用户信息:window.prompt(提示信息,文本框默认值) 返回用户输入的信息
function fun1(){
          //弹窗
          //window.alert('Hello');
          //确认提示窗口
          //var boo = window.confirm("是否确认");
          //console.log(boo);
          //参数一:提示信息
          //参数二:文本框默认值,可以不要第二个参数
          //返回值:用户输入的信息
          var txt = window.prompt('请输入年龄','年龄是');
          console.log(txt);
}
  • 只执行一次的定时器:var id = window.setTimeout(回调函数,定时延迟/毫秒);
  • 清除定时器:window.clearTimeout(id);
  • 周期性定时器:var id = window.setInterval(回调函数,定时延迟/毫秒);
  • 清除i定时器:window.clearInterval(id);
//一次执行定时器
        //返回值,返回当前定时器的一个标识
        //参数一:回调函数
        //参数二:回调函数的延迟时间,单位毫秒
        /* var timeId1 = window.setTimeout(function(){
          alert('一次性定时器');
        },3000); */
        //周期执行定时器
        //返回值,返回当前定时器的一个标识
        //参数一:回调函数
        //参数二:回调函数的延迟时间,单位毫秒
        var timeId2 = window.setInterval(function(){
          alert('周期性定时器')
        },2000);
        
        //清除定时器
        function clearTime(){
          //清除指定定时器
          window.clearTimeout(timeId1);
          window.clearInterval(timeId2);
        }
  • location对象:控制浏览器地址栏
  • location.href=‘路径’ 跳转页面,也可以向action发送请求
function funBaidu(){
		//跳转到百度
		location.href='http://www.baidu.com';
}

<input type="button" value="百度一下" onclick="funBaidu()" />
  • 编程方式提交表单:formObj.submit();
//提交表单的函数
function funSubmit(){
        //手动提交表单
        var fom = document.getElementById('fom');
        fom.submit();
}

<form action="http://www.baidu.com" method="post" id="fom">
        Username:<input type="text" /><br>
        Password:<input type="password" ><br>
        <input type="button" value="提交" onclick="funSubmit()">
</form>
  • 点击更换验证码,浏览器会把加载过的资源缓存一个验证码图片,会记录下,所以需要加后缀让浏览器不去使用缓存,让浏览器重新发送请求
function changeCaptcha(){
        //根据id获取验证码图片对象
        var captchaImg = document.getElementById('captchaImg');
        captchaImg.src = '${path }/p1/captcha?'+Math.random(); //让浏览器每次都重新加载验证码图片
        //两种方法效果一样
        //captchaImg.src = '${path }/p1/captcha?'+new Date();
}

<img src="${path }/p1/captcha" id="captchaImg">
<a href="javascript:void(0)" onclick="changeCaptcha()">看不清,换一张
//可以传this,在方法中就不需要获取图片对象了,可以简化