前端面试题

前端面试题

*1. 判断数组

(1)Array.isArray()方法判断

var a=[ ];
Array.isArray(a)    //返回true
var b='hello world';
Array.isArray(b)       //返回false

这个方法简单有效,缺点是IE8及以下版本浏览器不兼容

(2)用instanceof判断

var a=[ ];
console.log(a instanceof Array)   //返回true

obj instanceof Object 判断 Object.prototype 是否存在在 obj 的原型链上,因此 a instanceof Object 也会返回 true

(3)根据对象的constuctor属性判断

var a=[ ];
console.log(a.constructor==Array); //返回true

在javascript中,每个对象都有一个constructor属性,它引用了初始化该对象的构造函数,通常会将这个判断方法封装为一个判断数组的方法

function isArray(obj) {
    return typeof obj == 'object' && obj.constructor == Array
}

(4)终极判断方法

function isArray(obj) {
    return Object.prototype.toString.call(obj) == '[object Array]';
}//仅判断Array
function isType(data,type) {
    return Object.prototype.toString.call(data) === "[object "+type+"]";
} //通用判断方法

*2. 编写一个带参数(m,n)的函数,产生一个m个n的数组,不用循环

function mnArr(m,n){
//第一种方法
var newArr=new Array(m);
newArr.fill(n);
return newArr;

//第二种,from方法
var arr = Array.from({length:m}, (v)=> n);
return arr;
}

*3. html怎么解析的?

把html解析为dom树,使用css渲染dom,js操作dom。

*4. jQ中让一个元素消失怎么实现?

a) dispaly:none
b) hide()
c) visibility:hidden
d) $(‘p’).fadeOut( )

*5. ajax.get发送数据成功后会把请求的url和结果保存缓存中,当下一次请求时直接取出来,这是为了提高页面响应速度和用户体验,但是如果因为业务需要,我们要怎么解决缓存问题?

a) 在ajax发送请求前加上 xmlHttpRequest.setRequestHeader("Cache-Control","no-cache");
b) 在ajax发送请求前加上xmlHttpRequest.setRequestHeader)"If-Modified-Since","0");
c) 在 Ajax 的 URL 参数后加上 "?fresh=" + Math.random(); //加随机数
d) 第五种方法和第四种类似,在 URL 参数后加上"?timestamp=" + new Date().getTime();//加时间戳
e) 在服务端加 header("Cache-Control: no-cache, must-revalidat");

*6. 什么是深入响应式原理?

深入响应式原理是利用了数据劫持和订阅发布的模式, 当数据模型发生改变的时候,视图就会响应的进行更新, 那么深入响应式原理是利用es5的Object.defineProperty中的getter/setter来进行数据的劫持的,
在数据变动时发布消息给订阅者,触发相应的监听回调。

*7. 如何理解vue中MVVM模式?

MVVM全称是Model-View-ViewModel;
View 与 Model 不发生联系,都通过 ViewModel 传递。

vue是以数据为驱动的,一旦创建dom和数据就保持同步,每当数据发生变化时,dom也会变化。DOMListeners和DataBindings是实现双向绑定的关键。DOMListeners监听页面所有View层DOM元素的变化,当发生变化,Model层的数据随之变化;DataBindings监听Model层的数据,当数据发生变化,View层的DOM元素随之变化。

*8. 下面的代码输出什么?

var y = 1;
if (function f(){}) {
    y += typeof f;
}
console.log(y);
答案:1undefined
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值