JavaScript基础语法-dom-bom-js-es6新语法-jQuery-数据可视化
该课程笔记基于b站pink老师的课程视频,视频链接:https://www.bilibili.com/video/BV1Sy4y1C7ha/?spm_id_from=333.337.search-card.all.click&vd_source=47b8ae38c6099b5bc1a761ca77b05155
JS基础语法
注释
- 单行注释 快捷键
ctrl + /
- 多行注释快捷键
shift + alt + a
- vscode中修改多行注释的快捷键
ctrl + shift + /
输入输出语句
输出:
- 浏览器弹出警示框:
alert(msg)
- 浏览器控制台打印输出信息:
console.log(msg)
- 浏览器弹出输入框,用户可以输入:
prompt(msg)
变量
变量声明与使用
1 | //age 为一个变量 |
变量的命名规范
- 严格区分大小写
- 不能以数字开头
- 由字母,下划线,数字,美元符号组成。
- 不能使用关键字和保留字
var for是错误写法
- 变量名必须有意义
- 遵循驼峰命名法:首字母小写,后面单词的首字母大写,例
myFirstName
- 不用使用
name
作为变量名
数据类型
JS是弱类型语言,变量数据类型是只有程序在运行过程中,根据等号右边的值确定的。
JS是动态语言,变量的数据类型是可以变化的。
1 | var a = 10; |
简单数据类型
数字型:
Number
,包括整数和小数- 数字前面加
0
表示八进制 010 = 8(10进制) - 数字面前加
0x
表示十六进制 0xa = 10(10进制) - 数字的最大值:
Number.MAX_VALUE;//1.79e+308
- 数字的最小值:
Number.MIN_VALUE;//5E-324
- 无穷大:
Infinity
- 无穷小:
-Infinity
- 非数值:
NaN
isNaN()
这个方法用来判断一个变量是否是非数字,如果是数字返回的是false
,反之返回true
- 数字前面加
字符串型:加单(双)引号的内容,JS中推荐单引号。外双内单,外单内双
- 字符串转义符:都是用
\
开头,写在字符串内部- 换行符
\n
- 斜杆
\\
- 单引号
\'
- 双引号
\"
- tab缩进
\t
- 空格
\b
- 换行符
- 获取字符串的长度:
str.length
- 字符串拼接:
字符串+任意类型 = 拼接之后的字符串
- 字符串转义符:都是用
布尔型:
true
&false
未定义数据类型:
undefined
未定义+数字 = NaN
空值:
null
空值 + 数字= 数字
获取数据类型
typeof age
: 检测数据类型
数据类型转换
转换为字符串
num.toString()
String(num)
num+’’()空字符
转换为数字型
parseInt(str)
只能取整数部分parseFloat(str)
可以读取到小数部分Number(str)
强制转换- 隐式转换:
'12'-0 ----> 12
,'123'-'120' = 3
,'123'*1--->123
转换为布尔型:
Boolean(var)
运算符
算数运算符
+,-,*,/,%
浮点数不能直接进行运算,会有精度问题
比较运算符
逻辑运算符
逻辑中断逻辑与
表达式1 && 表达式2
:表达式1为真返回表达式2,表达式1为假返回表达式1
逻辑中断逻辑或
表达式1 && 表达式2
:表达式1为真返回表达式1,表达式1为假返回表达式2
赋值运算符
运算符优先级
流程控制
顺序流程控制
分支流程控制
分支流程控制
if-else语句
switch语句
三元表达式:条件表达式 ? 表达式1 :表达式2
条件表达式成立返回表达式1,反之返回2
循环结构
for
while
do-while
continue关键字:立刻跳出当前循环,进入下一次循环
break关键字:退出整个循环
数组
创建数组
1 | 1. |
遍历数组
1 | var arr = [1,2,3,4,5,6]; |
新增数组元素
1 | 1.新增数组元素,改变数组长度 |
冒泡排序
1 | let arr = [23, 43, 52, 3, 5, 45]; |
函数
声明函数
1 | 1、 |
js函数申明中的形参可以不用申明变量类型
调用函数
1 | sayHI(); |
arguments
:函数中的伪参数,伪数组,拥有length属性,拥有索引号,不具有数组中的某些方法
1 | function fn(){ |
作用域
全局作用域:整个script标签,或者一个单独的js文件
局部作用域:函数作用域(函数内部),局部作用域内:局部覆盖全局
作用域链:就近原则
1 | var num = 10; |
JS的预解析
js引擎先预解析,在代码执行:
(1)预解析:js引擎会把js里面所有var 还有function提升到当前作用域的最前面
(2)代码执行:按照代码书写顺序从上往下执行
2.预解析 包括:
- 变量预解析:把所有变量的声明提升到当前作用域的最前面,但是不提升赋值
- 函数预解析:
对象
对象是一个具体的事物
对象的构成:
- 属性:特征
- 方法:行为
创建对象
利用字面量创建对象
1 | var obj = {};//创建了一个空的对象 |
利用new Object创建对象
1 | //利用new Object创建对象 |
利用构造函数创建对象
1 | function 构造函数名(){ |
构造函数,是抽象了对象的公共部分,封装到了函数里面
通过
new
关键字创建对象的过程称为对象实例化
new关键字执行过程
- new构造函数在内存中创建一个空的对象
- this就会指向刚才创建的空对象
- 执行构造函数里面的代码,给这个空对象添加属性和方法
- 返回这个对象
遍历对象
1 | let obj = { |
JS的内置对象
JS中的对象类型:
- 自定义对象
- 内置对象
- 浏览器对象
Math对象
常用方法
1 | Math.PI //圆周率 |
日期对象
Date()日期对象是一个构造函数
1 | //创建一个对象 |
倒计时:将来的时间戳-现在时间戳
1 | function repairZero(a){ |
数组对象
创建数组
1 | 1.字面量 |
检测是否为数组
1 | 1.instanceof 运算符 |
添加删除数组的方法
1 | //1.push()在数组末尾添加一个或多个元素 |
翻转数组:arr.reverse()
冒泡排序:arr.sort()
1 | arr.sort(function(a,b){ |
数组索引方法
1 | let arr = ['red','blue','pink','blue']; |
数组转换为字符串
1 | 1.toString()将我们的数组转换为字符串 |
concat()
:连接两个或多个数组,返回值为一个新的数组slice()
:数组截取slice(begin,end)
,返回被截取的新数组splice()
:数组删除splice(第几个开始,要删除几个数)
,返回被删除的新数组,且会影响到原数组
基本包装类型:字符串
把简单数据类型包装为了复杂数据类型
- String
- Number
- Boolean
Web APIs:DOM+BOM
API
应用程序编程接口,是一些预定义函数
Web API是浏览器提供的浏览器功能和页面元素的AIP
DOM
处理HTML和XML的接口
- 文档:一个页面
- 元素:所有标签
- 节点:所有内容(标签、属性、文本、注释)
获取元素
通过ID获取:getElementById()
1
2
3
4
5
6
7
8<div id="time">2019-9-9</div>
<script>
//1.getElementById()通过获取元素id获得元素对象
let timer = document.getElementById('time');
console.log(timer);
console.log(typeof timer);//返回的是对象
console.dir(timer);//dir查看对象的属性和方法
</script>通过标签获取:getElementsByTagName()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24<ul>
<li>你是大好人</li>
<li>你是大好人</li>
<li>你是大好人</li>
<li>你是大好人</li>
<li>你是大好人</li>
</ul>
<script>
//返回的是 获取过来的元素对象的集合 以伪数组的形式存储
let lis = document.getElementsByTagName('li');
console.log(lis);
console.log(lis[0]);
//用for遍历
for(let i = 0; i < lis.length; i++) {
console.log(lis[0]);//得到的元素是动态的
}
//如果页面中只有一个li,返回的还是伪数组的形式
//如果界面中没有元素,会返回一个空的伪数组
</script>
获取ul标签下的li标签
element.getElementsByTagName(),获取的时候不包括父元素自己
//获取文档中的所有ul,注意:伪数组不能作为父元素,一定要指明是哪一个
let ul = document.getElementByTagName('ul');
let li = ul[0].getElementByTagName('li');通过类名获取元素:document.getElementsByClassName(‘类名’)
通过**querySelector()**获取元素,返回的是第一个元素对象
1
2
3
4
5
6
7
8
9//通过类名获取元素,返回一个伪数组
let boxes = document.getElementsByClassName('box');
//querySelctor返回指定选择器的第一个元素对象
//通过类名.类名
let firstbox = document.querySelector('.box');
//通过id #id名
let nav = document.querySelector('#nav');
//通过标签名
let li = document.querySelector('li');获取body元素:
document.body
获取html元素:
document.documentElement
事件基础
事件:监控行为——————触发响应
事件三要素:事件源、事件类型、事件处理程序
1 | <button id = "btn">唐伯虎</button> |
执行步骤三要素:
- 获取事件源
- 注册事件(绑定事件)
- 添加事件处理程序(采用函数赋值形式)
常见的鼠标事件
操作元素
利用DOM操作元素来改变元素里面的内容、属性
改变元素内容
element.innerText
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22<script>
//当我们点击了按钮,div里面的文字会发生变化
let btn = document.querySelector('button');
let div = document.querySelector('div');
btn.onclick = function () {
div.innerText = getDate();
}
function getDate() {
let date = new Date();//获得一个时间对象,里面不写内容就是当前时间,动态的
let year = date.getFullYear();
let month = date.getMonth() + 1;
let dates = date.getDate();
let arr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
let day = date.getDay();//获得星期几
return '今天是:' + year + '年' + month + '月' + dates + '日' + arr[day];
}
//我们元素可以不用添加时间
let p = document.querySelector('p');
p.innerText = getDate();
</script>elemen.innerHTML
1
2
3
4
5
6
7
8
9
10
11
12<script>
//innerText和innerHTML的区别
//1.innerText 不识别html标签 非标准 去除空格和换行
let div = document.querySelector('div');
div.innerText = '<strong>今天是:2022<strong>'
//1.innerText 识别html标签 W3C标准
div.innerHTML = '<strong>今天是:2022<strong>'
//这两个属性是可读写的 可以获取元素里面的内容 保留空格和换行
p = document.querySelector('p');
console.log(p.innerText);
console.log(p.innerHTML);
</script>
常见元素的属性操作
1 | <script> |
表单元素的操作属性
常见表单属性:
- type
- value
- checked
- selected
- disabled
1 | <script> |
样式属性操作
element.style
:行内样式操作1
2
3
4test.onclick = function(){
this.style.color = '#fff';
this.style.fontSize = '25px';
}element.className
:类名样式操作1
2
3
4
5
6
7
8
9
10
11
12
13
14
15<div >
文本
</div>
<script>
const test = document.querySelector('div');
test.onclick = function (){
//点击后让div获取类名
//让当前元素的类名改为change'
this.className = 'change';
//可以通过修改元素的classname更改元素的样式,适合于样式较多或者功能较复杂的情况
//如果想要保留原先的类名,使用多类名选择器
this.className = 'first change';
}
</script>
总结
排他算法
先排除其他人,在设置自己的样式
1 | <script> |