JavaScript 详解(表单验证,JSON,JS事件,JS函数)

文章目录

一、什么是JavaScript?

1.概述

  JS是一种脚本编程语言,也是一种基于对象的面向对象语言,还是一种解释性的语言。它的基本结构形式与其他编程语言相似,如C语言、VB语言等,但需要先编译后执行。它支持客户端与服务端的应用程序以及构件的开发。

2.JavaScript的基本组成

在这里插入图片描述
注意:ECMScript最新版本已经到es6,但现在的大多数浏览器还处在es5.

3.怎么引入JavaScript

①内部标签引入
<script  type="text/javascript">
    alert('hello,world');
</script>

注意:body和head都可以存放。type="text/javascript"不必要写,默认。

②外部引入
<script src="js/qj.js"></script>

注意:Script标签必须成对存在。

4.JavaScript的基本语法

①定义变量

在这里插入图片描述

变量类型  变量名  = 变量值;
var score = 71;

注意:JavaScript严格区分大小写!

②打印变量
console.log(score) 在浏览器的控制台打印变量!
③在页面输出
alert(num);
④定义对象
<script>
    var person = {
        name: "qinjiang",
        age: 3,
        tags: ['js','java','web','...']
    }
</script>

注意:
对象是大括号;
数组是中括号~~每个属性之间使用逗号隔开,最后一个不需要添加。
Java的数值必须是相同类型的对象,JavaScript中不需要这样!
如果取数组下标越界,就会输出undefined(未定义)

5.JavaScript的数据类型

在这里插入图片描述
注意:

  • 尽量避免使用浮点数进行运算,存在精度问题!

  • NaN===NaN ,这个与所有的数值都不相等,包括自己 只能通过 isNaN(NaN) 来判断这个数是否是 NaN

  • null和undefined可以等同

                      typeof 123                         "number"
                      typeof '123'                       "string"
                      typeof true                        "boolean"
                      typeof NaN                         "number"
                      typeof []                          "object"
                      typeof {}                          "object"
                      typeof Math.abs                    "function"
                      typeof undefined                   "undefined"            
    
大String与小String的区别
var a="qqq";    //小string 属于原始数据类型
var b=new String("abc");  //string是内置类 父类是object  ,大string属于object

6.严格检查格式:‘use strict’; 预防JavaScript的随意性导致产生的一些问题

<script>
    'use strict';
    let dh = 1;
</script>

注意:必须写在JavaScript的第一行!局部变量建议都使用 let 去定义

7.比较运算符问题

           =
           ==  等于(类型不一样,值一样,也会判断为true)
           ===   绝对等于(类型一样,值一样,结果true)

8.for in 语句与with语句

①for in语句
var  arr=[false,1,2,"ac",3.14] ;
   for(var i=0 ; i<arr.length;i++){
       console.log(arr[i])
   }
   //for   in 语句   可以遍历对象的属性,还有数组 
   for (var i in arr){
         console.log(arr[i])
   }
② with语句
with(obj){
   console.log(sname+ sno);//相当于给对象的属性前面加obj.   with语句
}

二、JavaScript的函数

1.定义函数

(1)方式一

function abs(x){
    if(x>=0){        return x;    }
        else{        return -x;    }
}

注意:如果没有执行 return ,函数执行完也会返回结果,结果就是 undefined
(2)方式二

var abs = function(x){
    if(x>=0){        return x;    }
    else{        return -x;    }
}

注意:function(x){ …. } 这是一个匿名函数。但是可以把结果赋值给 abs ,通过abs 就可以调用函数!

2.假设不存在参数,如何规避?

var abs = function(x){
    //手动抛出异常来判断
    if (typeof x!== 'number') {
        throw 'Not a Number';
    }
    if(x>=0){
        return x;
    }else{
        return -x;
    }
}

3.arguments:是一个JS免费赠送的关键字

for (var i = 0; i<arguments.length;i++){
    console.log(arguments[i]);
}

4.多个参数的问题:获取除了已经定义的参数之外的所有参数

<script>
    function aaa(a,b,...rest) {
        console.log("a=>"+a);
        console.log("b=>"+b);
        console.log(rest);
    }
    aaa()
</script>

注意:rest 参数只能写在最后面,必须用 … 标识。

5.变量的作用域

①假设在函数体中声明,则在函数体外不可以使用(非要想实现的话,后面可以研究一下闭包 )
function qj() {
    var x = 1;
    x = x + 1;
}
x = x + 2; //Uncaught ReferenceError: x is not defined
②如果两个函数使用了相同的变量名,只要在函数内部,就不冲突
function qj() {
    var x = 1;
    x = x + 1;
}

function qj2() {
    var x = 'A';
    x = x + 1;
}
③内部函数可以访问外部函数的成员,反之则不行
function qj() {
    var x = 1;
    // 内部函数可以访问外部函数的成员,反之则不行
    function qj2() {
        var y = x + 1;  // 2
    }
    var z = y + 1; // Uncaught ReferenceError: y is not defined
}
④假设,内部函数变量和外部函数的变量,重名!
<script>
    function qj() {
        var x = 1;
        function qj2() {
            var x = 'A';
            console.log('inner'+x); // outer1
        }
        console.log('outer'+x); //innerA
        qj2()
    }
    qj()
</script>

注意:JavaScript 中 函数查找变量从自身函数开始~,由 ‘’内‘’ 向 ‘’外‘’ 查找 . 假设外部存在这个同名的函数变量,则内部函数会屏蔽外部函数的变量。

⑤提升变量的作用域
function qj() {
    var x = "x" + y;
    console.log(x);
    var y = 'y';
}

结果为:xundefined

⑥js 执行引擎,自动提升了y的声明,但是不会提升变量y的赋值
function qj2() {
    var y;
    var x = "x" + y;
    console.log(x);
    y = 'y';
}
qj2()

6.全局函数

(1)全局对象window

var x = 'xxx';
alert(x);
alert(window.x); // 默认所有的全局变量,都会自动绑定在 window对象下;

(2)alert() 这个函数本身也是一个 window 变量;

<script>
    var x = 'xxx';
    window.alert(x);
    var old_alert = window.alert;
    //old_alert(x);
    window.alert = function () {
    };
    // 发现 alert() 失效了
    window.alert(123);
    //恢复
    window.alert =  old_alert;
    window.alert(456);
</script>

注意:Javascript 实际上只有一个全局作用域, 任何变量(函数也可以视为变量),假设没有在函数作用范围内找到,就会向外查找,如果在全局作用域都没有找到,报错 RefrenceError
(3)问题:局部作用域var的结果超出了范围,依然被计算

function aaa() {
    for (var i = 0; i < 100; i++) {
        console.log(i)
    }
    console.log(i+1); //问题? i 出了这个作用域还可以使用
}

解决办法:let关键字

function aaa() {
    for (let i = 0; i < 100; i++) {
        console.log(i)
    }
    console.log(i+1); //Uncaught ReferenceError: i is not defined
}

7.常量const

(1)一般定义常量

var PI = '3.14';
console.log(PI);
PI = '213'; //可以改变这个值
console.log(PI);

(2)ES6中引入常量const

const PI = '3.14'; // 只读变量
console.log(PI);
PI = '123'; // TypeError: Assignment to constant variable.
console.log(PI);

注意:定义const不可以改变,ES6之前可以被赋值。

8.常用的函数总结

①数据类型相关的函数
isNaN() 函数,数据不是一个数字true
parseInt()  字符串转换为数字,并且取整数位
parseFloat()  字符串转float
Math.cell()  向上取整
"abcdef".substr(1,4)  //从1下标开始,取4个字符bcde
"abcdef".substring(1,4) //左闭右开bcd
②通过object 类型的prototype属性 给对象添加属性和函数。
function student(a,b,c){
      this.sno=a;
      this.sname=b;
      this.sage=c;
 }
student();
var obj = new student(217,"刘恒",11);
console.log(obj.sno);
console.log(obj.sname);
console.log(obj["sage"]);
//所有类都继承了父类object,object中的属性prototype可以给类增加属性和函数
student.prototype.getPname = function(){
     return this.sname;
}
student.prototype.telephone=null;
obj.telephone=1346666;
console .log(obj.getPname())
console.log(obj.telephone)

三、JavaScript的事件

1.常用的事件

在这里插入图片描述

2.注册事件的两种方式

①直接在标签上使用 on事件
  <input type="button"   value="删除数据"   onclick="window.confirm('确定要删除数据')"/>
②通过内置对象注册
var tableElt=document.getElementById("tabl");   //标签id
tableElt.onclick=function(){}

四、JavaScript表单

1.表单验证

在这里插入图片描述
代码展示:

<!doctype html>
<html>
	<head>
		<title>表单验证</title>
		<style> 
		     span{
			     color:red;
				 font-size:"12px";
				 }		  
		  </style>
<script  type="text/javascript">
              window.onload=function(){
			  //获取span对象
			        var usernameerror=document.getElementById("usernameerror");
					//获取用户名对象
			        var usernameElt=document.getElementById("username");
					usernameElt.onblur=function(){
					     //获取value
					      var  username=usernameElt.value;
						  //去掉空格
					       username=username.trim();
						  if(username===""){						     
							   usernameerror.innerText="用户名不能为空";
							   }
						  else{
						        //用户名不为空
								if(username.length < 6||username.length > 14){
								         usernameerror.innerText="用户名必须在6-14位之间";					
									}
							   else{
							        var regExp = /^[A-Za-z0-9]+$/;
							        var ok = regExp.test(username);
							        if(ok){
								//用户名最终合法
							         }else{
								//用户名中含有特殊符号
								       usernameerror.innerText = "用户名只能由字母和数字组成"
							         }
							      }							   
							   }													  
					       }
				  username.onfocus=function(){
				      if(usernameerror.innerText != ""){
					       username.value=" ";
					  }
					usernameerror.innerText="";
				  }
                 var passwordElt1=document.getElementById("password1");
				 var passwordElt = document.getElementById("password");
				 var passworderror = document.getElementById("passworderror");
				 passwordElt1.onblur=function(){
				       var  password1=passwordElt1.value;
					   var  password=passwordElt.value;
				       if(password !=password1){
					      	 passworderror.innerText="密码与确定密码不一致";
						 }
						 else{						
						   //密码一致
						 }
				  }
				passwordElt1.onfocus=function(){
				 if(passworderror.innerText != ""){
					       password1.value=" ";
					  }
					passworderror.innerText="";
				}                 
                 var  emailerrorElt=document.getElementById("emailerror");
				 var   emailElt=document.getElementById("email");
				 emailElt.onblur=function(){
				    var email=emailElt.value;
					var emailRegExp = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
					var ok=emailRegExp.test(email);
					 if(ok){
								//邮箱最终合法
							         }else{
								//邮箱不符合
								       emailerrorElt.innerText = "邮箱不合法";
							         }
				 }
				  emailElt.onfocus=function(){
				 if(emailerrorElt.innerText != ""){
					        emailElt.value=" ";
					  }
					emailerrorElt.innerText="";
				}
               var buttonElt=document.getElementById("submitBtn");
			   buttonElt.onclick=function(){
			        usernameElt.focus();
					usernameElt.blur();
					 passwordElt1.focus();
					passwordElt1.blur();
					 emailElt.focus();
					emailElt.blur();
					if(emailerrorElt.innerText=="" &&passworderror.innerText=="" &&usernameerror.innerText==""){
					  var formElt=document.getElementById("userform");
					   formElt.submit();
					}			       
			     }
			  }
			</script>	
	</head>
	
	<body bgcolor="" " >
	   欢迎学习HTML语言	
	<form action="http://localhost:8080/jd/save" id="userform">
         	 <table border="1px">
			   <tr>
			   <td>用户名</td>  <td><input type="text"  id="username"  name="username" /></td>
			  <span id="usernameerror"></span>
			  <tr>
			    <td>密码</td>  <td><input type="password" id="password"  name="password"/></td>
			   <tr>
			    <td>确定密码</td> <td><input type="password"  id="password1"/></td>
				 <span id="passworderror" ></span>
			  <tr>
			   <td>邮箱</td> <td><input type="email"  id="email"  name="email"s/></td>
				 <span id="emailerror" ></span>
			  <tr>
			  <td> <input type="button" id="submitBtn" value="注册" />
			   <input type="reset"  value="重置"/></td>
           </table>
     </form>
	</body >	   
</html>

2.复选框的全选和取消全选

window.onload=function(){
			  var firstElt=document.getElementById("firstChk");
			  var checkboxElt =document.getElementsByName("aihao");
			  firstElt.onclick=function(){
			      
				   for(var i=0;i<checkboxElt.length; i++){
				        checkboxElt[i].checked=firstElt.checked;
					}
			   }						
			for(var i=0;i<checkboxElt.length; i++){			    				 
				  checkboxElt[i].onclick=function(){
				  var count=0	;
				        for(var i=0;i<checkboxElt.length; i++){       
				          if(checkboxElt[i].checked){
						  count++;
						    }
			              }
						 if(count==checkboxElt.length){
			              firstElt.checked=true;
					   }					   
				    }				  
			    }
			}
		}

3.将当前窗口设置为顶级窗口

在这里插入图片描述

4.文本框改复选框

在这里插入图片描述

五、Date的基本使用

1.Date的函数

<script>
    var now = new Date(); //Sat Jan 04 2020 10:47:06 GMT+0800 (中国标准时间)
    now.getFullYear(); //年
    now.getMonth(); // 月   0~11  代表月
    now.getDate(); // 日
    now.getDay(); // 星期几
    now.getHours(); // 时
    now.getMinutes(); // 分
    now.getSeconds(); // 秒
    now.getTime(); // 时间戳 全世界统一 1970 1.1 0:00:00  毫秒数
    console.log(new Date(1578106175991)) //时间戳转为时间
    now.toLocaleString()           "2020/1/4 上午10:49:35"
    now.toGMTString()              "Sat, 04 Jan 2020 02:49:35 GMT"
</script>

2.周期函数,不断刷新时间

<script>var getTim =function(){
            var date=new Date();
			document.getElementById("data").innerHTML=date.toLocaleString();
	  }
	         var start=function(){
	           ends=  window.setInterval("getTim()",1000);
	         }
			 var end=function(){
			 window.clearInterval(ends);
			 }
</script>
 <input type="button"  value="点击获取时间"  onclick="start()"/>
 <div   id="data" ></div>
 <input type="button"  value="点击停止时间"  onclick="end()"/>

六、JSON

1.JSON是什么

  • JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。
  • 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。
  • 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

2.JSON的格式

  • 对象都用 {}
  • 数组都用 []
  • 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
①JSON字符串 和 JS 对象的转化**
var user = {
    name: "qinjiang",
    age: 3,
    sex: '男'
}
//对象转化为json字符串 {"name":"qinjiang","age":3,"sex":"男"}
var jsonUser =  JSON.stringify(user);
//json 字符串转化为对象 参数为 json 字符串
var obj = JSON.parse('{"name":"qinjiang","age":3,"sex":"男"}');
②通过JSON给表格赋值
<!doctype html>
<html>
	<head>
		<title>弹出确定框,获取表格中的数据并展示出来</title>
	</head>
	<body >
	  <script>		
         var dorm ={
		         "personnel":6,
				 "student":[
				        {"name":"刘恒","id":"7758521","address":"陕西省西安市","assets":"100亿"},
						{"name":"常铭轩","id":"7758522","address":"陕西省西安市","assets":"250"},
						{"name":"贾刘煜","id":"7758523","address":"陕西省西安市","assets":"100亿"},
						{"name":"岳囿辰","id":"7758524","address":"陕西省西安市","assets":"100亿"},
						{"name":"张友为","id":"7758525","address":"陕西省西安市","assets":"2500"},
						{"name":"张少华","id":"7758526","address":"陕西省西安市","assets":"100亿"}
                          ]
					};
		window.onload=function(){
           var tableElt=document.getElementById("tabl");
		   tableElt.onclick=function(){
		        var student = dorm.student;
				var html="";
				for(var i=0;i<student.length;i++){
				   var stu=student[i];
				   html +="<tr>";
				   html +="<td>"+stu.name+"</td>" ;
				   html +="<td>"+stu.id+"</td>";
				   html +="<td>"+stu.address+"</td>";
				   html +="<td>"+stu.assets+"</td>";
				   html +="</tr>";			       
				}
				document.getElementById("emptbody").innerHTML=html;
				document.getElementById("personnum").innerHTML=dorm.personnel; 
		   }		 
		}	
	  </script>
	</body >
	 <h1>217宿舍成员登记表</h1>
	 <input type="button"  value="显示表格内容" id="tabl" />
     <table border="1px" width="500px">
	    <tr>   
		    <td>姓名</td>
			<td>学号</td>
			<td>家庭地址</td>
			<td>资产</td>
		</tr>
		<tbody  id="emptbody">
		</tbody>
	</table>
	宿舍总人数:
	 <span id="personnum"></span>
</html>
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贫僧洗发爱飘柔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值