面试 | JS 面试题 整理(更ing)2/34
JS 的数据类型 及 区别
分为两种类型:基本类型、引用类型
区别:存储位置不同
基本类型(6种):String、Number、Boolean、Null、Undefined、Symbol、 BigInt
BigInt : 表示任意大小的整数,可以安全地存储和操作大整数。
- Number 有一个特殊类型 NaN 不是数值。
- Boolean 布尔值,所有类型都可以转为布尔值。
- Null 类型只有一个值—— 特殊值 null,表示空对象指针,typeof null 返回 "object"。(可用于 变量保存对象,当时没有那个对象可保存,就用 null 来填充该变量。)
- Symbol,符号,符号实例是唯一、不可变的。确保对象实例使用唯一标识符,不会发生属性冲突的风险。
Boolean,可以 将其他类型 转化为布尔值
- Undefined 类型中,NaN 转为true,undefined 转为false
- Number,非零数值为true,0 和 NaN为 false
- String中,有值都是 true,"" 空字符串为 false
声明变量 但未初始化,则相当于给变量赋值 undefined
未定义变量 和 声明了未初始化的值 是有区别的。前者使用会报错,后者会返回undefined。
undefined 是由 null 派生而来的。——》 console.log(null == undefined); // true
引用类型:Object、Function、Array。——》函数和数组
Object 对象
Array 数组,js中 数组中的每个槽位可以存储任意类型的数据。且动态大小,可随数据添加而自动增长。
Function 函数,实际上也是对象,常见的三种表达方式是 函数声明function xx(){} 、函数表达式 let xx = function(){}、箭头函数 let xxx = ()=>{}
其他引用类型:Date日期、RegExp 正则、Map 映射、Set 集合
存储区别:基本类型在 栈中,引用类型在 堆中。
将基本类型的值 a 赋值给基本类型的 b,两个变量的值相等,但是两个变量保存在不同的内存地址中
引用类型赋值过程中,实际是将堆内存对象在栈内存的引用地址复制一份,指向同一个堆内存地址。修改其中一个,会对另一个进行影响。
不同的内存地址分配:
简单类型在 栈中,栈存放的是值
引用类型对应的值存放在堆中,栈中存放内存地址
不同类型数据导致赋值变量时的不同:
简单类型赋值,会生成相同的值,两个内存地址
复杂类型赋值,是将保存对象的内存地址赋值给另一个变量,两个变量指向堆内存中的一个对象(保存在同一个地址)
数组的常用方法:4增4删1改 3查 + 2排序 + 1转换 + 5迭代
4增4删1改 3+查
增 前三会改原数组,后一不变:push、unshift、splice、 concat
删 前三会改,后一不会改变原数组:pop、shift、splice、slice
改 splice
查:find、indexOf、includes
unshift 在前面添加值
concat 会创建当前数组的副本,然后 将参数添加到 在副本的后面,返回新构建的数组,不影响原始数组。
splice(开始索引,删几个,添加的元素),返回删除的元素,会对原数组产生影响。
shift 删除数组的第一项
find 返回 第一个匹配的元素 ——》 find( (item,index,array) => item过滤值的某种条件)
indexOf 根据值 查索引,没有搜到返回 -1 ——》要查找的元素 在数组中的位置
includes 包含某值,有则 返回 true ——》 返回要查找的元素在数组中的位置,有则 返回 true,否则 false
2排序:① reverse 反转,② sort 会接收一个比较函数
sort(a>b) 即表示 从小到大, sort(a>b?1:-1) 即 a>b 时 进行换位置,a>b 不成立时 保持不变。——》接收一个比较函数,用于判断哪个值应该排在前面
1转换: join('字符串分隔符')
5迭代(不改原数组):some、every、forEach、filter、map
some 有一成立,则返回 true ——》一真即真——( some( (item,index,array) => 条件) )
every 遍历每项,都成立才返回 true ——》一假即假
forEach 遍历每一项执行... 没有返回值
filter,返回成立的那一项。【some 返回 true,函数返回 true 的项 会组成数组之后 返回】
map,对每一项执行什么【类似于 forEach,但有返回值,返回由函数调用的结果构成的数组】
JS 字符串的常用方法
正则 . 表示匹配任意字符