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'