0%

jQuery 是一个轻量级的 JavaScript 函数库。
它的基本设计思想和主要用法,就是”选择某个网页元素,然后对其进行某种操作“。

阅读全文 »

封装 DOM 操作,对象风格

一、增加 和 删除

创建节点

1
2
3
4
5
6
create(string) {
const container = document.createElement("template")
//template可以包含任意节点
container.innerHTML = string.trim()
return container.content.firstChild
},
阅读全文 »

1、选择排序

第一次从数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/*
选择排序
*/
function selectionSort(arr) {
let len = arr.length;
let minIndex, temp;
for (let i = 0; i < len - 1; i++) {
minIndex = i;
for (let j = i + 1; j < len; j++) {
if (arr[j] < arr[minIndex]) { // 寻找最小的数
minIndex = j; // 将最小数的索引保存
}
}
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
return arr;
}

2、快速排序

  • 在数据中找一项作为基准
  • 比基准数大的放右边,小的放左边 (基准的位置是正确的)
  • 把左右两边再分别这样划分排序,直到左右两边只有一项
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/*
快速排序
*/
let quickSort = (array) => {
if (array.length <= 1) {
return array
}
let pivotIndex = Math.floor(array.length / 2)
let pivot = array.splice(pivotIndex, 1)[0]
let left = []
let right = []
for (let i = 0; i < array.length; i++) {
if (array[i] < pivot) {
left.push(array[i])
} else {
right.push(array[i])
}
}
return quickSort(left).concat([pivot], quickSort(right))
}

3、归并排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*
归并排序
*/
let mergeSort = (array) => {
if (array.length === 1) {
return array
}
let left = array.slice(0, Math.floor(array.length / 2))
let right = array.slice(Math.floor(array.length / 2))
return merge(mergeSort(left), mergeSort(right))
}
let merge = (a, b) => {
if (a.length === 0) {
return b
}
if (b.length === 0) {
return a
}
return a[0] > b[0]
? [b[0]].concat(merge(a, b.slice(1)))
: [a[0]].concat(merge(a.slice(1), b))
}

4、计数排序

  • 使用哈希表将数据对应起来,重复次数作为哈希表对应 key 的 value
  • 遍历哈希表,对于哈希表的每个 key,遍历对应的 value 次
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/*
计数排序
*/
let countSort = (array) => {
let hashTable = {},
max = 0,
result = []
for (let i = 0; i < array.length; i++) {
if (!(array[i] in hashTable)) {
hashTable[array[i]] = 1
} else {
hashTable[array[i]] += 1
}
if (array[i] > max) {
max = array[i]
}
}
for (let i = 0; i <= max; i++) {
if (i in hashTable) {
for (let j = 0; j < hashTable[i]; j++) {
result.push(i)
}
}
}
return result
}

1、数组对象:

  • 元素的数据类型可以不同
  • 内存不一定是连续的(对象随机存储)
  • 不能通过数字下标,而是字符串下标
    let arr= [1,2,3] arr['xxx']=1
阅读全文 »

一、常见用法

变量做属性名

除了字符串之外,变量也可以做属性名

1
2
3
let p1 = 'name'
let obj = { p1 : 'ss'} 这样写,属性名为 'p1'
let obj = { [p1] : 'ss' } 这样写,属性名为 'name'
阅读全文 »

URL(统一资源定位符 Uniform Resource Locator)

包括:**协议+域名或 IP+端口号+路径+查询字符串+锚点 **

阅读全文 »

一、浏览器渲染原理及过程:

浏览器通过解析生成 DOM、CSSDOM,合成 render tree,然后布局(Layout)、绘制(Paint)、合成(Compose)页面。

阅读全文 »

布局是屏幕平面上的,定位是垂直于屏幕的

1、盒模型:

  • 背景的范围:border外边沿围城的区域(包括 border)
  • 从左边看 div:background 在文字后面
阅读全文 »