2015阿里 前端笔试题解析

1.
var a = [1,2,3];
a.splice(1,1,2,3,4);
console.log(a);
结果是什么?


答案:
[ 1, 2, 3, 4 ,3]


splice(index,delLength,addElements);
删除1处的1个元素,在1处插入2,3,4


2.
关于XSS,下列说法正确的是:
A:XSS的全称是Cross Site Scripting。
B:CSRF是XSS的一种
C:从Cookie中获取用户名并输出到页面的过程不会导致XSS。
D:XSS都是因为后端未对数据做安全检查造成的。


答案:A


A:XSS:跨站脚本攻击
B:CSRF(Cross-site request forgery)跨站请求伪造,已经授权的用户在未知的情况下进行表单提交。
C:会,DOM型XSS
D:XSS有三种,反射型、持久型、Dom型,其中前2者是前后端未对数据进行检查,而Dom型只有前端。


3.以下两种方式调用函数时,alert的结果?
var foo = 1;
function main(){
alert(foo);
var foo = 2;
alert(this.foo);
this.foo = 3;
}
main();
new main();


答案:
undefined
undefined
undefined
undefined


当执行到main中的alert(foo)时,因为检测到foo在之后定义了,所以知道foo指的是main中的foo,所以显示undefined。
this.foo也是同理,undefined。this.foo在对象中,而foo是定义在main函数中,所以2者不同。
main()的运行和new main()的运行完全一样,只是返回的内容不同,前者返回return 内容,后者返回对象。


4.
关于跨域问题下面哪些说法是正确的
A:通过jsonp方式可以发出POST请求其它域名下的接口
B:通过iframe设置document.domain可以实现跨域
C:可以利用flash的http请求,来处理跨域问题
D:i.aliyun.com中可以ajax请求www.aliyun.com/info.json


答案ABC


D里面子域不同也不允许跨域


5.
关于CSS中的单位一下哪个说法是正确的:
A:px是相对于显示器屏幕分辨率的相对长度单位
B:em是相对于body标签font-size的单位
C:rem是相对于其父元素来设置字体大小的
D:pt(point)是印刷常用单位“磅”,大小为1/72英寸。


答案:
AD


px是相对单位,也有一种说法是像素单位。
em是相对于当前对象的font-size的单位,而不是body
rem是相对于根元素来调整大小的


6.
function A(params){
    params = params || {};
    for (var key in params){
        Object.defineProperty(this,key,{
            get:function () {
                return params[key];
            },
            enumerable:false
        });
    }
    //key = 3;
}


var a = new A({
    'x':'X',
    'y':'Y',
    'z':'Z'
});


有上述程序,下列说法不正确的是:
A:运行console.log(a.x);的结果是x
B:a.y()运行结果是TypeError:String is not a function的错误


答案:A
Object.defineProperty可以设置属性的一些属性,比如:
    configurable: false, //是否可以删除属性,是否可以修改属性的 writable 、 enumerable 、 configurable 属性。
    enumerable: false,   //是否可以枚举,是否可以通过for...in 遍历到,是否可以通过 Object.keys() 方法获取属性名称
    writable: false,     //是否可以对属性进行重新赋值
    value: null,     //属性的默认值
    set: undefined,     //属性被赋值时,此方法被自动调用
    get: undefined      //属性被读取时,此方法被自动调用
A:console.log(a.x)的结果是Z,因为key值最后被赋值为'z',所以任何属性的get方法都会返回params['z']
B:报的错误是y not a function


7.没有


8.
编写一个Java Script函数,传入仅包含数组多维数组,返回拍平后结果。
比如:传入[1,[2,3]],返回[1,2,3]
function flatten(arr){
//return flattened_arr
}


答案1:
function flatten(arr) {
    var result = (arr + "").split(',');
    return result;
}


console.log(flatten([1,[2,3]]));


答案2:
function flatten(arr) {
    var result = [];
    function insert(subarr) {
        for (var i = 0,ii = subarr.length;i < ii;i ++){
            if (subarr[i] instanceof Array){
                insert(subarr[i]);
            }else{
                result.push(subarr[i]);
            }
        }
    }
    insert(arr);
    return result;
}


console.log(flatten([1,[2,3]]));


9.页面A的域名是:www.taobao.com。页面B的域名是:www.tmall.com,如果A使用iframe引用B,如何做到iframe的高度自适应(即B内容有多高,iframe就有多高)
<iframe src="http://www.tmall.com" id="myiframe" scrolling="no" οnlοad="changeFrameHeight()" frameborder="0"></iframe>


function changeFrameHeight(){
    var ifm= document.getElementById("iframepage"); 
    ifm.height=document.documentElement.clientHeight;
}
window.οnresize=function(){  
     changeFrameHeight();  
}




10.
JavaScript实现格式化输出,比如输入999999999,输出为999,999,999
function strFormat(num,sp,len){
    var resultStr = "";
    var numStr = num + "";
    var i = numStr.length - 3;
    while (i >= 0){
        resultStr = "," + numStr.substr(i,len) + resultStr;
        // console.log(resultStr);
        i -= len;
    }
    // console.log(i);
    if (i > -len){
        resultStr = numStr.substr(0,i + len) + resultStr;
    }else{
        resultStr = resultStr.substr(1,resultStr.length - 1);
    }
    return resultStr;
}


console.log(strFormat("0123456789",",",3));


11.
运用JS设置cookie、读取cookie、删除cookie
//写cookies 


function setCookie(name,value) 

    var Days = 30; 
    var exp = new Date(); 
    exp.setTime(exp.getTime() + Days*24*60*60*1000); 
    document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString(); 



//读取cookies 
function getCookie(name) 

    var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
 
    if(arr=document.cookie.match(reg))
 
        return unescape(arr[2]); 
    else 
        return null; 



//删除cookies 
function delCookie(name) 

    var exp = new Date(); 
    exp.setTime(exp.getTime() - 1); 
    var cval=getCookie(name); 
    if(cval!=null) 
        document.cookie= name + "="+cval+";expires="+exp.toGMTString(); 
}


12.
CSS样式设置,略


13.
请编写一个JS函数parseQueryString,它的用途是把URL参数解析为一个对象
如:var url = "http://witmax.cn/index.php?key0=0&key1=1&key2=2"


function getObjFromUrl(url){
    var strArr = url.split("?");
    var hostStr = strArr[0];
    var paramsArr = strArr[1].split("&");
    var resultObj = {};
    resultObj["host"] = hostStr;
    resultObj["params"] = [];
    for (var i = 0,ii = paramsArr.length;i < ii;i ++){
        var keyAndValue = paramsArr[i].split("=");
        resultObj["params"].push({
            key:keyAndValue[0],
            value:keyAndValue[1]
        });
    }
    return resultObj;
}


var url = "http://witmax.cn/index.php?key0=0&key1=1&key2=2";
console.log(getObjFromUrl(url));
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值