前端面试题学习和总结
一、js的数据类型有哪些和区别
(1)两种数据类型:
基本数据类型:null, undefined, number, string, Boolean
引用数据类型:Array, Object, Function, Date
(2)区别:
基本数据类型存储在栈中,直接存值,赋值的时候是相对独立的。
例:`var a = 10;var b = a;b = 20;console.log(a); // 10 `
引用数据类型存储在堆中,存的是内存地址,赋值的时候相当于是赋值内存地址
例:`var obj1 = new Object();var obj2 = obj1;obj2.name = "danny";console.log(obj1.name); // danny`
二、 js的原型和原型链
(参考文章:https://www.jianshu.com/p/dee...)
A. 每个对象都有 proto 属性,但只有函数对象才有 prototype 属性,指向他的原型对象Person.prototype,原型对象(Person.prototype)是构造函数(Person)的一个实例。
Person.prototype.constructor == Person
B.通过new创建实例person1,实例有constructor属性,指向他的构造函数Person。
person1.constructor == Person
C. 所有的原型对象都会自动获得一个 constructor(构造函数)属性,这个属性(是一个指针)指向 prototype 属性所在的函数(Person)
Person.prototype.constructor == Person
D. 原型链:JS 在创建对象(不论是普通对象还是函数对象)的时候,都有一个叫做__proto__ 的内置属性,用于指向创建它的构造函数的原型对象
三、判断一个字符串中出现次数最多的字符和出现的次数
let [str,arr] = ["assda1221asjdklasdjkln12klnasld",{}]for(let i in str){if(!arr[str.charAt(i)]){arr[str.charAt(i)] = 1} else {arr[str.charAt(i)]++}}let [key,number] = [null,0]for(let i in arr) {if(arr[i]>number) {key = i;number=arr[i]}}console.log(`出现次数最多的字符是${key},次数为${number}`) //出现次数最多的字符是a,次数为5
四、add (1)(2)(3)(4)实现无限累加,最终打印出结果
function add(x){function addFake(y) {x = x + y;return addFake;};addFake.toString = function () {return x;};return addFake;}console.log(add(1)(2)(3)(4).toString()) //10
备注:
A. 在对函数进行console.log或者alert会自动调用toString函数,故需重写该函数
B. 第一次调用add返回了addFake函数,后续一直调用addFake函数,故该代码执行过程,add调用了一次,addFake调用了3次
五、对象的深度拷贝
使用递归的方法:
function clone(obj) {var o = obj instanceof Array ? [] : {};for (var k in obj)o[k] = typeof obj[k] === Object ? clone(obj[k]) : obj[k];return o;}let obj = {name: 'danny'}const objCopy = clone(obj)obj.age = '18'console.log(obj) // {name: "danny", age: "18"}console.log(objCopy) // {name: "danny"}
备注:
1、使用JSON.parse(JSON.stringify(obj))可以实现一些部分情况下的深拷贝,但是如果对象中有undefined、function、symbol 会在转换过程中被忽略,则无法使用
2、Object.assign只能实现浅拷贝(源对象的属性值发现改变,则跟着变)
六、js的作用域链
(个人部分理解)比如在函数内定义一个变量A,然后去调用这个变量A。这个时候首先在函数代码块里面找是否有A,如果有就有,没有的话继续往外层找,直到找到window对象下面,如果还没,那就是not defined
七、vue双向绑定
是通过Object.defineProperty()中的set()和get()函数实现的,取值的时候调用get(),赋值的时候调用get()
let keyValue = 1;let obj2 = {};Object.defineProperty(obj2,'key', {get: function(){return keyValue;},set: function(newValue){keyValue = newValue;}});obj2.key; // 1obj2.key = '2';
八、数组随机排序
let arrData = [1,2,3,4,5,6,7,8]function randSort(arr) {for (let i = 0, len = arr.length; i < len; i++) {let rand = parseInt(Math.random()*len)let temp = arr[rand]arr[rand] = arr[i]arr[i] = temp}return arr}console.log(randSort(arrData))
九、JS的跨域有那些解决方案
参考文章:https://www.cnblogs.com/2050/...
补充:服务端处理 header("Access-Control-Allow-Origin: *");
十、css垂直居中有哪些方式
=================持续更新中====================
前端面试题学习和总结相关推荐
- 前端攻城狮学习笔记七:常见前端面试题之HTML/CSS部分(二)
前端页面有哪三层构成,分别是什么?作用是什么? 1.结构层:由 HTML 或 XHTML 之类的标记语言负责创建,仅负责语义的表达.解决了页面"内容是什么"的问题. 2.表示层:由 ...
- 前端面试题整理(定期更新)
前言 因为面试的原因,最近又开始关注前端面试题,浏览过网上很多面试题集合,有很多小伙伴整理的很全面,但是我发现其中有很多技术点在当下已不再流行,而面试题一般都是映射开发中常遇到的一些技能和问题,再结合 ...
- Web前端面试题集锦
Web前端面试题集锦 前端开发面试知识点大纲: 注意 转载须保留原文链接(http://www.cnblogs.com/wzhiq896/p/5927180.html )作者:wangwen896 H ...
- promise的状态以及api介绍_2019年,盘点一些我出过的前端面试题以及对求职者的建议
笔者虽然曾经也面试过很多求职者,但是对于前端的笔试和面试,我觉得并不能体现一个人的真实能力,所以建议大家多修炼前端真正的技术.对于前端面试题,之前也承诺过读者要出一篇,笔者大致总结一下曾经面试的题目. ...
- 前端周报:前端面试题及答案总结;JavaScript参数传递的深入理解
1.2017前端面试题及答案总结 |掘金技术征文 "金三银四,金九银十",用来形容求职最好的几个月.但是随着行业的饱和,初中级前端er就业形势不容乐观. 行业状态不可控,我们能做的 ...
- 【前端】前端面试题整理
前端和计算机相关知识 你能描述一下渐进增强和优雅降级之间的不同吗 浏览器兼容问题 如何对网站的文件和资源进行优化? 怎么学习前端?怎么接触前端新知识? 关于前后端分离 关于浏览器内核(渲染引擎) 浏览 ...
- Web前端求职必备 常见前端面试题汇总(二)
一般情况下web前端面试的时候并不会设计特别复杂的问题.但是依旧有很多同学在比较基础的问题上栽了跟头.所以小编结合多套面试题,为大家整理出8个虽然简单面试题,即将面试或者正在面试的小伙伴速度参考一下, ...
- Web前端程序员必备 前端面试题汇总(1)
任何技术岗位面试的时候都要经过人力面试和技术岗位面试至少两次.人力面试一般也就是考察一下个人品质以及薪资问题,而技术岗位则是考察你是否有真才实学.本文和大家分享一个难到了很多前端工程师的面试题:Qui ...
- 前端面试题汇总(JavaScript面试纯干货)
前端面试题汇总(JavaScript面试纯干货) 1 闭包 闭包就是能够读取其他函数内部变量的函数 闭包是指有权访问另⼀个函数作⽤域中变量的函数,创建闭包的最常⻅的⽅式就是在⼀个函数内创建另⼀个函数, ...
最新文章
- 学python的基础-老司机学python篇:第一季(基础速过、机器学习入门)
- PHP数据库操作分页类
- mxnet基础到提高(36)-单层神经网络
- SAP CRM读取产品主数据360度数据的API
- android横向展示状态,【报Bug】Android横屏状态下启动App,即使在App.vue中锁定竖屏,但是首页nvue中的rpx单位是按照启动的横竖屏状态显示的!...
- 计算机联锁软件毕设论文,铁路信号计算机联锁系统()毕设论文.doc
- 金字火腿推出“人造牛排” 股价连日上涨接近历史高点
- springboot08 自动配置原理
- matlab画x的1 3次方图像,Y=X的3次方的图像)
- SLA/LCD/DLP光固化3D打印原理分析!
- 微信小程序登陆\code详解
- js事件冒泡和传播详细解释
- s3cmd 快速评估RADOSGW的性能
- 组战队,赢iPhone啦!
- 什么是闭包?闭包有啥作用?闭包的应用有啥?内存优化?
- vue中的路由懒加载
- 写一程序,用scanf函数输入x,输出y值。
- 论文参考文献格式(GB7714-2005)_庄启智_新浪博客
- 企业构建ERP系统 不得不考虑的因素
- Bandicam(班迪录屏)高清视频录制工具