网站建设解决方案ppt,网络加速,做外贸网站可以收付款吗,建设旅行网站策划书#x1f469; 个人主页#xff1a;不爱吃糖的程序媛 #x1f64b;♂️ 作者简介#xff1a;前端领域新星创作者、CSDN内容合伙人#xff0c;专注于前端各领域技术#xff0c;成长的路上共同学习共同进步#xff0c;一起加油呀#xff01; ✨系列专栏#xff1a;前端… 个人主页不爱吃糖的程序媛 ♂️ 作者简介前端领域新星创作者、CSDN内容合伙人专注于前端各领域技术成长的路上共同学习共同进步一起加油呀 ✨系列专栏前端面试宝典、JavaScript进阶、vue实战 资料领取前端进阶资料以及文中源码可以在公众号“不爱吃糖的程序媛”领取 前端面试基础知识题
1. arguments 这种类数组如何遍历类数组
for(var i 0, len arrayLike.length; i len; i) { …… }使用ES6的 … 运算符我们可以轻松转成数组。
function func(...arguments) { console.log(arguments); // [1, 2, 3] } func(1, 2, 3);2. new fn与new fn()有什么区别吗
用 new 创建构造函数的实例时通常情况下 new 的构造函数后面需要带括号譬如new Parent()。 有些情况下new的构造函数后带括号和不带括号的情况一致 譬如
function Parent(){ this.num 1;
}
console.log(new Parent()); //输出Parent对象{num:1}
console.log(new Parent); //输出Parent对象{num:1}但有些情况下new的构造函数后带括号和不带括号的情况并不一致譬如
function Parent(){ this.num 1;
}
console.log(new Parent().num); //1
console.log(new Parent.num); //报错结果分析 从报错信息来看new Parent.num执行顺序是这样的先执行Parent.num此时返回结果为undefined后执行new因new后面必须跟构造函数所以new undefined会报错。
new Parent().num相当于(new Parent()).num所以结果返回1。 从结果来看new Parent.num代码相当于new (Parent.num)new Parent().num相当于(new Parent()).num。由此看来 new 的构造函数后跟括号优先级会提升。
3. Object与Map有什么区别
概念
Object 在ECMAScript中Object是一个特殊的对象。它本身是一个顶级对象同时还是一个构造函数可以通过它如new Object()来创建一个对象。我们可以认为JavaScript中所有的对象都是Object的一个实例对象可以用字面量的方法const obj {}即可声明。
Map 是Object的一个子类可以有序保存任意类型的数据使用键值对去存储其中键可以存储任意类型通过const m new Map();即可得到一个map实例。 访问 map: 通过map.get(key)方法去属性, 不存在则返回undefined object: 通过obj.a或者obj[‘a’]去访问一个属性, 不存在则返回undefined
赋值
Map 通过map.set去设置一个值key可以是任意类型
Object 通过object.a 1或者object[‘a’] 1去赋值key只能是字符串数字或symbol
删除
Map 通过map.delete去删除一个值试图删除一个不存在的属性会返回false
Object 通过delete操作符才能删除对象的一个属性诡异的是即使对象不存在该属性删除也返回true当然可以通过Reflect.deleteProperty(target, prop) 删除不存在的属性还是会返回true。 var obj {}; // undefined delete obj.a // true
大小
Map 通过map.size即可快速获取到内部元素的总个数
Object 需要通过Object.keys的转换才能将其转换为数组再通过数组的length方法去获得或者使用Reflect.ownKeys(obj)也可以获取到keys的集合
迭代
Map 拥有迭代器可以通过for-of forEach去直接迭代元素切遍历顺序是确定的
Object 并没有实现迭代器需要自行实现不实现只能通过for-in循环去迭代遍历顺序是不确定的 使用场景 如果只需要简单的存储key-value的数据并且key不需要存储复杂类型的直接用对象。如果该对象必须通过JSON转换的则只能用对象目前暂不支持Map。 map的阅读性更好所有操作都是通过api形式去调用更有编程体验
4. cookie 的有效时间设置为 0 会怎么样
Cookie过期时间设置为0表示跟随系统默认其销毁与Session销毁时间相同即都在浏览器关闭后的特定时间删除。如果我们写程序的时候不设置Cookie的有效时间那么Cookie的有效时间等效于会话时间。
5. const声明了数组还能push元素吗为什么
可以。数组是引用类型const声明的引用类型变量不可以变的是变量引用始终指向某个对象不能指向其他对象但是所指向的某个对象本身是可以变的
6. 如何区分数组和对象
方法1 通过 ES6 中的 Array.isArray 来识别
console.log(Array.isArray([]))//true
console.log(Array.isArray({}))//false 方法2 通过 instanceof 来识别
console.log([] instanceof Array)//true
console.log({} instanceof Array)//false方法3 通过调用 constructor 来识别
console.log([].constructor)//[Function:Array]
console.log({}.constructor)//[Function: Object] 方法4 通过 Object.prototype.toString.call 方法来识别
console.log(Object.prototype.toString.call([]))//[object Array]
console.log(Object.prototype.toString.call({}))//[object Object]7. 给一个dom同时绑定两个点击事件一个用捕获一个用冒泡说下会执行几次事件然后会先执行冒泡还是捕获
addEventListener绑定几次就执行几次。先捕获后冒泡
8. 请简述 的机制
undefined null结果是true。且它俩与所有其他值比较的结果都是false。 String Boolean需要两个操作数同时转为Number。 String/Boolean Number需要String/Boolean转为Number。 Object Primitive需要Object转为Primitive(具体通过valueOf和toString方法)。
9. 写一个 repeat 方法实现字符串的复制拼接
方法一之所以创建一个带 length 属性的对象是因为要调用数组的原型方法需要指定 call 第一个参数为类数组对象。利用闭包缓存 join避免重复创建对象、寻找方法。
var repeat (function () {var join Array.prototype.join, obj {}; return function(target, n) { obj.length n 1; return join.call(obj, target); };
})();方法二使用二分法减少操作次数
function repeat(target, n) { if (n 1) { return target;} var s repeat(target, Math.floor(n / 2)); s s; if (n % 2) { s target; } return s;
}10. js中的undefined和 ReferenceError: xxx is not defined 有什么区别
ReferenceError当尝试引用一个未定义的变量/函数时就会抛出ReferenceError。 undefined当一个变量声明后没有被赋值那么它就是undefined类型。