1. 入门
1.1 概念:运行在客户端的脚本语言
1.2 作用
- 动态校验表单
- 网页特效
- 服务端的开发(nodejs)
- 桌面程序
- 控制硬件-物联网
1.3 组成
- ECMAScript 基础
- DOM 文档数据模型
- BOM 浏览器数据模型
1.4 书写方式
- 内嵌
<script><script>
- 外链式
<script src=""><script>
1.5 注释
//
/* */
多行可嵌套单行,单行不可嵌套多行
1.6 输入输出
- 输入
弹窗输入 var a = prompt("输入名字");
确认框 var res = confirm('你确定吗') //返回true、false
- 输出
弹框 alert("你好\n"+"小明")
控制台
console.log(a+"你好\n", b)
console.dir(document)
对象详细信息
浏览器
document.write("你好")
1.7 代码片段
VSCode > 设置 > 配置用户代码片段
"Print to console": {
"prefix": "log",
"body": [
"console.log('$1');",
"$2"
],
"description": "Log output to console"
}
2. 数据类型
2.1 基本数据类型
- number 数值(在控制台显示为蓝色)
- String 字符串(换行 \n, 缩进、制表 \t)
- boolean 布尔型
- undefined 未定义 (false, NaN)
- null 空 (false, 0)
2.2 引用数据类型
类; 数组; 日期, 正则
2.3 转换
强制转换
、String();
Number();
Boolean();
parseInt()逐个解析,遇到非数字字符结束
false:Boolean( ""
0
null
undefined
)
true: Boolean( " "
"0"
)
自动转换
任何类型 + 字符串 -> 拼接字符串
true,false,null + 数值 -> 数值
+ 两端都不是字符串,默认用Number()强转,再加法运算
2.4 其他
typeof a
console.dir(f1 instanceof Function);
//true 验证f1是不是Function的实例
console.dir(f1 instanceof Object);
//true 验证函数是不是引用数据类型
NaN not a number
NaN != NaN true,六亲不认,比较没有意义
null 和 undefined区别
null 可转为数值 0,undefined 转为NaN
Number() 与 parseInt()区别
都可转字符串为数值类型。后者能逐个解析,遇到非数字字符结束。前者只要有,直接显示NaN
==与===
==只比较值,不比较类型;===比较值与类型
3. 运算符
1)算术运算符(+
-
*
/
%
取余)
2)自增自减运算符(++在后,先返回结果,后变量+1)
3)比较运算符 (>
<
>=
<=
!=
==
)结果是boolean类型
4)逻辑运算 (与&&
或||
非!
)
短路:第一个表达式值可以确定结果时,就不再继续运算后边的表达式的值
与
表达式1 值为真,则返回表达式2 console.log( 123 && 456 ); // 456
表达式1 值为假,则返回表达式1 console.log( 0 && 456 ); // 0
或
表达式1 值为真,则返回表达式1
表达式1 值为假,则返回表达式2
5)赋值运算符
基本 (=
)
复合 (+=
-=
*=
/=
%=
)
6)三元运算符 表达式1 ? 表达式2 : 表达式3
4. 流程控制
条件
// if-else
if (a == 1){
}else { }
//if-else-if
if(money>=200){
}else if(money>=100){
}else{
}
//switch
switch (Number(m)) {
case 3:
case 4:
case 5:
alert("春季");
break;
default:
alert("不是春季")
break
}
- case穿透:执行完后没有break,代码继续往下穿透,直到遇到下一个break为止
- break; 跳到下一次循环
- continue; 跳出循环
- return;
循环
//for 使用场景:循环次数确定
var sum=0;
for(var i = 1 ; i <= 99 ; i++){
sum += i;
}
console.log(sum);
// while 使用场景:循环次数不确定、条件确定
var i=1;
while(i<=10){
循环语句
i++;
}
var q = 0 ;
while(Number(q) != 1){
q=prompt("爱我吗?1/0");
}
alert("领证走")
// do-while
var i=1;
do{
循环语句
i++;
}while(i<=10)
5. 数组
定义赋值
1)var arr = new Array(2,9,4);
//传递一个数字,生成指定长度数组(每个值为空)。传递一个字符,生成长度为一的有内容数组
arr[0] = 12;
2)var arr = new Array('张三','李四');
3)var arr=[];
var arr=[1,2,4];
其他
以数字为索引的列表 []
个数/长度 arr.length
最后一个元素 arr[arr.length - 1]
增、改 arr[2] = "";
删 delete arr[2];
二维数组 var arr = [[30, 60], [40, 80]];
arr[2][0]
6. 函数
概念:是封装的一段有参数,有特定功能的代码块,可多次调用
命名函数
function plus(x, y){
return x+y;
}
var res=plus(1, 2);
匿名函数
var plus = f(x, y){
return x+y;
}
var res = f(1, 2);
参数 arguments
function f() {
console.log("函数参数:",arguments);
}
返回值 return 结束函数,可以放在 if 中
函数名代表整个函数 console.log( f );
方法:函数和对象写在一起后,称作“方法”
7. 类和对象
7.1 关系
- 类(抽象)是对象的集合 -> 教师(类)
- 类【实例化】为对象(具体) -> 张三(对象)
- 类: 对现实生活中具有相同属性和行为的事物的一个统称(抽象的,相当于模板)
- 对象 /实例: 是类 “实例化” 得到的内存中的一个实体
7.2 构造函数
- 构造函数名大写开头,大驼峰
- new来调用
方法1
// 定义类
function Person(name, age) {
this.name = name
this.age = age
this.eat = function () {
console.log('吃饭')
}
}
//创建对象
var p = new Person('张三', 20)
//调用属性和方法
p.eat()
方法2
class Runoob {
constructor(name, year) {
this.name = name
this.year = year
}
age() {
let date = new Date()
return date.getFullYear() - this.year
}
}
var a = new Runoob('李四', 19)
7.3 对象
概念:对象是名值对的集合,或字符串到值映射的集合,由花括号 {} 括起来
取值、添加属性: book.topic=""
book["fat"]=""
对象的创建
构造函数创建
function Person(name, age){
this.name = name;
this.age = age;
this.study = function () {
console.log("在学习");
}
}
var p = new Person("张三", 20);
字面量方式创建
var p = {
name: "张三",
age: 20,
study: function () { }
}
用new Object() 创建
var student = new Object();
student.name = "张三";
8. 常见对象
8.1 Math
- PI
Math.PI
- 最值
Math.max(1, 3, 6, 4, 2)
Math.min(1, 3, 6, 4, 2)
- 绝对值
Math.abs(-10)
- 向上取整
Math.ceil(1.2)
- 向下取整
Math.floor(1.8)
- 四舍五入
Math.round(1.34)
- [0,1) 随机数
Math.random()
- [min,max]随机数 :
Math.floor(Math.random() * (max - min + 1) ) + min
8.2 Date
1)创建对象 var date = new Date();
- 年
date.getFullYear()
- 月
date.getMonth() + 1
- 日
date.getDate()
- 周
date.getDay()
值为0-6,周日起 - 时
date.getHours()
- 分
date.getMinutes()
- 秒
date.getSeconds()
- 毫秒
date().getTime()
- 返回 1970.1.1 至当下时间的毫秒数
- var now =
+new Date()
; - var now =
new Date().getTime()
; valueOf()
与getTime()
返回值相等
- var now =
2)静态方法 Date.now()
等效于 +new Date()
3)取此时详细时间 new Date()
,Date()
4)使用
function getDate() { //获取今日时间
let date = new Date();
//获取年月日周
let year = date.getFullYear();
let month = date.getMonth();
let day = date.getDate();
let week = date.getDay();
//用数组保存星期
arr = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
//模板字符串
return `今天是${year}年${month}月${day}日${arr[week]}`;
}
8.3 数组Array
1)创建
new Array(长度)
new Array(元素1, 元素2...)
2)方法
- 头增,返回新长度
arr.unshift("Lemon","Pineapple");
- 头删,返回删除值
arr.shift()
- 尾增,返回新长度
push()
- 尾删,返回删除值
pop()
- 自由增删,返回删除的元素数组
arr.splice(1,0,100,200)
在索引1处删除0个元素,并插入100,200
- 排序
- 升序
sort()
- 降序
arr.sort( function(a,b){ return b-a } )
- 升序
- 反转
reverse()
- 索引
arr.indexOf(7)
没有找到,返回 -1arr.lastIndexOf(7)
- filter过滤
arr.filter(a => (a> 5))
arr.filter(function(a){return a>5});
- 截取片段
arr.slice(1,3);
8.4 String 字符串
- 索引
str.indexOf('a')
str.indexOf('a', 5)
从索引5开始查str.lastIndexOf('变')
- 查指定位置字符
str.charAt(3)
- 拼接
var str = str1.concat(',',str2)
不改变原字符串 - 截取
str1.substr(3, 4)
从索引3开始,截取4位str.substring(3, 7)
截取索引 [3,7) 的字符
- 替换
str.replace('情','*')
- 切割
str.split(",")
得到数组
9. Json
9.1 json概念
JSON: JavaScript Object Notation(JavaScript 对象表示法)
本质是一个字符串,是一种轻量级的数据传输格式
JSON 是存储和交换文本信息的语法,类似 XML
JSON 比 XML 更小、更快,更易解析
JSON 易于人阅读和编写。
9.2 json和xml
json
{"username":"张三","password":"123"}
xml
<user>
<username>张三</username>
<password>123</password>
</user>
9.3 json和js对象的区别
作用上
json字符串: 本质是一个格式化的字符串,可跨平台传输,一般用在网络传输上
js对象:本质是一个对象(类的实例),不能在网络上传输
语法上
json字符串:属性名必须加双引号
js对象:属性名可以不加引号
9.4 json和js对象的转换
json字符串-->js对象 JSON.parse()
var jsonStr = '{"name":"张三","age":23}'
console.log(JSON.parse(jsonStr));
js对象-->json字符串 JSON.stringify
var jsObj = { name:'张三', age:23 }
//js对象-->json字符串 JSON.stringify
console.log(JSON.stringify(jsObj));
10. DOM 文档对象模型
10.1 概念
网页加载时,浏览器创建页面的文档对象模型(树形结构):document文档 > 根标签(HTML)> > >
DOM作用
- 访问HTML文档元素
- 改变HTML元素、属性
- 改变CSS样式
- 对事件做反应
操作思想
将页面的所有组成部分(标签、属性、标签体、注释)抽取为对象,用对象操作方式操作
(对象有属性和方法,比单纯操作字符串方便)
Document 对象
- js的一个内置对象,直接写就能用
- 浏览器载入 HTML 文档, 就会成为 Document 对象
- 是 HTML 文档的根节点,包含整个页面的元素,使我们可以从脚本中对 HTML 页面中所有元素进行访问
10.2 document
结构
元素(属性节点 + 文本节点)
获取元素对象
document.getElementById("id")
document.getElementsByTagName("img")
返回带有指定标签名的对象集合。
document.getElementsByClassName("p1")
返回文档中所有指定类名的元素集合
H5新增
document.querySelector("#id")
document.querySelectorAll("#id")
返回文档中匹配的CSS选择器的所有元素节点列
操作属性
var img = document.querySelector('img');
img.src = './img/on.gif' //元素对象.属性名 = 属性值
操作标签体
innerHTML(有样式)document.querySelector('#d2').innerHTML
innerText(操作纯文本)document.querySelector('#d2').innerText
操作样式
一次设置一种样式 (元素对象.style.属性名称 = 属性值)
var div = document.querySelector('div'); div.style.width = '200px';
批量设置样式(元素对象.className = class属性值)
var div = document.querySelector('div'); div.className = 'div c2';
10.3 节点操作
创建元素节点 document.createElement("hr")
创建属性节点
创建文本节点
添加节点
element.insertBefore()
ul.insertBefore(addNode, ul.firstChild);
element.appendChild()
var hr = document.createElement("hr");
var body = document.quertySlector("body"); body.appendChild(hr);
删除节点
body.removeChild(del);
10.4 元素方法
自动获取焦点 input.focus();
相当于事件名去掉 on
10.5 事件
三要素
事件源(按钮)
事件(点击)
事件处理程序(弹出消息)
三步骤
事件源(按钮)
监听器(函数) function myClick(){ }
用属性绑定监听器与事件源
var btn = document.querySelector("button");
btn.onclick = myClick;
//函数名代表整个函数,加()代表执行函数
var btn = document.querySelector("button");
btn.onclick = function () { }
<button οnclick="myClick()"></button>
鼠标事件
onclick
onmouseover 鼠标经过
onmouseout 鼠标移出
onmousedown 鼠标按下
onmouseup 鼠标松开
键盘事件
onkeyup 松开
onkeydown 按下 不区分大小写
onkeypress 按下 不能识别ctrl, shift等功能键, 区分大小写
表单事件
onchange 表单元素的内容改变( <input>, <keygen>, <select>, 和 <textarea>)
oninput 元素获取用户输入
onsearch 用户向搜索域输入文本时触发
onselect 用户选取文本时触发 ( <input> 和 <textarea>)
onblur 失去焦点
onfocus 获得焦点
事件注册
btn.addEventListener('click', function(e) { })
event: 事件名,去掉on
可以为同一个事件添加多个方法
事件对象
domObj.addEventListener('click', function(e) { console.dir(e) })
e.target
触发事件的对象 e.target.innerHtml
e.target === this(非箭头函数)
e.type
事件类型
e.keyCode
哪个键
onkeydown 不区分大小写
onkeypress 区分大小写
e.preventDafult()
阻止默认行为
document.querySelector('a').onclick = function(e){
e.preventDefault() //阻止a标签的默认跳转
}
e.stopPropagation()
阻止冒泡 阻止事件从子到父的传递
11. BOM
11.1 概念
浏览器对象模型(Browser Object Model)
11.2 作用
使用 JavaScript 操作浏览器
如:弹框,新建一个窗口,跳转到其他窗口,实现定时操作
11.3 操作思想
将浏览器的各个组成部分抽成对象,以面向对象的方式来操作(对象有属性和方法),提高开发效率
11.4 组成
window对象
概念
窗口对象 浏览器窗口
包含页面中的很多东西(变量,函数,弹框,document等)
包含document,location,history,navigator等对象
window.onload = function(){ }
//页面加载完后就调用匿名函数
定时器
定时一次
setTimeout(function () { }, 1000)
//单位:毫秒,1000 = 1s
setTimeout(f1, 1000)
setTimeout('f1()', 2000)
清除 clearTimeout()
var timer = setTimeout(f1, 1000);
clearTimeout(timer);
循环定时
setInterval(function( ){ }, 1000)
清除 clearInterval()
var timer = setInterval(function () { }, 1000);
clearInterval(timer)
弹框相关
alert()
prompt() 输入值 并取回
confirm() 显示带有一段消息以及确认按钮和取消按钮的对话框,返回布尔值
location对象
概念: 地址栏对象,获得当前页面URL,并把浏览器重定向到新的页面。可以刷新和跳转
属性: url地址 location.href = 'http://wwww.baidu.com';
方法: 刷新 location.reload();
history
历史记录对象 包含浏览器历史
方法
返回上页:
history.back()
history.go(-1)
//加载历史列表中某页
screen
屏幕对象 包含有关用户屏幕的信息
navigator
浏览器对象 包含有关访问者浏览器的信息