变量定义:let
常量定义:const
数据类型:
运算符:和Java的非常相似,不同的有:
-,*,/
:如果有字符串,js会尝试转换成数字再运算
==
:比较值。只要值相等,结果就是true===
:比较值和类型。只有值和类型都一样,结果才是true流程控制语句:和Java非常相似,不同的是判断条件
函数
function add(a,b){
return a+b;
}
let result = add(1, 3);
//1 把匿名函数赋值给一个变量,通过变量名调用
let add = function(a,b){
return a+b;
}
let result = add(1, 2);
//2 把匿名函数作为其它函数的实参传递进去
setInterval(function(){},1000)
事件
常用事件:
事件绑定
<input type="button" value="按钮" onclick="show(this)">
<script>
function show(obj){
//obj的实参值 就是按钮对象
alert();
}
script>
<input type="button" value="按钮" id="btn">
<script>
let button = document.querySelector("#btn");
button.onclick = function(){
//this:当前事件源-按钮标签对象
alert();
}
script>
js的引用数据类型(内置类)
js的组成:
window
:浏览器窗口对象,是其它bom对象的顶级对象location
:浏览器地址对象,可以实现网页跳转。window.location
,可以简写成locationhistory
:浏览器历史记录对象,可以实现历史记录切换。window.history
,简写成historyscreen
:浏览器的屏幕显示信息对象,可以操作浏览器窗口大小、位置、颜色等信息window.screen
navigator
:浏览器信息对象,只读的。可以获取浏览器的内核、版本、操作系统等信息 window.navigator
,简写成navigator方法 | 参数 | 返回值 | 说明 |
---|---|---|---|
alert(string) |
提示信息内容 | 无 | 普通弹窗 |
confirm(string) |
提示信息内容 | boolean | 确认弹窗 |
prompt(string) |
提示信息内容 | string/null | 输入弹窗 |
//1.普通弹窗:用于提示、警告 没有返回值
//let v = window.alert("普通弹窗");
let v = alert("普通弹窗");
alert(v);
//2.确认弹窗:用于敏感操作前的二次确认 返回值:boolean
let v = confirm("确定要删除吗?");
alert(v);
//3.输入弹窗:用于让用户输入一些数据(不常用) 点击确定,返回输入的内容;点击取消,返回null
let v = prompt("请输入姓名:");
alert(v);
方法 | 参数 | 返回值 | 说明 |
---|---|---|---|
setInterval(fn,ms) |
fn:函数对象 ms:间隔毫秒值 |
number,定时器的id | 开启执行多次的定时器 |
clearInterval(id) |
id:定时器的id | 清除定时器 | |
setTimeout(fn, ms) |
fn:函数对象 ms:延迟毫秒值 |
number,定时器的id | 开启执行一次的定时器 |
clearTimeout(id) |
id:定时器的id | 清除定时器 |
//1. 执行多次的定时器
//1.1 开启一个定时器。 setInterval函数仅仅是按了定时器的开关。浏览器自动计时,到时之后自动调用匿名函数对象
let timer = setInterval(function () {
alert();
}, 2000);
//2. 执行一次的定时器
//2.1 开启一个定时器
let timer = setTimeout(function () {
alert();
}, 2000);
//3 清理定时器
function stopTimer(){
//清理执行多次的定时器
//clearInterval(timer);
//清理执行一次的定时器
clearTimeout(timer);
}
方法 | 参数 | 返回值 | 说明 |
---|---|---|---|
parseInt(string) |
字符串 | number | 转换成整数 |
parseFloat(string) |
字符串 | number | 转换成小数 |
eval(string) |
字符串 | 把字符串作为js代码执行一次 |
let v = "3.99";
let v1 = parseInt(v);
//alert(v1);
let v2 = parseFloat(v);
//alert(v2);
v = "let i=1; let j=2; alert(i+j);";//字符串类型
eval(v);
alert("普通弹窗")
,没有返回值confirm("确定要删除吗?")
,点击确定返回true,点击取消返回false
prompt("请输入姓名:")
,点击确定返回输入的内容,点击取消返回nulllet timer = setInterval(fn, ms)
clearInterval(定时器的id)
let timer = setTimeout(fn, ms)
clearTimeout(定时器的id)
parseInt()
:转换成整数parseFloat()
:转换成小数eval()
:把字符串作为js代码执行一次方法/属性 | 说明 | 示例 |
---|---|---|
href |
获取/设置网址 | 获取网址:let url = location.href 网址跳转: location.href="http://www.baidu.com" |
reload() |
刷新当前页面 | location.reload() |
<html lang="en">
<head>
<meta charset="UTF-8">
<title>locationtitle>
head>
<body>
<input type="button" value="获取当前网址" onclick="getUrl()"><br>
<input type="button" value="跳转到百度" onclick="baidu()"><br>
<input type="button" value="刷新当前页" onclick="refresh()">
<script>
function getUrl() {
//获取当前网址
let url = location.href;
alert(url);
}
function baidu() {
//跳转到百度
location.href = "http://www.baidu.com";
}
function refresh() {
//刷新当前页
location.reload();
}
script>
body>
html>
let url = location.href;
location.href = "跳转的地址"
location.reload()
方法 | 说明 | 参数 | 示例 |
---|---|---|---|
forward() |
前进一步 | history.forward() |
|
back() |
后退一步 | history.back() |
|
go(n) |
切换n步 | n:整数。正数前进,负数后退 | history.go(-1) |
page1.html
<html lang="en">
<head>
<meta charset="UTF-8">
<title>第一页title>
head>
<body>
<h1>第一页h1>
<a href="page2.html">到第二页a>
body>
html>
page2.html
:提供 “前进一步” 和 “后退一步” 功能
<html lang="en">
<head>
<meta charset="UTF-8">
<title>第二页title>
head>
<body>
<h1>第二页h1>
<a href="page3.html">到第三页a>
<hr>
<input type="button" value="后退一步" onclick="goBack()">
<input type="button" value="前进一步" onclick="goForward()">
<script>
function goForward() {
history.forward();
}
function goBack() {
history.back();
}
script>
body>
html>
page3.html
:提供 ”后退两步“ 功能
<html lang="en">
<head>
<meta charset="UTF-8">
<title>第三页title>
head>
<body>
<h1>第三页h1>
<hr>
<input type="button" value="后退一步" onclick="goBack()">
<input type="button" value="后退两步" onclick="goBack2()">
<script>
function goBack() {
history.back();
}
function goBack2() {
history.go(-2);
}
script>
body>
html>
page1.html
,点击超链接跳转到第二页,再点击链接跳转到第三页:目的是制造一些历史记录能够使用dom操作标签
练习:点击按钮,把所有市添加到下拉框
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UrLy6JiY-1592826055088)(img/image-20200516163313214.png)]
document
对象提供了获取标签Element的方法方法 | 说明 | 参数 | 返回值 |
---|---|---|---|
querySelector(selector) |
获取一个标签 | 选择器字符串 | Element |
querySelectorAll(selector) |
获取多个标签 | 选择器字符串 | Element 类数组 |
方法 | 说明 | 参数 | 返回值 |
---|---|---|---|
getElementById("id值") |
根据id获取标签对象 | 标签的id | Element |
getElementsByName("name值") |
根据标签name获取标签对象 | 标签的name | Element类数组 |
getElementsByTagName("标签名") |
根据标签名称获取标签对象 | 标签名称 | Element类数组 |
getElementsByClassName("类名") |
根据标签class获取标签对象 | 标签的class | Element类数组 |
子元素对象.parentElement | 获取当前元素的父元素 | 无 | 父标签对象 |
document
对象提供了创建标签Element的方法
注意:创建出来的标签不会立即生效,必须要插入到dom树里
方法 | 说明 | 参数 | 返回值 |
---|---|---|---|
createElement("标签名称") |
创建标签 | 标签名称,比如:option |
Element 对象 |
标签Element
对象提供了插入标签的方法
方法 | 说明 | 参数 | 返回值 |
---|---|---|---|
父标签对象.appendChild(element) |
追加插入子标签 | 要插入的标签Element |
标签Element
对象提供了删除的方法
方法 | 说明 | 参数 | 返回值 |
---|---|---|---|
remove() |
删除标签 | ie浏览器不兼容,建议用下面这个 | |
父标签对象.removeChild(子标签对象) | 删除标签 | ||
let inner = 标签element.innerHTML
标签element.innerHTML = "新的标签体内容"
<html lang="en">
<head>
<meta charset="UTF-8">
<title>生成下拉选项title>
head>
<body>
<input type="button" value="把数组里的市添加到下拉框" onclick="addOption()">
<br>
<select name="city" id="city">
<option value="">--选择市---option>
select>
<script>
let cityArr = ["深圳市", "广州市", "东莞市"];
let citySelect = document.querySelector("#city");
function addOption() {
//先把city下拉框里的内容清空:不要全部清除掉,要保留提示选项
citySelect.innerHTML = "";
for (let city of cityArr) {
//1. 创建一个option标签
let opt = document.createElement("option");
//2. 设置标签体内容为:城市名称
opt.innerHTML = city;
//3. 把标签插入到city下拉框里
citySelect.appendChild(opt);
}
}
script>
body>
html>
document.querySelector("选择器")
:查询一个标签,返回的是Elementdocument.querySelectorAll("选择器")
:查询一批标签,返回的是Element的数组document.createElement("标签名称")
,返回值是创建出来的标签Element对象父标签对象.appendChild(子标签对象)
标签对象.remove()
标签Element
对象提供了操作属性的方式
let v = 标签element.属性名称;
标签element.属性名称 = 值;
class
是关键字,所以操作class属性的方式有点特殊:
let className = 标签element.className
标签element.className = "值";
let v = 标签element.style.样式名
标签element.style.样式名= 值
拓展了解:
以下方式也可操作属性
方法 说明 参数 返回值 getAttribute(attrName)
获取属性值 属性名称 属性值 setAttribute(attrName, attrValue)
设置属性值 属性名称,属性值 removeAttribute(attrName)
删除属性 属性名称
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>属性的操作</title>
<style>
.aColor{
color: blue;
}
</style>
</head>
<body>
<a>点我呀</a>
</body>
<script>
//1. setAttribute() 添加属性
let a = document.getElementsByTagName("a")[0];
// a.setAttribute("href","https://www.baidu.com");
a.id="sad";//建议用这个来添加属性,设置属性
// a.href="https://www.baidu.com";
//2. getAttribute() 获取属性
// let value = a.getAttribute("href");
//alert(value);
// let value = a.href;//建议用这个,直接标签对象.属性名来获取属性
// alert(value);
//3. removeAttribute() 删除属性
//a.removeAttribute("href");
//4. style属性 添加样式
//a.style.color = "red";
//5. className属性 添加指定样式
// a.className = "aColor";
a.className="aColor";
</script>
</html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>操作属性title>
head>
<body>
<form action="#" method="get">
帐号:<input type="text" id="username" name="username" class="inputItem" value="大郎"><br>
<input type="checkbox" id="policy" checked>同意我们的许可协议
form>
<hr>
<input type="button" value="获取文本框的name属性值" onclick="getName()">
<input type="button" value="设置文本框的name属性值" onclick="setName()"><br>
<input type="button" value="获取文本框的class值" onclick="getClass()">
<input type="button" value="设置文本框的class值" onclick="setClass()"><br>
<input type="button" value="获取复选框的选中状态" onclick="getChecked()">
<input type="button" value="设置复选框的选中状态" onclick="setChecked()">
<script>
let username = document.querySelector("#username");
function getName() {
let v = username.name;
alert(v);
}
function setName() {
//设置后,在浏览器F12=》Elements里,查看源码可见
username.name = "uname";
}
function getClass() {
let v = username.className;
alert(v);
}
function setClass() {
//设置后,在浏览器F12=》Elements里,查看源码可见
username.className = "item";
}
let policy = document.querySelector("#policy");
function getChecked() {
let checked = policy.checked;
alert(checked);
}
function setChecked() {
policy.checked = false;
}
script>
body>
html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>查看密码title>
head>
<body>
<input type="password" id="pwd">
<input type="button" value="查看密码" onmousedown="showPwd()" onmouseup="hidePwd()">
<script>
let pwd = document.getElementById("pwd");
function showPwd() {
pwd.type = "text";
}
function hidePwd() {
pwd.type = "password";
}
script>
body>
html>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wJTCXitn-1592826055092)(img/image-20200512085115024.png)]
<html>
<head>
<meta charset="UTF-8">
<title>title>
<style type="text/css">
table {
width: 500px;
margin: 0 auto;
border-collapse: collapse;
}
td, th {
border: 1px solid blue;
text-align: center;
}
style>
head>
<body>
<table>
<tr>
<th>学号th>
<th>姓名th>
<th>年龄th>
tr>
<tr>
<td>1td>
<td>td>
<td>td>
tr>
<tr>
<td>2td>
<td>td>
<td>td>
tr>
<tr>
<td>3td>
<td>td>
<td>td>
tr>
<tr>
<td>4td>
<td>td>
<td>td>
tr>
<tr>
<td>5td>
<td>td>
<td>td>
tr>
<tr>
<td>6td>
<td>td>
<td>td>
tr>
table>
<script>
//1.获取到所有的行tr标签对象
var rows = document.getElementsByTagName("tr");
for (var i = 1; i < rows.length; i++) {
//判断奇偶,设置不同的背景颜色
if (i % 2) {
rows[i].style.backgroundColor = "lightblue";
}else{
rows[i].style.backgroundColor = "lightgreen";
}
}
script>
body>
html>
<html>
<head>
<meta charset="UTF-8">
<title>title>
<style type="text/css">
table {
width: 500px;
margin: 0 auto;
border-collapse: collapse;
}
td, th {
border: 1px solid blue;
text-align: center;
}
style>
head>
<body>
<table>
<tr>
<th style="width:100px;">
<input type="button" value="反选" onclick="inverse()">
th>
<th>学号th>
<th>姓名th>
<th>年龄th>
tr>
<tr>
<td>
<input type="checkbox" class="item"/>
td>
<td>1td>
<td>td>
<td>td>
tr>
<tr>
<td>
<input type="checkbox" class="item"/>
td>
<td>2td>
<td>td>
<td>td>
tr>
<tr>
<td>
<input type="checkbox" class="item"/>
td>
<td>3td>
<td>td>
<td>td>
tr>
<tr>
<td>
<input type="checkbox" class="item"/>
td>
<td>4td>
<td>td>
<td>td>
tr>
<tr>
<td>
<input type="checkbox" class="item"/>
td>
<td>5td>
<td>td>
<td>td>
tr>
<tr>
<td>
<input type="checkbox" class="item"/>
td>
<td>6td>
<td>td>
<td>td>
tr>
table>
<script>
function check(){
//获取checkall的checked属性值
let v = document.querySelector("#checkall").checked;
//获取所有的item
let items = document.querySelectorAll(".item");
for (let i = 0; i < items.length; i++) {
items[i].checked = v;
}
}
/**
* 反选:
* 思路1:获取所有的item,循环遍历每一个,获取选中状态取反
* 思路2:获取所有的item,循环遍历每一个,模拟一次点击操作
*/
function inverse(){
let items = document.querySelectorAll(".item");
for (let i = 0; i < items.length; i++) {
//items[i].checked = (!items[i].checked);
items[i].click();
}
}
script>
body>
html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>省市联动title>
head>
<body>
<select name="province" id="province" onchange="changeCity()">
<option value="">--选择省--option>
<option value="0">广东省option>
<option value="1">广西省option>
<option value="2">山东省option>
<option value="3">山西省option>
select>
<select name="city" id="city">
<option value="">--选择市--option>
select>
<script>
var cities = [
["广州市","深圳市","惠州市"],
["桂林市","柳州市","南宁市"],
["济南市","烟台市","秦皇岛"],
["太原市","阳泉市","大同市"]
];
function changeCity(){
let city = document.querySelector("#city");
//把city里之前的选项清除掉,只保留提示选项
city.innerHTML = "";
//1. 获取选择的省
let pro = document.querySelector("#province").value;
//2. 省的值作为cities的索引,得到对应的市(数组)
let cityArr = cities[pro];
//3. 循环每个市
for (var i = 0; i < cityArr.length; i++) {
let cityName = cityArr[i];
//4. 创建一个option标签,把cityName放到option标签体里
let opt = document.createElement("option");
opt.innerHTML = cityName;
//5. 把option标签插入到city下拉框里
city.appendChild(opt);
}
}
script>
body>
html>
定义格式
class 类名{
constructor(变量列表){
变量赋值;
}
方法名(参数列表){
方法体;
return 返回值;
}
}
- 使用格式
let 对象名=new 类名(实际变量值);
对象名.方法名();
```js
类的定义和使用
实际上是直接创建对象使用
定义格式
let 对象名={
变量名 :变量值,
变量名 :变量值,
...
方法名 :function(参数列表){
方法体;
return 返回值;
},
...
}
使用格式
对象名.变量名
对象名.方法名();
<body>
</body>
<script>
//定义person
let person = {
name : "张三",
age : 23,
hobby : ["听课","学习"],
eat : function() {
document.write("吃饭...");
}
};
//使用person
document.write(person.name + "," + person.age + "," + person.hobby[0] + "," + person.hobby[1] + "
");
person.eat();
//练习
let athlete={
height : 180,
age :20,
sport : function(type){
console.log(type);
},
sing : function(){
console.log()
}
};
athlete.sport("many people");
</script>
</html>
继承:让类与类产生子父类的关系,子类可以使用父类有权限的成员。
继承关键字:extends
顶级父类:Object
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>继承</title>
</head>
<body>
</body>
<script>
//定义Person类
class Person{
//构造方法
constructor(name,age){
this.name = name;
this.age = age;
}
//eat方法
eat(){
document.write("吃饭...");
}
}
//定义Worker类继承Person
class Worker extends Person{
constructor(name,age,salary){
super(name,age);
this.salary = salary;
}
show(){
document.write(this.name + "," + this.age + "," + this.salary + "
");
}
}
//使用Worker
let w = new Worker("张三",23,10000);
w.show();
w.eat();
</script>
</html>
面向对象
把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。
类的定义
类的使用
let 对象名 = new 类名();
对象名.变量名
对象名.方法名()
继承
让类和类产生子父类关系,提高代码的复用性和维护性。
子类 extends 父类
Object 顶级父类
如何操作浏览器
使用window:让浏览器弹窗
alert(string)
:普通弹窗,没有返回值confirm(string)
:【重点】确认弹窗,点击确定返回true,点击取消返回falseprompt(string)
:输入弹窗,点击确定返回输入的内容,点击取消返回null使用window:开启定时器【会用】
执行多次的定时器
//返回值:number类型,是定时器的id
let timer = setInterval(function(){
//要执行的周期性任务的代码
}, 2000);
clearInterval(timer);
执行一次的定时器
//返回值:number类型,是定时器的id
let timer = setTimeout(function(){
//要执行的延迟的任务的代码
}, 2000);
clearTimeout(timer);
使用window提供的一些全局函数【了解】
parseInt(string)
:转换成整数parseFloat(string)
:转换成小数eval(string)
:把字符串作为js代码执行一次如何操作网页
let element = document.querySelector("选择器")
let elements = document.querySelectorAll("选择器")
let elmenet = document.createElement("标签名称")
父标签对象.appendChild(子标签对象)
标签对象.remove()
let html = 标签对象.innerHTML
标签对象.innerHTML = "要设置的内容"
let v = 标签对象.属性名称
标签对象.属性名称 = 值
let cls = 标签对象.className
标签对象.className = "值"
标签对象.style.样式名 = 值
东西太多了,记不住:没有人听一遍,就永远的记住了
听的似懂非懂,听的时候知道,写的时候不知道怎么办