开始准备投简历 重新复习一下基础内容

一、基本数据类型

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.size
检测存在--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']
]);

(大部分和Set相同)0
添加--m.set(  ,  )
读取元素--m.get( key )
遍历:使用for...of遍历Map时 相当于遍历Map的entries函数

和Object比较

键的类型:一个Object的键只能是字符串或者 Symbols,但一个 Map 的键可以是任意值,包括函数、对象、基本类型。
键的顺序:Map 中的键值是有序的,而添加到对象中的键则不是。
键值对的统计:可以通过 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:返回一个新的函数 且不会立刻执行

七、DOM

八、事件