1.js数据类型
基本数据类型:string boolean number undefined null symbol bigInt
引用数据类型:Object(对象 数组 函数)
2.怎么去判断数据类型
方法一:typeof不能判断 null、Array、Object
方法二:instanceof判断Object不能判断 null、undefined
方法三:Object.prototype.toString.call() 可以判断任何类型
方法四:Array.isArray() 只能判断 Array 类型
方法五:constructor不能用判断null、undefined
3.盒模型
盒模型:content(内容区域)borderpaddingmargin(不计算)四种属性
怪异盒模型 box-sizing: border-box;
width = 内容 + padding + border,padding和border 不会撑大盒子 更好控制盒子
标准盒模型 box-sizing: content-box;
width = 内容 + padding + border,padding和border 会撑大盒子
4.数组的方法
1.那些会改变原数组
1.push(); 方法:在数组的最后面添加内容,返回值是添加后数组的长度
2.pop()方法:把数组的最后一个删除,返回值是删除的那一项
3.unshift()方法:在数组的最前面添加内容,返回值是添加后数组的长度
4.shift()方法:删除数组中的第一项,返回值是删除的那一项
5.concat()方法:拼接数组
6.join()方法:把数组中的每一项用特定的字符串连接起来
7.splice(a,b,c); 方法:从索引a开始截取b个元素,并用c替换截取的元素,并改变原来的数组,如果只有一个参数,表示从这个索引开始截取到末尾
splice(a,b)方法里面如果第一个参数为负数的话,使用方法跟slice()方法一样,如果第二个参数为负数的话,表示截取的是一个空数组
8.sort(function (a,b){return a-b}); 数组排序方法
9.reverse(); 方法:数组翻转方法
2.那些不会改变原数组
1.slice(a,b) 方法: 从索引a开始截取(包括a),一直截取到b(不包括b),如果里面只有一个参
数,那么就直接截取到末尾,不会改变原来的数组
2.forEach(function (ele,index){console.log(ele,index)}); 方法:遍历数组,传入一个回调函数,里面有三个参数,第一个是元素值,第二个是索引,第三个是数组
3.every(function (ele){return ele > 20}); 传入一个回调函数,返回值是boolean类型值
4.map(function (ele){return ele + 10});或map(Math.sprt);让数组中的每一个元素按照函数的方法去执行,返回一个新的数组
5.filter(functoon (ele){return ele < 50});起到过滤作用, 让数组中的每一个元素按照函数的方法去执行,把符合条件的元素放到一个新的数组中返回
6.eval(arr.join('+'));如果数组中的每一项都是数字的话,用这个方法可以求数组中的数字之和
5.forin / forof区别
for...in 遍历对象的键(字符串),会走原型链,顺序不保证,可以用在对象,字符串,数组中使用;返回的是属性名(字符串类型)
for...of 遍历可迭代对象的值(即元素内容,任意类型),不走原型链,顺序稳定,数组/字符串/Set/Map 专用,对象不行。返回的是元素值(任意类型)
相同:两者都可以使用 break、continue、return 提前终止循环。这一点上两者能力相当,都优于 forEach(无法中断)
6.map/forEach区别
相同点 :
都是循环遍历数组中的每一项
回调函数的参数:当前的值、当前值的索引、原数组
不同点:
map会返回一个新的数组,而forEach不会
foreach可以跳出循环,(return语句可以当前回调函数中返回),而map不能,只能遍历完整个数组。
map方法返回一个新的数组,数组中的元素为原始数组调用函数处理后的值。(原数组进行处理之后对应的一个新的数组。)
map()方法不会改变原始数组
map()方法不会对空数组进行检测
forEach()方法用于调用数组的每个元素,将元素传给回调函数.(没有return,返回值是undefined)
注意:forEach对于空数组是不会调用回调函数的。