这是我参与11月更文挑战的第8天,活动详情查看:2021最后一次更文挑战
js数据类型,区别
- 基本数据类型
NumberStringnullundefinedBooleansymbolbigint
- 引用数据类型
object: 普通对象、数组对象、正则对象、日期对象、Math数学函数对象function
- 两种数据存储方式
- 基本数据:栈,占据空间小、大小固定,属于被频繁使用的数据
- 引用数据:堆,占据空间大,大小不固定,引用数据类型在栈中存储了指针,该指针会指向堆中该实体的起始地址。
- 两种数据类型的区别
- 堆比栈空间大,栈比堆运行速度快
- 堆内存是无序存储,可以根据引用直接获取
- 基本数据类型比较稳定,而且相对来说占用的内存小
- 引用数据类型大小是动态的,而且是无限的
null和undefined的区别
undefined表示一个变量自然的、最原始的状态值,而null则表示一个变量被人为的设置为空对象,而不是原始状态。所以,在实际使用过程中,为了保证变量所代表的语义,不要对一个变量显式的赋值undefined,当需要释放一个对象时,直接赋值为null即可。
map和forEach的区别
- 相同点
- 都是循环遍历数组中的每一项
- 每次执行匿名函数都支持三个参数:
item(当前每一项)、index(索引值)、arr(原数组) - 匿名函数中的
this都是指向window - 只能遍历数组
- 不同点
map()会分配内存空间存储新数组并返回,foreach()不会返回数据foreach()允许callback更改原始数组的元素,map()返回新的数组
var arr = [1,6,89,34]
let a = arr.forEach((ele, index) => {
arr[index] = ele * 2
});
console.log(a) // 输出:undefined
let arr2 = arr.map((ele) => {
return ele * 2
})
console.log(arr2, arr2 === arr) // 输出:[4,24,356,136] false
for..of可以遍历哪些对象?
- 遍历所有数据结构的统一方式
- ES6新增的遍历方法,但只限于迭代器(iterator),所以普通对象用for..of遍历是会报错的。
- 可迭代对象
ArrayMapSetStringTypedArrayarguments
- 举例
// 数组Array
for (const item of arr2) {
console.log(item) // 输出:4 24 356 136
}
// map对象
const m = new Map()
m.set("one",1)
m.set("two",2)
for (const item of m) {
console.log(item)
}
// 输出:['one',1]
// ['two',2]
// 使用数组的解构,获得key,value
for (const [key,value] of m) {
console.log(key,value)
}
// 输出:one,1
// two,2
- 与
foreach不同点:可以打断循环遍历 for..in适合:遍历键值对对象- ❌
for..of遍历普通对象会出错
const obj = {
name: 'zs',
age: 18
}
for (const item of obj) {
console.log(item)
}
// 输出:Uncaught TypeError: obj is not iterable