2017盛大游戏2017前端工程师校招笔试题总结

1.js的数组方法中,哪些方法不改变数组自身?

改变数组自身:pop、push、shift、unshift、reverse、splice、sort
不改变数组,返回相应值:join、slice、concat、map、filter、some、every、reduce、reduceRight
不改变数组自身,不返回值:forEach

2.HTML5内建独享用于在画布上绘制的方法:

getContext()返回一个用于在画布上绘图的环境

3.以下代码的执行结果是:

for(var i=0;i<5;i++){
    setTimeout(function(){
        console.log(i+' ');
    },100)
}

输出结果:5 5 5 5 5

以我的理解,setTimeout是异步执行的。也就是说在五次循环之后才会执行setTimeout中的函数,而此时会取到全局变量i。

这里可以对比ES6语法中的let命令:

for(let i=0;i<5;i++){
    setTimeout(function(){
        console.log(i+' ');
    },100)
}

输出结果:0 1 2 3 4

4.jsonp的优缺点

优点:

  • 它不像XMLHttpRequest对象实现的Ajax请求那样受到同源策略的限制,JSONP可以跨越同源策略;
  • 它的兼容性更好,在更加古老的浏览器中都可以运行,不需要XMLHttpRequest或ActiveX的支持
  • 在请求完毕后可以通过调用callback的方式回传结果。将回调方法的权限给了调用方。这个就相当于将controller层和view层终于分开了。jsonp服务只提供纯服务的数据,至于提供服务以后的页面渲染和后续view操作都由调用者来自己定义就好了。

缺点

  • 它只支持GET请求而不支持POST等其它类型的HTTP请求
  • jsonp在调用失败的时候不会返回各种HTTP状态码。
  • 它只支持跨域HTTP请求这种情况,不能解决不同域的两个页面之间如何进行JavaScript调用的问题
  • 安全性问题

5.下列哪个不是RegExp对象的方法?

A. test
B. match
C. exec
D. compile

答案:B D
match是String对象的方法。compile已在Web标准中废除,虽然一些浏览器仍然支持这个方法。
String有四个方法可以使用正则:match、replace、split、search。在ES6中将这几个方法定义为RegExp对象的方法,调用方法如下:

String.prototype.match => RegExp.prototype[Symbol.match]

6.以下代码执行后,arr的值是:

var arr = [{a:1},{}];
arr.forEach(function(item,idx){
    item.b = idx;
})

结果:[{a:1,b:0},{b:1}]
这道题挺阴险的,乍一看forEach不影响原数组,arr应该没有任何改变。仔细想想菜发现arr的这两个元素是对象,因此这里item是对arr成员的浅拷贝,参数传递的是地址,原数组改变。要实现深拷贝可以用到ES6语法的展开运算符。

7.哪一个不是浏览器天生的inline-block标签(拥有内在尺寸,可设置高宽,不会自动换行)?

A.<button>
B.<input>
C.<label>
D.<img>

答案:C
浏览器默认的常见inline标签:label、a、img、span、em、strong、i、sub、sup等。
浏览器默认的常见inline-block标签:input、button、select、textarea等。
img虽然是行内元素,但它确实是可以设置宽高的。(它们就是俗称的置换元素)

8.关于以下代码正确的结论:

var F = function(){};
Object.prototype.a = function(){};
Function.prototype.b = function(){};
var f = new F();

A. f能取到a,不能取到b
B. f能取到a,b
C. f能取到b,不能取到a
D. f不能取到a,b

答案:A
本题中f是构造函数创建的特殊类型的对象(即F),因此f肯定能够取到a。f的原型链上没有Function,因此不能取到b。
但F是Function 的一个实例,f的原型对象的构造函数即为F。因此通过f.constructor.b是可以取到b的。

9.下面哪一个字符串不匹配正则/^a|bc$/:

A. bcd
B. abc
C. dbc
D. adc

答案:A
这道题的粗浅的理解是:|分割的是^a和cd$,因此匹配的是以a开头或以bc结尾的字符串。

10.编写一个函数实现form的序列化

这里写图片描述

function serializrForm(form){
            var paras = [];
            Array.prototype.forEach.call(form.elements,function(item,index){
                if(item.name.length){
                    switch(item.type){
                        case 'password':
                            paras.push(encodeURIComponent(item.name)+'='+encodeURIComponent(item.value));
                            break;
                        case 'hidden':
                            paras.push(encodeURIComponent(item.name)+'='+encodeURIComponent(item.value));
                            break;
                        case 'text':
                            paras.push(encodeURIComponent(item.name)+'='+encodeURIComponent(item.value));
                            break;
                        case 'checkbox':
                            if(item.checked){
                                paras.push(encodeURIComponent(item.name)+'='+encodeURIComponent(item.value));
                            }
                            break;
                        case 'radio':
                            if(item.checked){
                                paras.push(encodeURIComponent(item.name)+'='+encodeURIComponent(item.value));
                            }
                            break;
                        case 'select-one':
                            Array.prototype.forEach.call(item.options,function(option,index){
                                if(option.selected){
                                    paras.push(encodeURIComponent(item.name)+'='+encodeURIComponent(option.value||option.text))
                                }
                            })
                            break;
                        case 'textarea':
                            paras.push(encodeURIComponent(item.name)+'='+encodeURIComponent(item.value));
                            break;
                        default:
                            //处理没有type
                            paras.push(encodeURIComponent(item.name)+'='+encodeURIComponent(item.value));
                    }
                }
            })
            return paras.join('&');
        }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值