五种简单数据类型:Number, String, Boolean, Undefined, Null。 引用数据类型: Object对象,Array数组,function函数。
冒泡排序。
arguments: 所有函数都内置了一个arguments对象,arguments对象中存储了传递的所有实参,是个伪数组,具有length属性,没有pop(),push()等方法。
解析器运行JS分哪两步:预解析,代码执行。预解析:JS引擎会把JS里面所有的var还有function提升到当前所有域的最前面。代码执行:按照代码书写的顺序从上往下执行。 预解析分为变量预解析(变量提升)和函数预解析(函数提升)。
使用构造函数创建对象:构造函数就是把对象里相同属性和方法抽象出来,封装到函数里,构造函数首字母大写,不需要return,调用构造函数必须使用new。对象是一个具体的事物,构造函数泛指某一大类。利用构造函数创建对象的过程也称为对象的实例化。
new的执行过程:1.new构造函数可以在内存中创建一个空的对象。2.this就会指向刚才创建的空对象。3.执行构造函数里面的代码,给这个空对象添加属性和方法。4.返回这个对象不需要return。
内置对象:Math对象,Date对象,Array对象,String对象。
Math.floor()向下取整 Math.ceil()向上取整 Math.round()就近取整 Math.abs()绝对值 Math.max()/Math.min()求最大最小值。 Math.random()返回一个随机的小数 零到一之间 获取两个数之间的随机整数,包含这两个数。 function getRandom(min,max){ return Math.floor(Math.random()*(max-min+1))+min; }
获取Date总的毫秒数(时间戳)距离1970年1月1日。date.valueOf();date.getTime(); Date.now()。var date1 = +newDate();
Array对象的常用方法:push()末尾添加,pop()末尾删除,unshift()开头添加,shift()开头删除,reverse()颠倒数组,均改变原数组。
indexOf()数组中查找给定元素第一个索引,若存在返回索引号,不存在返回-1,lastIndexOf()返回最后一个。
数组去重,遍历旧数组查询新数组。
function unique(arr) {
var newArr = [];
for (var i = 0; i < arr.length; i++) {
if (newArr.indexOf(arr[i]) == '-1') {
newArr.push(arr[i]);
}
}
return newArr;
}
toString()将数组转换为字符串,join(分隔符)。concat()链接两个或多个数组,返回一个新数组。
slice()从数组提取指定元素(开始位置,结束位置)前闭后开,不会改变原数组。第二个参数可以省略。
splice()数组删除(从第几个开始,要删除个数),改变原数组。
String对象:字符串的不可变性(开辟新的地址空间),不要大量拼接字符串。 charAt(index)根据位置返回字符。str[index]。 replace('被替换的字符',’替换为的字符‘)只替换第一个字符。想全部替换加个while循环indexOf!=-1然后replace。 字符转换为数组 split('分隔符')。 toUpperCase()转换大写toLowerCase()转换为小写。
this指向问题:以函数形式调用,this就是window。以方法形式调用,this就是调用方法的对象。以构造函数形式调用,this是新创建那个对象。使用call和apply调用,this是指定的那个对象。
call()和apply():在调用call()和apply()可以将一个对象指定为第一个参数,此时这个对象会成为函数执行时的this。call()方法可以将实参在对象之后依次传递fun.call(obj,2,3)。apply()方法需要将实参封装到一个数组中统一传递。fun.apply(obj,[2,3])
数组去重方法:1.IndexOf()。2.双重for循环。3.es6的[…new Set()]。4.filter()。5.sort()
面试随便写一两种就行、项目直接用new Set() (方便)。
防抖:触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间。 应用场景:提交按钮、用户注册时候的手机号验证、邮箱验证、 节流:高频事件触发,但在n秒内只会执行一次,所以节流会稀释函数的执行频率。 应用场景: window对象的resize、scroll事件。 拖拽时候的mousemove。 射击游戏中的mousedown、keydown事件。 文字输入、自动完成的keyup事件。