琐碎知识点
-
=== 运算符:
- 如果类型不同,就一定不相等
- 如果两个都是数值,并且是同一个值,那么相等;如果其中至少一个是NaN,那么不相等。(判断一个值是否是NaN,只能使用isNaN()来判断)
- 如果两个都是字符串,每个位置的字符都一样,那么相等,否则不相等(两个元素相同的字符串数组是不相等的)
- 如果两个值都是true,或是false,那么相等
- 如果两个值都引用同一个对象或是函数,那么相等
- 如果两个值都是null,或是undefined,那么相等
-
js中的字符串:
- 在js中字符串不是对象,它是不可被修改的,就像在使用toUpperCase方法之后不会改变原来的字符串的值,而是新创建一个字符串。
- 为什么字符串不是对象但是有属性?因为在引用字符串属性的时候,js就会通过new String(s)将其转换成对象,这个对象继承字符串的方法
-
for循环里 声明的变量类型
- for(let i in str) typeof i => String
- for(let i = 0; i < str.length; i++) typeof i => Number
-
箭头函数
const obj = { func() { setTimeout(function () { setTimeout(function (){ console.log(this); // window }) setTimeout(() => { console.log(this); //window }) }) setTimeout(() => { setTimeout(function (){ console.log(this); // window }) setTimeout(() => { console.log(this); //obj对象 }) }) } }
- 箭头函数的this是向外层作用域中,一层层查找this,直到有this的定义
-
什么是promise?
-
promise是异步编程的一种解决方案,可以解决网络请求的回调地狱
-
三种状态:pending 等待状态,fulfill 满足状态,当我们主动回调了resolve时就处于该状态,并且回调then(
reject 拒绝状态,当我们主动回调了reject时就处于该状态,并且回调catch()
-
// 处理形式一:then + catch
// 对异步操作进行封装
// 参数 -> 函数(resolve, reject)
// resolve, reject本身又是函数
new Promise((resolve, reject) => {
setTimeout(() => {
// resolve('data')
reject('err')
},1000)
}).then(data => {
console.log(data)
}).catch(err => {
console.log(err)
})
// 处理形式二:then传入两个函数
new Promise((resolve, reject) => {
setTimeout(() => {
// resolve('data')
reject('err')
},1000)
}).then(data => {
console.log(data)
}, err => {
console.log(err)
})`