文章目录
什么是JavaScript?
JavaScript是一门跨平台、面向对象的脚本语言,用来控制网页的行为,能使网页可交互。
W3C标准:网页主要由三部分组成
结构:HTML;表现:CSS;行为:JavaScript
引入方式
1、内部脚本:将JS代码定义在HTML页面中。
2、外部脚本:将JS代码定义在外部JS文件中,然后引入到HTML页面中。
基础语法
书写语法
1、区分大小写
2、结尾的分号可有可无
3、注释:单行注释、多行注释
4、大括号代表代码块
输出语句
window.alert()写入警告框
document.write()写入HTNL输出
console.log()写入浏览器控制台
变量
var:
1、作用域:全局
2、变量可以重复定义
{
let age = 30;
var age = 30;
}
alert(age);
数据类型
分为两类:原始类型和引用类型
5种原始类型:
number:数字(整数、小数、NaN)
string:字符、字符串、单双引号皆可
boolean:布尔类型
null:对象为空
undefined:当声明的变量未初始化时,该变量的默认值是undefined
使用typeof运算符可以获取数据类型
alert(typeof age);
运算符
==:
1、先判断类型是否一样,如果不一样,则进行类型转换
2、再去比较其值
全等于 ===:
1、先判断类型是否一样,如果不一样,直接返回false
2、再去比较其值
类型转换:
1、其他类型转为number:
- string:按照字符串的字面值,转为数字,如果字面值不是数字,则转为NaN。一般使用parseInt
- boolean:true转为1,false转为0。
2、其他类型转为boolean:
- number:0和NaN转为false,其他的数字转为true
- string:空字符串转为false,其他字符串转为true
- null:false
- undefined:false
流程控制语句
if
switch
for
while
do...while
函数
函数是被设计为执行特定任务的代码块
常用对象
Array
定义:
var 变量名 = new Array(元素列表);
如:var arr = new Array(1,2,3);
var 变量名 = [元素列表];
如:var arr = [1,2,3];
访问:
arr[索引] = 值;
如:arr[0] = 1;
JS数组类似于Java集合,长度、类型都可变
Array属性:
length:数组中元素的个数
方法:
push:添加方法
var arr = [1,2,3];
arr.push(10);
alert(arr);
splice:删除元素
var arr = [1,2,3];
arr.splice(0,1);
alert(arr);
String
定义:
var 变量名 = new String(s);
如:var str = new String("hello");
var 变量名 = s;
如:var str = 'hello';
属性:
length:字符串长度
方法:
charAt() 返回在指定位置的字符
indexOf() 检索字符串
trim() :去除字符串前后两端的空白字符
自定义对象
格式:
var 对象名称 = {
属性名称1:属性值1,
属性名称2:属性值2,
.......
函数名称:function(形参列表){}
......
};
如:
var person = {
name:"zhangsan",
age:23,
eat:function(){
alert("干饭~~~");
}
};
BOM(浏览器对象模型)
JavaScript将浏览器的各个组成部分封装为对象、
组成:
Window:浏览器窗口对象
Navigator:浏览器对象
Screen:屏幕对象
History:历史记录对象
Location:地址栏对象
Window对象
获取:直接使用window,其中window.可以省略
window.alert("abc");
属性:获取其他BOM对象
history 对History对象的只读引用
Navigator 对Navigator对象的只读引用
Screen 对Screen对象的只读引用
location 用于窗口或框架的Location对象
方法:
alert() 显示带有一段消息和一个确认按钮的警告框
confirm() 显示带一段消息以及确认按钮和取消按钮的对话框
setInterval() 按照指定的周期(毫秒)来调用函数或计算表达式(循环执行)
setTimeout() 在指定的毫秒数后调用函数或计算表达式(只执行一次)
setTimeout(function(){
alert("弹出);
},3000);
setInterval(function(){
alert("弹出);
},3000);
简单定时器案例-灯泡闪烁
<body>
<input type="button" onclick="on()" value="开灯">
<img id="myImage" border="0" src="../imgs/off.gif" style="text-align:center;">
<input type="button" onclick="off()" value="关灯">
<script>
function on(){
document.getElementById('myImage').src='../imgs/on.gif';
}
function off(){
document.getElementById('myImage').src='../imgs/off.gif'
}
var x = 0;
// 根据一个变化的数字,产生固定个数的值; 2 x % 2 3 x % 3
//定时器
setInterval(function (){
if(x % 2 == 0){
on();
}else {
off();
}
x ++;
},1000);
</script>
</body>
History对象
获取:使用window.history获取,其中window.可省略
window.history.方法();
history.方法();
方法:
back() 加载history列表中的前一个url
forward() 加载history列表中的下一个url
Location对象
获取:使用window.location获取,其中window.可省略
window.location.方法();
location.方法();
方法:
href 设置或返回完整的url
DOM(文档对象模型)
获取Element对象
获取:使用Document对象的方法来获取
<script>
//1. getElementById:根据id属性值获取,返回一个Element对象
var img = document.getElementById("light");
// alert(img);
img.src = "../imgs/on.gif";
//2. getElementsByTagName:根据标签名称获取,返回Element对象数组
var divs = document.getElementsByTagName("div");
/*
style:设置元素css样式
innerHTML:设置元素内容
*/
for (let i = 0; i < divs.length; i++) {
//divs[i].style.color = 'red';
divs[i].innerHTML = "呵呵";
}
//3. getElementsByName:根据name属性值获取,返回Element对象数组
var hobbys = document.getElementsByName("hobby");
for (let i = 0; i < hobbys.length; i++) {
//alert(hobbys[i]);
hobbys[i].checked = true;
}
//4. getElementsByClassName:根据class属性值获取,返回Element对象数组
var clss = document.getElementsByClassName("cls");
/*for (let i = 0; i < clss.length; i++) {
alert(clss[i]);
}*/
</script>
常见HTML Element对象的使用
详情见文档
事件监听
事件:HTML事件发生在HTML元素上的“事情”。
*例如:按钮被点击、鼠标移动到元素之上、按下键盘按键
事件监听:JavaScript可以在事件被侦测到时执行代码。
事件绑定
有两种方式:
一、通过HTML标签中的事件属性进行绑定
<input type="button" onclick="on()">
function on(){
alert("我被点了");
}
二、通过DOM元素属性绑定(推荐使用该方式)
<input type="button" id="btn">
document.getElementById("btn").onclick = function (){
alert("我被点了");
}
常见事件(event代表事件对象)
onload事件:某个页面或图像被完成加载
onblur事件:失去焦点
onfocus事件:获得焦点
onclick事件:单击事件
onkeydown事件:键盘按键被按下
onmouseout事件:鼠标从某元素移开
onmouseover事件:鼠标移到某个元素上
onsubmit事件:表单提交时触发该事件
返回true则表单会被提交,返回false则不会被提交
案例—表单提交
要求:
- 用户名 6-12位
- 密码 6-12位
- 手机号 11位
- 当输入框失去焦点时,验证输入内容是否符合要求
- 当点击注册按钮时,判断所有输入框的内容是否都符合要求,如果不符合这阻止表单提交
body表单页面:
<div class="form-div">
<div class="reg-content">
<h1>欢迎注册</h1>
<span>已有帐号?</span> <a href="#">登录</a>
</div>
<form id="reg-form" action="#" method="get">
<table>
<tr>
<td>用户名</td>
<td class="inputs">
<input name="username" type="text" id="username">
<br>
<span id="username_err" class="err_msg" style="display: none">用户名不太受欢迎</span>
</td>
</tr>
<tr>
<td>密码</td>
<td class="inputs">
<input name="password" type="password" id="password">
<br>
<span id="password_err" class="err_msg" style="display: none">密码格式有误</span>
</td>
</tr>
<tr>
<td>手机号</td>
<td class="inputs"><input name="tel" type="text" id="tel">
<br>
<span id="tel_err" class="err_msg" style="display: none">手机号格式有误</span>
</td>
</tr>
</table>
<div class="buttons">
<input value="注 册" type="submit" id="reg_btn">
</div>
<br class="clear">
</form>
</div>
body的js代码
<script>
//1. 验证用户名是否符合规则
//1.1 获取用户名的输入框
var usernameInput = document.getElementById("username");
//1.2 绑定onblur事件 失去焦点
usernameInput.onblur = checkUsername;
function checkUsername() {
//1.3 获取用户输入的用户名
var username = usernameInput.value.trim();
//1.4 判断用户名是否符合规则:长度 6~12,单词字符组成
var reg = /^\w{6,12}$/;
var flag = reg.test(username);
//var flag = username.length >= 6 && username.length <= 12;
if (flag) {
//符合规则
document.getElementById("username_err").style.display = 'none';
} else {
//不合符规则
document.getElementById("username_err").style.display = '';
}
return flag;
}
//1. 验证密码是否符合规则
//1.1 获取密码的输入框
var passwordInput = document.getElementById("password");
//1.2 绑定onblur事件 失去焦点
passwordInput.onblur = checkPassword;
function checkPassword() {
//1.3 获取用户输入的密码
var password = passwordInput.value.trim();
//1.4 判断密 码是否符合规则:长度 6~12
var reg = /^\w{6,12}$/;
var flag = reg.test(password);
//var flag = password.length >= 6 && password.length <= 12;
if (flag) {
//符合规则
document.getElementById("password_err").style.display = 'none';
} else {
//不合符规则
document.getElementById("password_err").style.display = '';
}
return flag;
}
//1. 验证手机号是否符合规则
//1.1 获取手机号的输入框
var telInput = document.getElementById("tel");
//1.2 绑定onblur事件 失去焦点
telInput.onblur = checkTel;
function checkTel() {
//1.3 获取用户输入的手机号
var tel = telInput.value.trim();
//1.4 判断手机号是否符合规则:长度 11,数字组成,第一位是1
//var flag = tel.length == 11;
var reg = /^[1]\d{10}$/;
var flag = reg.test(tel);
if (flag) {
//符合规则
document.getElementById("tel_err").style.display = 'none';
} else {
//不合符规则
document.getElementById("tel_err").style.display = '';
}
return flag;
}
//1. 获取表单对象
var regForm = document.getElementById("reg-form");
//2. 绑定onsubmit 事件
regForm.onsubmit = function () {
//挨个判断每一个表单项是否都符合要求,如果有一个不合符,则返回false
var flag = checkUsername() && checkPassword() && checkTel();
return flag;
}
</script>
正则表达式
1、概念:定义了字符串组成的规则
2、定义:
①直接量:注意不要加引号
var reg = /^\w{6,12}$/;
②创建RgeExp对象
var reg = new RegExp("\\w{6,12}$");
3、方法:
test(str):判断指定字符串是否符合规则,返回true或者false
4、语法:
^:表示开始
$:表示结束
[]:代表某个范围内的单个字符,比如:[0-9]单个数字字符
.:代表任意单个字符,除了换行和行结束符
\w:代表单词字符:字母、数字、下划线_、相当于[A-Za-z0-9_]
\d:代表数字字符:相当于[0-9]
量词:
+:至少一个 var reg = /^\w+$/;
*:零个或多个
?:零个或一个
{x}:x个
{m,}:至少m个
{m,n}:至少m个,最多n个