javascript笔试面试题



1.找出一个字符串中出现次数最多的字符,统计这个次数

<pre class="javascript" name="code">//方法一:(别人)
/*
1.hash table散列表,一种数据结构
2.for-in语句是一种精准的迭代语句,可以用来枚举对象的属性。
for(var key in window){
	console.log(key);
}
列举出window对象的属性名,每次循环都将window对象的属性名赋给变量key
*/
var str="abcdefgabcdabcabacccc";
var obj={};
//将每个字符出现的次数存在hash table(散列表)中,key表示字符,key值表示出现的次数
for(var i=0;i<str.length;i++){
	var key=str[i];
	if(!obj[key]){
		obj[key]=1;
	}else{
		obj[key]+=1;
	}
}
//找出散列表中的最大的属性值
var max=-1;
var maxKey;
for(var key in obj){
	if(max<obj[key]){
		max=obj[key];
		maxKey=key;
	}
}
console.log(maxKey);
//方法二:(自己)
/*
1.字符串与数组相互转化的方法:
(1)str.split(""); (2)arr.join("");
2.获取数组最大值的方法:
(1)
var arr=[];
var maxVal=arr[0];
for(var i=1;i<arr.length;i++){
	if(arr[i]>maxVal){
		maxVal=arr[i];
	}
}
console.log(maxVal);
(2)
Math.max.apply(Math,arr);或者Math.max.apply(this,arr);
3.也可以通过str[i]获取字符串中特定字符。或者通过charAt(),charCodeAt()
*/
var str="abcdefgabcdabcabacccc";
var arr=str.split("");
var len=arr.length;
var num=[len];
for(var i=0;i<len;i++){
	num[i]=0;
	for(var j=0;j<len;j++){
		if(arr[i]===arr[j]){
			num[i]+=1;
		}
	}
}
var max=num[0];
for(var i=1;i<len;i++){
	if(max<num[i]){
		max=num[i];
	}
}
max=Math.max.apply(this,num);
var maxIndex=num.indexOf(max);
console.log(arr[maxIndex]);

2.作用域问题

var a=6;
function test(){
	var a=666;
	alert(a);
}
a=66;
test();//666
var a=6;
function test(){
	 a=666;
	alert(a);
}
a=66;
test();//666
var a=6;
function test(){
	alert(a);
	var a=666;
}
a=66;
test();//undefined
var a=6;
function test(){
	alert(a);
	a=666;
}
a=66;
test();//66

3.setTimeout

var a=6;
setTimeout(function(){
	alert(a);//undefined
	var a=666;
},1000);
a=66;

var a=6;
setTimeout(function(){
	alert(a);//66
	a=666;
},1000);
a=66;

setTimeout和setInterval的详细用法见本博客的另一篇文章:
http://blog.csdn.net/shiqianrongcsdn/article/details/47017173

4.以下代码的输出情况

alert(typeof(null))
alert(typeof(undefined))   
alert(typeof NaN)
alert(NaN == undefined)
var str="true";
alert(typeof(str++))
alert(str)
var x = 1,y = z = 0;
function add(n){
    return n = n + 1;
}
y = add(x)
alert(y);
function add(n){
    return n = n + 3;
}
z = add(x);
alert(z);
var myObject = {
    num:2,
    add:function(){
        this.num = 3;
        (function(){       	
            alert(this.num);
            this.num = 4;//若将这个上移,那么上面的alert会输出什么
        })();
        alert(this.num);
    } 
}
myObject.add();
var i = 0;
for(var i = 0; i< 3;i++){
    setTimeout(function(){
        return function(){console.log(i);}
    }(),0);
}

5.  console.log(["1","2","3"].map(parseInt));
参考:  

知识点:http://blog.csdn.net/justjavac/article/details/19473199
  1.数组上的迭代方法(every,some,filter,foreach,map)
  arr.map(callbackfn[,thisArg]);
  注:callbackfn回调函数,对数组的每一项调用该函数,map会传给回调函数三个参数(数组项的值,该项在数组中的位置和数组对象本身)
  thisArg为运行该函数的作用域对象
  2.parseInt方法
  parseInt(string,radix);
  注:
  (1)radix:要解析的数字的基数,该值介于2-26之间。如果该参数小于2或者大于 36,则parseInt()将返回NaN。
  若radix参数省略或者为0,那么parseInt根据string来判断数字的基数
  如果 string 以 "0x" 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。
  如果 string 以 0 开头,那么 ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。
  如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。
  (2)开头和结尾的空格是允许的。
  (3)如果字符串的第一个字符不能被转换为数字,那么 parseInt() 会返回 NaN。
  
  ["1","2","3"].map(parseInt)
  map会传给parseInt的三个参数有1-0-1,2,3   2-1-1,2,3   3-2-1,2,3
  parseInt只能接收前两个参数1-0   2-1  3-2
  parseInt("1",0);//输出1
  parseInt("2",1);//输出NAN,因为radix不能为1
  parseInt("3",2);//输出NAN,因为"3"里面没有合法的二进制数

6.

typeof null   //object

null instanceof Object //null instanceof 任何类型都是false

7.

[3,2,1].reduce(Math.pow)  //9

[].reduce(Math.pow)//TypeError: Reduce of empty array with no initial value

这题考的Math.pow和Array.prototype.reduce
Math.pow(base, exponent)接受两个参数:基数、需要计算的次方
reduce传递给其作为参数的函数几个值:
* previousValue:上一次计算的结果
* currentValue:当前元素的值
* index: 当前元素在数组中的位置
* array:整个数组

reduce本身接受两个参数,callback和initialValue,分别是reduce的回调函数和计算初始值–也就是第一次reduce的callback被调用时的previousValue的值,默认为0
reduce在数组为空且没有定义initialValue时,会抛出错误,如chrome下:TypeError: Reduce of empty array with no initial value

8.

 var val = 'smtg';
 console.log('Value is '+(val === 'smtg') ? 'Something' : 'Nothing');
 输出:SomeThing
 考察的是运算符优先级问题,这里+优先级高于?:,实际是"value is true"?'somethig':'nothing'



 




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值