JavaScript

一、JavaScript

表单验证-减轻服务器端压力

JavaScript是一种基于对象和事件驱动的、并具有安全性能的脚本语言

解释性语言,边执行边解释

1. 组成

ECMAScript(ES)

DOM

BOM

2. 执行原理

image-20230515200700055

3. 引入方式

<html>
    <head>
    </head>
    <body>
        
    </body>
    <script type="text/javascript">
    	document.write("hello js");
    </script>
</html
<script src="./js/index.js" type="text/javascript"></script>
<div onclick="alert(33)">666</div>
<div onclick="javascript:alert(\"aaa\")">666</div>

4.代码调试方式

alert();//弹窗
doccument.write();//网页输出
console.log();//控制台输出

二、ECMAScript

1. 变量

变量声明使用var关键字

typeof()查看变量的数据类型

1.1 let 和 var 的区别

//let 关键字定义的变量的作用域就在当前的语句块内
//var 函数级作用域

2 .数据类型

object

对象类型

number

number数值类型

boolean

true和false

string

string类型:单引号或者双引号

undefined

undefined 一个变量没有定义初始值,那么它的值就是undefined,未定义的意思。

null

null一个变量的初始值为null,有值,但是值为null

NaN

不是一个数字

String属性

字符串对象.length

String方法
方法名称 说明
charAt(index) 返回在指定位置的字符
indexOf(str,index) 查找某个指定的字符串在字符串中首次出现的位置
substring(index1,index2) 返回位于指定索引 index1和index2之间的字符串,并且包括索引index1对应的字符,不包括索引index2对应的字符
split(str) 将字符串分割为字符串数组

image-20230520152223790

3. 数组

//1.定义数组
var arr = new Array();
arr[0]=10;
arr[1]=20;
arr[2]=30;
arr[3]="java";//不给值就是empty
arr[6]=true;
//2.定义数组
var fruit = new Array("apple",98,true);
//3.定义数组
var arr1=[10,"java",true];
for(var i=0;i<arr1.length;i++){
    console.log(arr1[i])
}
//4.定义数组,长度为5
var fruit = new Array(5);
//追加一个值
arr1.push(50);

//扩容
var arr = new Array(5);
arr.length=10;
//缩小
var arr = new Array(5);
arr.length=2;

属性方法

类别 名称 描述
属性 length 设置或返回数组中元素的数目
方法 join() 把数组的所有元素放入一个字符串,通过一个的分隔符进行分割
sort() 对数组排序
push() 向数组末尾添加一个或者更多元素,并返回新的长度
shift() 删除并返回数组的第一个元素
unshift() 向数组的开头添加一个或多个元素,并返回新的长度
pop() 删除并返回数组的最后一个元素
splice(x,y) 删除元素,并向数组添加新元素;x开始 删除的下标,y删除的个数
splice(1,0,"你好") 在下标为1的位置添加元素“你好“
toString() 把数组转化为字符串,并返回结果
reverse() 数组反转

4. 运算符

类型 运算符
算数运算符 +,-,,/,%,++,--
赋值运算符 =,+=,-=
比较运算符 >,<,>=,<=,,!=,=,!==
逻辑运算符 &&,||,!,^,&,|
alert(true=="true");//F
alert(true==1);//T
alert(true=="1");//T
alert("true"==1);//F
alert("true"=="1");//F
alert(1=="1");//T

5. 逻辑控制语句

if

if(条件){
	//javaScript代码;
}
else{
	//javavScript代码;
}

switch

switch(表达式){
	case 常量1:
		javaScript语句1;
		break;
	case 常量2:
		javaScript语句2;
		break;
	...
	default:
		javaScript语句3;
}

for

for(初始化;条件;增量){
	js代码;
}

while

while(条件){
	js代码;
}

for-in

var fruit = new Array("apple",98,true);
for(var i in fruit){
    console.log(fruit[i]);
}

do-while

var i=0;
do{
	console.log(++i);
}while(true)

6. 注释

//
/**/

7. 输入输出

alert()

alert("提示信息");

prompt()

prompt("提示信息","输入框的默认信息");
prompt("请输入你喜欢的颜色","红色");
prompt("请输入你喜欢的颜色","");

8. 语法规定

代码区分大小写

变量,对象和函数的名称

分号

9. with域的用法

//里面所有内容都基于document对象
with(document){
    write("hello js");
    write("hello js");
    write("hello js");
    write("hello js");
}

10. 函数

不用定义属于某个类,直接使用

函数分类:系统函数和自定义函数

10.1 常用系统函数

parselnt(“字符串”)

将字符串转换为整型数字
如: parselnt(”86”)将字符串“86“转换为整型值86

parseFloat(”字符串”)

将字符串转换为浮点型数字
如: parseFloat("34.45”)将字符串“34.45“转换为浮点值34.45

eval()

//计算
var num1= 1;
var num2= 2;
var sign= "";
var result = eval(num1+sign+num2)

isNaN()

用于检查其参数是否是非数字

escape()

转码

unescape()

解码

var str = 'AAAA';
var aTest= new Array(); //['ff'[,'er']] \ new Array(10); \ new Array('ff','fee');
var obj = new Obejct(); // {name:'zhangsan',height:198}
var today = new Date();
// Math对象示需要声明。

字符串:
length属性:长度
concat 方法(String)连接两个或更多个字符串。
indexOf(string) 返回出现字符串的位置
substr(num1,[num2])截取字符串
toLowerCase() 转换成小写
toUpperCase() 转换成大写
replace(str1,str2) 字符串替换
 
 Array:
concat 返回一个由两个数组合并组成的新数组。
join  返回一个由数组中的所有元素连接在一起的 String 对象。
pop  删除数组中的最后一个元素并返回该值。
push 向数组中添加新元素,返回数组的新长度。
shift 删除数组中的第一个元素并返回该值。
unshift 返回一个数组,在该数组头部插入了指定的元素。
sort  返回一个元素被排序了的 Array 对象
reverse  返回一个元素反序的 Array 对象。
slice 返回数组的一个片段。
splice 从数组中删除元素,
 
 Math:
ceil(数值)   大于或等于该数的最小整数
floor(数值)   小于或等于该数的最大整数
min(数值1,数值2) 返回最小值
max(数值1,数值2) 返回最大值
pow(数值1,数值2) 返回数值1的数值2次方
random()     返回随机数 0---1
round(数值)     四舍五入
sqrt(数值)     开平方根
 
 Date:
getYear() 返回年份(2位或4位)
getFullYear() 返回年份(4位)
getMonth() 返回月份  0-11
getDate()     返回日期 1-31
getDay() 返回星期数 0-6
getHours() 返回小时数 0-23
getMinutes() 返回分钟数 0-59
getSeconds() 返回秒数 0-59
getMilliseconds() 返回亳秒数0-999
例:获取本地时间
var myDate=new Date(dtime.replace(/-|\./g,"/")); //dtime格式 2013-08-09 24:08:09 ie
myDate.getYear();        //获取当前年份(2位)
myDate.getFullYear();    //获取完整的年份(4位,1970-????)
myDate.getMonth();       //获取当前月份(0-11,0代表1月)
myDate.getDate();        //获取当前日(1-31)
myDate.getDay();         //获取当前星期X(0-6,0代表星期天)
myDate.getTime();        //获取当前时间(从1970.1.1开始的毫秒数)
myDate.getHours();       //获取当前小时数(0-23)
myDate.getMinutes();     //获取当前分钟数(0-59)
myDate.getSeconds();     //获取当前秒数(0-59)
myDate.getMilliseconds();    //获取当前毫秒数(0-999)
myDate.toLocaleDateString();     //获取当前日期
var mytime=myDate.toLocaleTimeString();     //获取当前时间
myDate.toLocaleString( );        //获取日期与时间

setTimeout();
setInterval();

10.2 自定义函数

var sum = function(){
    return 10+20;
}

var sum =new Function("aler('我是函数声明')");
//无参
function sum(){
	return 10+20;
}

//有参
function sum(num1,num2){
    return num1-num2;
}

//函数互相调用
function mathDemo(n1,n2){
    alert(sum(n1,n2));
}

11. 变量

11.1 全局变量

定义在script脚本中,方法之外的变量叫做全局变量,被整个页面共享。

局部变量是定义在函数之中,或者是代码块之中的变量叫做局部变量,作用在函数内部。

与java不同的地方

var num1=100;

function cale1(){
    if(num1>3){
    	var num3=101;
    }
    alert(num3);
}
//定义在代码中的变量,在方法内部都可以进行访问

12. 事件

名称 说明
onload 一个页面或一幅图像完成加载
onclick 鼠标单击某个对象
onmouseover 鼠标移到某个元素上
onmouseout 鼠标离开
onmousemove 鼠标移动事件
onkeydown 某个键盘按键被按下
onchange 域的内容被改变
onfocus 获得焦点事件
onblur 失去焦点

13. 创建对象

//方式1:
let obj01 = new Object();objo1.name = "AA";
objo1.age = 17;
objo1.sex = "男";
objo1.getInfo = function(){
	return this.name + ","+this.sex+","+ this.age;
}
document.write(obj01.getInfo())
//方式2:
function user(name,age){
	this.name = name;
	this.age = age;
	this.eat = function(){
		alert("eat方法");
	}
}
document.write(user("zs",11))
//方式3:
var obj3 = {name:"zs",sex:"nan",age:88,getInfo:function(){
   return this.name + ","+this.sex+","+ this.age;
}};
document.write(obj3.getInfo())

//方式4:
var stu = '{"name":"zs","age":19}';
var obj = eval("("+stu+")");

//原型prototype对象
function user(name,age){
	this.name = name;
	this.age = age;
	this.eat = function(){
		alert("eat方法");
	}
}
function user2(){
    this.run = function{
        alert("run方法");
    }
}
user.prototype = new user2();
var us =new user();
us.run();

三、BOM对象和DOM对象

image-20230522085918546

image-20230522090204889

1. BOM对象

1.1 三种弹窗

window.alert();//弹窗

window.confirm();///确认 取消

window.prompt();//输入

提供了独立于内容的,可以与浏览器窗口j进行互动的对象结构

image-20230519153301740

BOM可实现功能

弹出新的浏览器窗口
移动,关闭浏览器窗口以及调整窗口的大小
页面的前进,后腿

1.2 属性

window.属性名="属性值"
window.location="http://www.baidu.cn"
表示跳转到百度首页
属性名称 说明
history 有关客户访问过的URL的信息
location 有关当前URL的信息

1.3 方法

方法名称 名称
prompt() 显示可提示用户输入的对话框
alert() 显示带有一个提示信息和一个确定按钮的警示框
confirm() 显示一个带有提示信息确定和取消按钮的对话框
close() 关闭浏览器窗口
open() 打开一个新的浏览器窗口,加载给定URL所指定的文档
setTimeout() 在指定的毫秒数后调用函数或计算表达式
setInterval() 按照指定的周期(以毫秒计)来调用函数或者表达式

1.4 open方法参数

window.open("弹出窗口的url","窗口名称","窗口特征")

image-20230519164337761

2. history对象

2.1 属性

length

返回浏览器历史列表中的url数量

2.2 常用方法

名称 说明
back() 还在history对象列表中的前一个url
forward() 加载history对象列表中的下一个url
go() 加载history对象列表中的某个具体的url,负数后退,正数前进,0刷新

image-20230519170548682

3. location对象

3.1 常用属性

名称 说明
host 设置或返回主机名和当前URL的端口号
hostname 设置或者返货当前URL的主机名
href 设置或者返回完整的URL

3.2 常用方法

名称 说明
reload() 重新加载当前文档
replace() 用新的文档替换当前文档

4. Screen对象

window.screen.heigth;
window.screen.width;
//获得当前屏幕分辨率

5. Navigator对象

window.navigator.userAgent;
//用户代理

6. 内置对象

6.1 Date对象

var 日期对象 = new Date(参数)

参数格式:MM DD,YYYY,hh:mm:ss

var today = new Date();//返回当前日期和时间
var tdate = new Date("september 1,2013,14:58:12");

6.1.1 常用方法

方法 说 明
getDate() 返回 Date 对象的一个月中的每一天,其值介于1~31之间
getDay() 返回 Date 对象的星期中的每一天,其值介于0~6之间
getHours() 返回 Date 对象的小时数,其值介于0~23之间
getMinutes() 返回 Date 对象的分钟数,其值介于0~59之间
getSeconds() 返回 Date 对象的秒数,其值介于0~59之间
getMonth() 返回 Date 对象的月份,其值介于0~11之间
getFullYear() 返回 Date 对象的年份,其值为4位数
getTime() 返回自某一时刻(1970年1月1日)以来的毫秒数

使用Date对象的方法显示当前时间的小时、分钟和秒

function disptime(){
var today = new Date();  
var hh = today.getHours(); 
var mm = today.getMinutes();
var ss = today.getSeconds();
document.getElementById("myclock").innerHTML="现在是:"+hh +":"+mm+": "+ss;
}
disptime();

<div id="myclock"></div>

6.2 Math对象

6.2.1 常用方法

方法 说 明 示例
ceil() 对数进行上舍入 Math.ceil(25.5);返回26Math.ceil(-25.5);返回-25
floor() 对数进行下舍入 Math.floor(25.5);返回25Math.floor(-25.5);返回-26
round() 把数四舍五入为最接近的数 Math.round(25.5);返回26Math.round(-25.5);返回-26
random() 返回0~1之间的随机数 Math.random();例如:0.6273608814137365

如何实现返回的整数范围为2~99?

var iNum=Math.floor(Math.random()*98+2);

6.2.2 随机选择颜色

function selColor(){
        var color=Array("红色","黄色","蓝色","绿色","橙色","青色","紫色");
        var num=Math.ceil(Math.random()*7)-1;
        document.getElementById("color").innerHTML=color[num];
}

6.3 定时函数

制作的时钟特效示例中,时间为什么不改变?

由于时间在不停地走,所以应该每隔1秒调用显示时间的方法,如何解决?

setTimeout()

setTimeout("调用的函数",等待的毫秒数)
var  myTime=setTimeout("disptime() ", 1000 );

<input name="s" type="button" value="显示提示消息" onclick="timer()" />
function timer(){
        var t=setTimeout("alert('3 seconds')",3000);
}

setInterval()

setInterval("调用的函数",间隔的毫秒数)
var  myTime=setInterval("disptime() ", 1000 );

如果要多次调用,使用setInterval()或者让disptime()自身再次调用setTimeout()

6.4 清除函数

clearTimeout()

clearInterval()

clearTimeout(setTimeOut()返回的ID值)

var  myTime=setTimeout("disptime() ", 1000 );
clearTimeout(myTime);

clearInterval ()
clearInterval(setInterval()返回的ID值)
var  myTime=setInterval("disptime() ", 1000 );
clearInterval(myTime);

制作显示年、月、日、星期几,并且显示上午(AM)和下午(PM)的十二进制的时钟

image-20230519200900855

获得年、月、日、时、分、秒
按12小时制显示小时
判断星期几
使用setInterval()定时显示当前时间

如果hour(小时)>12,则hour=hour-12

image-20230519201040825

6.5 BigNumber

https://mikemcl.github.io/bignumber.js/

var num1= 0.1;
var num2= 0.2;
console.log(BigNumber(num1).plus(num2)-0);
console.log(BigNumber(num1).minus(num2)-0);
console.log(BigNumber(num1).times(num2)-0);
console.log(BigNumber(num1).div(num2)-0);
console.log(BigNumber(num1).mod(num2)-0);

6.6 arguments对象

function method1(){
	document.write(arguments.length);
    for (let i = 0; i < arguments.length; i++) {
        document.write(arguments[i] + " ");
    }
}
method01(1,2,3,4,5,6,7);

7. Document对象

7.1 常用属性

名称 说明
referrer 返回载入当前文档的URL
URL 返回当前文档的URL

image-20230519171948213

7.2 Document直接获取节点

名称 说 明
getElementById() 返回对拥有指定id的第一个对象的引用
getElementsByName() 返回带有指定名称的对象的集合
getElementsByClassName() 返回带有指定类名的对象的集合
getElementsByTagName() 返回带有指定标签名的对象的集合
write() 向文档写文本、HTML表达式或JavaScript代码

7.3 Document间接获取节点

属性 说明
.childNodes 获取所有子节点(空白文档也算节点)
.parentNode 获取父节点
.nextSibling 获取下一个节点,包含空白文档
.nextSibling.nextSibling 获取下下一个节点,包含空白文档
.nextElementSibling 获取下一个节点,不包含空白文档
.previousSibling 获取上一个节点,包含空白文档
.previousSibling.previousSibling 获取上上一个节点,包含空白文档
.previousElementSibling 获取上一个节点,不包含空白文档

7.4 操作属性

let a = document.getElementById("div1");
let ty = a.type;
let va = a.value;
let na = a.name;

let hi = div.getElementsByTagName("div");
hi.style.width="300px";
//background-color:需要使用驼峰命名规则进行改变
hi.style.backgroundColor="red";

7.5 操作文本

let hi = div.getElementsByTagName("div");
var inn = hi.innerHTML;//获取html内容
var inn = hi.innerText;//获取文本
//用于双标签
//单标签用value获得
<!--特殊的操作-->
<select id="sele" onchange="demo2()">
    <option value="0">--请选择--</option>		<option value="1">中国</option>
    <option value="2">美国</option>
</select>

<textarea rows="20" cols="20"id="tex">1223455</textarea>

<script type="text/javascript">
    var value = getElementById("sele").value;
    var value = getElementById("tex").value;
</script>

7.6 添加节点

//创建节点
let fom = document.getElementById("fom");
let p = document.createElement("p");
p.innnerText="照片";
let inp = document.createElement("input");
inp.type="file";

//添加节点对象
fom.appendChild(p);
p.appendChild(inp);

//获得最后一个节点对象
var lastNode=document.getElementById("lastNode");
//添加到之前
fom.insertBefore(p,lastNode);

//移除子节点
p.removeChild(inp);
p.removeChild(inp2);

//移除本身
p.remove();

//替换节点
p.replaceChild(p,img);//把img替换成p

7.6.1 操作节点样式

<ul>
    <li>a</li>
    <li>b</li>    
    <li>c</li>    
    <li>d</li>
</ul>
<script>
	let list = document.getElementByTagName("li");
    for (let i = 0; i < list.length; i++) {
        switch (i % 2) {
            case 0:
                list[i].style.color = "red";
                break;
            case 1:
                list[i].style.color = "blue";
                break;
        }
    }
</script>

7.7 a链接触发javascript

<a href="javascript:changebc()">点击更换主题</a>

7.8 控制表单提交方式

方式1:

onsubmit = "return checkName()"

方式2:

//手动提交表单
document.fom.submit();//name=fom

//根据id获取后.submit();

7.9 表单校验

7.9.1 正则表达式

^:开始
[0-9][a-z A-Z]:数字 字母
{2,4}:段域 至少是2位 最多是4位
{3}:指定范围是3位
{2,}:至少2位
$:结束
\d:[0-9]
\w:[0-9 a-z A-Z]

 //汉字正则表达式
 var reg=/^[\u4e00-\u9fa5]{3,5}$/
 
 reg.test(内容);

7.10 获取表单值的方式

<form action=""></form>
<form action=" name="myForm">
	<input type="text" id="userName"name="uName" value="IT老邪">
</form>
<script>
	var userName = document.getElementById("userName").value;
	var userName = document.myForm.uName.value;
	var userName = document.forms[1].uName.value;
 	var userName = document.forms['myForm'].uName .value;
	var userName = document.forms.myForm.uName.value;
	var userName = document.getElementsByTagName("input")[0].value;
	var userName = document.getElementsByTagName("input").item(0).value;
    document.write(userName);
</script>

7.11 操作表格

var tab = document.getElementById("tb_table");
var row = tab.insertRow();//添加行
row.insertCell(0).innerHTML = "00";//添加单元格
row.insertCell(1).innerHTML = "01";//添加单元格

8. 多选按钮

<body>
    <ul>
        <li><inputtype="checkbox" name="hobby[]" value="1">琴</li>
        <li><inputtype="checkbox" name="hobby[]" value="2">棋</li>
        <li><inputtype="checkbox" name="hobby[]" value="3">书</li>
        <li><inputtype="checkbox" name="hobby[]" value="4">画</li>
    </ul>
	<button onclick="doSel(1)">全选</button>
    <button onclick="doSel(2)">全不选</button>
    <button onclick="doSel(3)">反选</button>
</body>
<javascript>
	function doSel(sel) {
		// 获取所有的input标签
        let list = document.getElementsByTagName("input");
    	for (let i = 0; i < list.length; i++) {
            switch (sel) {
               	 case 1: // 全选
                    list[i].checked = true;
                    break;
                 case 2: // 全不选
                    list[i].checked = false;
                    break;
             	 case 3: // 反选
                    list[i].checked= !list[i].checkedbreak;	
                  	break;
           }
        }
	}
</javascript>

9. 进度条

<head>
<meta charset="UTF-8">
<title>进度条</title>
<script>
    var progress=null;
    var time = null;
    var m = 0;
    function running(){
        time = setInterval(function(){
            progress.value = ++m;
            if (m > 100){
                clearInterval(time);
                time = null;
                document.getElementById("btn").disabled=true;
                alert("下载完成");
                return;
            }
        },100);
    }
    function doStart(){
        progress = document.getElementById("pid");
        if(!time)
            running();
    }
</script>
</head>
<body>
    <progress id="pid" value="50" max="100">-- 浏览器不支持这个进度条部件</progress>
	<button onclick="doStart()" id="btn">下载</button>
</body>

10. 级联效果

<body>
    <h3>级联效果</h3>
    <hr>
    <select name=" id="sid01" onchange="method(this.value)">
        <option selected disabled>-- 选择班级 --</option>
        <option value="1">一班</option>
        <option value="2">二班</option>
        <option value="3">三班</option>
    </select>
    <select name=" id="sid02" style="display: none;"></select>
    <script>
        var list = new Array();
        list[1] = ["101","102","103"];
        list[2] = ["201","202","203"];
        list[3] = ["301","302","303"];
        function method(n){
            var sid02 = document.getElementById("sid02");
            sid02.style.display="block";
            for(var i = 0;i<list[n].length;i++){
                sid02.add(new Option(list[n][i],i));//option(内容,value属性中的内容)
            }
        }
    </script>
</body>

11. 右键菜单

//如果需要跟踪鼠标轨迹的话,需要在匿名函数中传递 ent(事件对象) 参数
document.oncontextmenu = function(ent) {
    // 处理兼容性问题
    var ent = ent || window.ent;
    // 确定鼠标的位置,显示菜单
    uid.style.left = ent.clientX + "px";
    uid.style.top = ent.clienty + "px";
    // 显示UL
    uid.style.dispaly = "block";
    return false;
}

// 隐藏UL
document.onclick = function(){
    uid.style.display = "none";
}

12. 事件冒泡

mid.onclick = function () {
    alert("大的DIV被点击了! ~");
};
sid.onclick = function (ent) {
    var event = ent || window.event;
    alert("小的DIV被点击了!~");
    // event.stopPropagation();
    event.cancelBubble = true ;
};
posted @ 2023-05-22 21:01  YxinHaaa  阅读(12)  评论(0编辑  收藏  举报