【JavaScript】typeof和instanceof的区别
数据类型可以分为基本数据类型
和引用数据类型
基本数据类型 :String
、Number
、Boolean
、Null
、Undefined
、Symbol
、BigInt
;
引用数据类型:Object
;
typeof
一般被用于判断一个变量的类型,我们可以利用 typeof
来判断number
, string
, object
, boolean
,
function
, undefined
, symbol
这七种类型。
Object.prototype.toString.call()
我们可以利用这个方法来对一个变量的类型来进行比较准确的判断
instanceof
检测的左边必须是引用类型:数组、对象、用new()创建的对象;右边必须是函数
【JavaScript】相等(==)和全等(===)运算符的区别
null == undefined
true
'false' == false 这个会转换为0
false
【JavaScript】对调两个变量的多种方法
临时变量法
1
2
3
4
5var a = 3,
b = 5,
c = b;
b = a;
a = c;加减法
1
2
3
4
5var a = 3,
b = 5;
a = a + b;
b = a - b;
a = a - b;数组法
1
2
3
4
5var a = 3,
b = 5;
a = [a, b];
b = a[0];
a = a[1];对象法
1
2
3
4
5var a = 3,
b = 5;
a ={ a:b, b:a};
b = a.b;
a = a.a;数组运算法
1
2
3var a = 3,
b = 5;
a = [b, b = a][0];按位异或法
1
2
3
4
5var a = 3,
b = 5;
a = a ^ b;
b = b ^ a;
a = a ^ b;解构赋值法
1
2
3var a = 3,
b = 5;
[a, b] = [b ,a]
【CSS】如何让超宽文本替换为省略号
1 | width:100px; |
【JavaScript】document.write()和innerHTML的区别
1 | window.onload = function(){ |
1 | var two = document.getElementById("two"); |
【JavaScript】删除排序数组中的重复项
遍历移除法
array.splice(index,howmany)
1
2
3
4
5
6
7
8
9var nums = [1, 1, 2];
for (var i = 0; i < nums.length; i++){
if (nums[i] === nums[i+1]) {
nums.splice(i,1);
i--;
}
}
console.log(nums);
console.log(nums.length);双指针法
1
2
3
4
5
6
7
8var nums = [2, 2, 4, 4, 6];
for (var father = 0, child = 0; father < nums.length; father++){
if(nums[child] !== nums[father]){
child++;
nums[child] = nums[father];
}
}
console.log(child + 1)
【JavaScript】打乱数组内元素顺序
Fisher-Yates shuffle
1 | var students = ["学生1", "学生2", "学生3", "学生4", "调皮学生"]; |
【JavaScript】二分法寻找数组元素
1 | var arr = [3, 48, 66, 71, 99, 101, 120, 151, 188, 209] |
【HTML】元素属性href和src的区别
href:Hypertext Reference
超文本 应用或者参照—— link
和a
使用
建立通道,让当前元素或文档和引用资源进行联系,需要引用资源的时候可以通过通道进行引用。
src:source
资源 ——–img
、style
、script
、input
、iframe
使用
会把资源下载下来,代替当前元素,然后嵌入到文档中。
【CSS】如何水平居中元素
行内元素设置水平居中
1
2/*设置其父元素*/
text-align:center;块级元素设置水平居中
1
2
3/* 设置宽度(块级元素不设置宽度的话默认占满一栏,这样居中就没效果) */
width:100px;
margin:0 auto;浮动元素
1
2
3
4float:left;
position:relative;
left:50%;
transform:translateX(-50%);绝对定位
1
2
3position:absolute;
left:50%;
transform:translateX(-50%);
【JavaScript】函数作用域
【JavaScript】加法运算
第二个空对象在前面会被忽略。后面的空数组转化为数字。
【JavaScript】九九乘法表
1 | document.write("<table>"); |
1 | document.write("<table>"); |
【JavaScript】this关键字
this
指向的是谁(对象)最后调用了它
this
未明确指明对象,因此会使用默认绑定window全局对象
。
严格模式下,输出的this
值会变成undefined
1 | var name = '小红'; |
【JavaScript】闭包
【JavaScript】两数之和 Two Sum
1 | var nums = [2, 7, 11, 15]; |
【JavaScript】伪类和伪元素的区别
【CSS】垂直居中
padding 缺点:父元素不能设置固定高度
1
2
3
4div {
width: 200px;
padding: 50px 0;
}inline-height 优点:父元素可以设置固定高度
1
2
3p {
line-height: 100px;
}flex布局 缺点:兼容性
1
2
3
4
5
6
7div {
height: 200px;
width: 170px;
display: flex;
flex-direction: column;
justify-content: center;
}absolute 缺点:脱离文档流
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<style>
div {
position: relative;
width: 200px;
height: 170px;
}
i {
height: 50px;
width: 50px;
position: absolute;
top: 50%;
/* margin-top: -25px; */
transform: translateY(-50%);
}
</style>
<body>
<div>
<i></i>
</div>
</body>grid布局 缺点:兼容性
1
2
3
4
5
6ul {
display: grid;
grid-template-columns: repeat(6, 1fr);
align-items: center;
justify-content: center;
}伪元素 优点:兼容性好
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
27<style>
div.search {
display: inline-block;
vertical-align: middle;
}
div.main::after {
content: "";
display: inline-block;
background-color: gold;
height: 100%;
width: 0;
vertical-align: middle;
}
</style>
<body>
<div class="main">
<div class="search">
<form action="">
<input type="text" placeholder="技术蛋老师...">
<div class="button"><i></i></div>
</form>
</div>
</div>
</body>
【JavaScript】小数精度问题
【JavaScript】[‘1’,’2’,’3’].map(parseInt)
parseInt(*string*, *radix*) 解析一个字符串并返回指定基数的十进制整数, radix
是2-36之间的整数,表示被解析字符串的基数。
1 | ['1','2','3'].map(parseInt); // [1,NaN,NaN] |
【CSS】触发BFC
position:absolute/fixed;
float:left/right;
overflow:auto/hidden/scroll;
display:inline-block/flex;
【JavaScript】var、let、const的区别
【JavaScript】多行省略
-webkit-box 缺点:私有属性
1
2
3
4
5
6
7p {
height: 200px;
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 4;
}双重伪元素
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25p {
height: 100px;
overflow: hidden;
position: relative;
padding-right: 1em;
text-align: justify;
}
p::before {
content: "...";
position: absolute;
right: 0;
bottom: 0;
}
p::after {
content: "";
width: 1em;
height: 1em;
display: inline;
position: absolute;
right: 0;
margin-top: 0.5em;
background-color: #f0f;
}linear-gradient
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17p {
height: 210px;
overflow: hidden;
text-align: justify;
position: relative;
}
p::after {
content: "";
position: absolute;
height: 1.2em;
width: 20%;
background: linear-gradient(to right, rgba(255, 255, 255, 0), #f6acc8 80%);
right: 0;
bottom: 0;
margin-bottom: 0.2em;
}
【JavaScript】倒计时
1 |
|
1 | const daySpan = document.querySelector('.daySpan'), |
【JavaScript】display:none/visibility:hidden/opacity:0
【JavaScript】箭头函数与普通函数的区别
【CSS 】不使用border创建边框
**box-shadow**
属性用于在元素的框架上添加阴影效果。你可以在同一个元素上设置多个阴影效果,并用逗号将他们分隔开。该属性可设置的值包括阴影的X轴偏移量、Y轴偏移量、模糊半径、扩散半径和颜色。
边框
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19<style>
input {
border: none;
outline: none;
border-bottom: 1px solid #3797a4;
padding-bottom: 10px;
}
input:focus {
border: none;
padding-bottom: 0;
box-shadow: 0 0 0 5px #fcf876;
}
</style>
<body>
<form action="">
<input type="text" placeholder="你好呀">
</form>
</body>内边框
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16img {
position: relative;
z-index: -1;
}
div {
height: 500px;
width: 320px;
box-shadow: insert 0 0 0 50px rgba(123, 104, 255, 0.2);
}
<section>
<div>
<img src="./icons.png" alt="">
</div>
</section>
双边框
1
2
3
4
5
6
7
8
9
10
11
12img {
margin: 50px;
width: 500px;
box-shadow: 0 0 0 10px #32e0c4,
0 0 0 30px white,
-40px -40px #ff9595,
40px 40px #ff9595;
}
<div>
<img src="./icons.png" alt="">
</div>
箭头函数中的this的使用
1 |
|
【CSS 】 calc()应用场景
水平垂直居中
1
2
3
4
5
6img {
height: 250px;
width: 400px;
padding-top: calc(50vh-250px/2);
padding-left: calc(50vw-400px/2);
}
最小外边距
1
2
3div {
width: calc(100% - 200px);
}
渐变色
1
2
3
4
5body {
--t: 20deg;
background:
linear-gradient(calc(var(--t)*10), rgba(255, 0, 0, .8), rgba(255, 0, 0, 0)70.71%), linear-gradient(calc(var(--t)*20), rgba(0, 255, 0, .8), rgba(0, 255, 0, 0) 70.71%), linear-gradient(calc(var(--t)*30), rgba(0, 0, 255, .8), rgba(0, 0, 255, 0) 70.71%), linear-gradient(calc(var(--t)*40), rgba(0, 0, 255, .8), rgba(0, 0, 255, 0) 70.71%), linear-gradient(calc(var(--t)*50), rgba(0, 0, 255, .8), rgba(0, 0, 255, 0) 70.71%), linear-gradient(calc(var(--t)*60), rgba(0, 0, 255, .8), rgba(0, 0, 255, 0) 70.71%);
}
两栏布局
1
2
3
4
5
6
7
8
9
10
11
12.left {
background-color: #f00;
float: left;
width: 30%;
margin-right: 10px;
}
.right {
background-color: #ff0;
float: right;
width: calc(70% - 10px);
}
特定位置
1
2
3
4
5
6img {
position: absolute;
height: 150px;
margin-top: calc(100% - 830px);
margin-left: calc(100% - 830px);
}
响应式页面
1
2
3
4
5
6
7
8
9
10@media screen and (max-width: 500px) {
body {
background-color: #f0f;
}
div {
width: calc(100% / 3);
height: calc(100% / 3);
background-color: #0f0;
}
}
【JavaScript】Symbol 类型的注意事项
【JavaScript】 10个常用正则表达式
测试网站 https://regexr.com/
【JavaScript】 script标签defer和async的区别
script 标签有2个属性 async(异步) 和 defer(推迟);
他们的功能是:
async:他是异步加载,不确定何时会加载好;页面加载时,带有 async 的脚本也同时加载,加载后会立即执行,如果有一些需要操作 DOM 的脚本加载比较慢时,这样会造成 DOM 还没有加载好,脚本就进行操作,会造成错误。
defer:页面加载时,带有 defer 的脚本也同时加载,加载后会等待 页面加载好后,才执行。