龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > Javascript编程 >

BAT及各大互联网公司2014前端笔试面试题--JavaScript篇(3)

时间:2014-11-04 11:03来源:网络整理 作者:网络 点击:
分享到:
复制代码 代码如下: var foo = 1; function(){ console.log(foo); var foo = 2; console.log(foo); } 答案:输出undefined 和 2。上面代码相当于: var foo = 1;function(){ var foo; consol

复制代码 代码如下:

var foo = 1;
function(){
console.log(foo);
var foo = 2;
console.log(foo);
}

答案:输出undefined 和 2。上面代码相当于:

var foo = 1;
function(){
  var foo;
  console.log(foo); //undefined
  foo = 2;
  console.log(foo); // 2;  
}

函数声明与变量声明会被JavaScript引擎隐式地提升到当前作用域的顶部,但是只提升名称不会提升赋值部分。

19.用js实现随机选取10--100之间的10个数字,存入一个数组,并排序。

var iArray = []; 
funtion getRandom(istart, iend){
    var iChoice = istart - iend +1;
    return Math.floor(Math.random() * iChoice + istart;
}
for(var i=0; i<10; i++){
    iArray.push(getRandom(10,100));
}
iArray.sort();

20.把两个数组合并,并删除第二个元素。

复制代码 代码如下:

var array1 = ['a','b','c'];
var bArray = ['d','e','f'];
var cArray = array1.concat(bArray);
cArray.splice(1,1);

21.怎样添加、移除、移动、复制、创建和查找节点(原生JS,实在基础,没细写每一步)

  1)创建新节点

createDocumentFragment() //创建一个DOM片段
createElement() //创建一个具体的元素
createTextNode() //创建一个文本节点

  2)添加、移除、替换、插入
appendChild() //添加
removeChild() //移除
replaceChild() //替换
insertBefore() //插入

  3)查找
getElementsByTagName() //通过标签名称
getElementsByName() //通过元素的Name属性的值
getElementById() //通过元素Id,唯一性

22.有这样一个URL:http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e,请写一段JS程序提取URL中的各个GET参数(参数名和参数个数不确定),将其按key-value形式返回到一个json结构中,如{a:'1', b:'2', c:'', d:'xxx', e:undefined}。

答案:

function serilizeUrl(url) {
  var result = {};
  url = url.split("?")[1];
  var map = url.split("&");
  for(var i = 0, len = map.length; i < len; i++) {
    result[map[i].split("=")[0]] = map[i].split("=")[1];
  }
  return result;
}

23.正则表达式构造函数var reg=new RegExp("xxx")与正则表达字面量var reg=//有什么不同?匹配邮箱的正则表达式?

  答案:当使用RegExp()构造函数的时候,不仅需要转义引号(即\"表示"),并且还需要双反斜杠(即\\表示一个\)。使用正则表达字面量的效率更高。

  邮箱的正则匹配:

复制代码 代码如下:
var regMail = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/;

24.看下面代码,给出输出结果。

复制代码 代码如下:

for(var i=1;i<=3;i++){
setTimeout(function(){
console.log(i);
},0);
};

答案:4 4 4。

  原因:Javascript事件处理器在线程空闲之前不会运行。那么问题来了,如何让上述代码输出1 2 3?

for(var i=1;i<=3;i++){
  setTimeout((function(a){ //改成立即执行函数
    console.log(a);  
  })(i),0); 
};

1      //输出
2
3

25.写一个function,清除字符串前后的空格。(兼容所有浏览器)

  使用自带接口trim(),考虑兼容性:

if (!String.prototype.trim) { 
 String.prototype.trim = function() { 
 return this.replace(/^\s+/, "").replace(/\s+$/,"");
 } 
} 

// test the function 
var str = " \t\n test string ".trim(); 
alert(str == "test string"); // alerts "true"

26.Javascript中callee和caller的作用?

  答案:

  caller是返回一个对函数的引用,该函数调用了当前函数;

  callee是返回正在被执行的function函数,也就是所指定的function对象的正文。

精彩图集

赞助商链接