开始准备投简历 重新复习一下基础内容
一、基本数据类型
1.基本类型
JS中基本数据类型为:Undefined、Null、Boolean、Number和String
复杂数据类型为:Object
用typeof可以判断
但数据类型又分引用类型和值类型
值类型:Undefined Boolean、Number和String
引用类型有:Object null(表示空指针) function
2.String
常用API
注意:replace() 方法只有String能用
3.Boolean
Boolean存在隐式转换
== : 比较时进行隐式类型转换
===: 比较时就不进行类型转换
显示转换通过:!! 和 Boolean( )来实现
4.Number
NaN不能用 == 比较 需要通过:Number.isNaN(res) 或者 Object.is(res,NaN) 进行比较
类型转换函数:
parseInt( res ):提取字符串开始去除空白后的数字转为整数。
parseFloat (res):转换字符串为浮点数,忽略字符串前面空白字符
舍入操作:toFixed ( )
5.Math
取极限值:Math.min Math.max 还可以利用apply从数组中取值:Math.max.apply(Math, [1, 2, 3])
舍入处理:向上整数-ceil 向下整数-floor 四舍五入-round
随机数:返回min~Max(包括上限)的随机数公式-min+Math.floor(Math.random()*(Max-min+1))
不包括则为:min+Math.floor(Math.random()*(Max-min))
二、数组
数组类型API众多,要熟练掌握了解所有API
1.类型转换
数组——>字符串:join("") .toString String([ , , ,])
类数组——>数组:Array.from (类数组为包含 length 属性或可迭代的对象)
2.展开语法
3.解构赋值
4.管理元素
5.合并拆分数组:
concat: concat方法用于连接两个或多个数组,元素是值类型的是复制操作,如果是引用类型还是指向同一对象
扩展语法连接:console.log([...array, ...hd, ...cms]);
copyWithin(这个没怎么用过):数组中复制一部分到同数组中的另外位置
6.查找元素
注意:
indexOf 是使用类似于 === 的严格相等
includes不能查找引用类型 因为内存地址并不相同 但find 可以差找引用类型
find 原理:
find 方法只返回第一次找到的值 找到了就不继续差找:
let arr = ["hdcms", "houdunren", "hdcms"]; let find = arr.find(function(item) { return item == "hdcms"; }); console.log(find); //hdcms
const user = [{ name: "李四" }, { name: "张三" }, { name: "后盾人" }]; const find = user.find(user => (user.name = "后盾人")); console.log(find);
7.数组排序
reverse:反转
sort:sort 排序顺序由返回值决定 Array.sort((a,b)=>return num :返回负数 a 排在 b前面
因此,默认是升序排序 即Array.sort((a,b)=>a-b 降序排序为 Array.sort((a,b)=>b-a
8.遍历和迭代器
(重点)
遍历方法有:
for
forEach-作用于每个数组元素 无返回值
for...in-更适合遍历对象而不是数组 根据索引key进行遍历 即 遍历的是数组的索引 也会遍历出数组的自定义属性
for...of-可以遍历一切可遍历的元素(数组、对象、集合)遍历数组中的每一项 可遍历数组的迭代对象获取key和value
迭代器有:keys values entries
9.扩展方法
every-用于递归检测元素 默认的返回值是false,即默认认为不进行下一次操作 当所有元素都返回真 最终结果才为真
some-用于递归检测元素 有一个返回值为真 结果就为真
filter-用来根据某些条件筛选数据 不改变原数组 而是返回 一个新数组
array.filter(function(currentValue,index,arr), thisValue)
map-返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值
reduce-进行遍历
三、Symbol
symbol是用于防止属性名冲突而产生的 它的值独一无二 他的声明和访问均使用 [ ] 的形式操作 如:
let obj = { [symbol]: "aaaa" };
不可以添加属性 但可以传入字符串作为描述参数
Symbol.for--根据描述寻找symbol 如果没有 就创建一个
四、Set
Set类似于一个“集合” 不允许数据重复 遵循严格监测=== 遍历顺序就是添加顺序
实例化
1 2 | let s = new Set() let s = newSet([1, 2, 3, 4]) |
检测存在--s.has()
添加-s.add( )
删除--s.delete( ) s.clear
Set——>数组:Array.form
遍历:Set的keys和values值一样
交集 差集--使用filter 并集--合并
五、Map
Map相当于一个字典,通过键值队进行保存 但和对象有所不同 Object的键只能是字符串或者 Symbols Map可以使用函数、对象、基本类型作为键或值
对于键是对象的Map, 键保存的是内存地址,值相同但内存地址不同的视为两个键
实例化
let m = new Map([ ['name', 'A'], ['age', '17'] ]);
|
添加--m.set( , )
读取元素--m.get( key )
遍历:使用for...of遍历Map时 相当于遍历Map的entries函数
和Object比较
键的类型:一个Object的键只能是字符串或者 Symbols,但一个 Map 的键可以是任意值,包括函数、对象、基本类型。
键的顺序:Map 中的键值是有序的,而添加到对象中的键则不是。
键值对的统计:可以通过 size 属性直接获取一个 Map 的键值对个数,而 Object 的键值对个数只能手动计算。
键值对的遍历:Map 可直接进行迭代,而 Object 的迭代需要先获取它的键数组,然后再进行迭代。
键值对的统计:可以通过 size 属性直接获取一个 Map 的键值对个数,而 Object 的键值对个数只能手动计算。
键值对的遍历:Map 可直接进行迭代,而 Object 的迭代需要先获取它的键数组,然后再进行迭代。
六、Function
函数本质是对象,所以可以通过赋值来指向函数对象的指针,并将指针传递给其他变量
有两种声明方式:
1.标准语法声明----function sum (num) { }
2.赋值声明-----var sum = function sum (num) { }
标准声明的优先级更高,会被变量提升。但赋值声明函数不会被提升
this:
可使用apply call bind 这三个方法改变this指针 传入什么绑定什么
apply / call :用于显示的设置函数上下文,并会立即执行函数 将对象绑定到this 但apply用数组传参 call需要分别传参
bind:返回一个新的函数 且不会立刻执行