首页 > 代码库 > js题

js题

null与undefined的区别:

在javascript中,将一个变量赋值undefined或null,几乎没有区别;

undefined与null在if语句中,都会被自动转为false,相等运算符甚至直接报告两者相等;

最初设计:

null是表示一个‘无’的对象,转为数值时是0;undefined是一个表示‘无’的原始值;转为数值是NaN;

目前用法:

null表示没有对象,即该处不应该有值;典型的用法:

  1作为函数的参数,表示该函数的参数不是对象;

  2作为对象原型链的终点;

undefined表示缺省值,就是此处应该有一个值,但是 还没有定义;典型用法:

  1变量被声明了,但是没有赋值,就等于undefined;

  2调用函数时,应该提供的参数没有提供,该参数等于undefined;

  3对象没有赋值的属性,该属性的值为undefined;

  4函数没有返回值时,默认返回undefined;

typeof返回的几种类型:

typeof(1): number
typeof(NaN): number
typeof(Number.MIN_VALUE): number
typeof(Infinity): number
typeof("123"): string
typeof(true): boolean
typeof(window): object
typeof(document): object
typeof(null): object
typeof(eval): function
typeof(Date): function
typeof(sss): undefined
typeof(undefined): undefined;

 

数组去重的几种方法:

思路1:构建一个新数组存放结果,for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组对比,若结果数组中没有该元素,则存到结果数组中;

Array.prototype.unique1 = function(){
 var res = [this[0]];
 for(var i = 1; i < this.length; i++){
  var repeat = false;
  for(var j = 0; j < res.length; j++){
   if(this[i] == res[j]){
    repeat = true;
    break;
   }
  }
  if(!repeat){
   res.push(this[i]);
  }
 }
 return res;
}
var arr = [1, ‘a‘, ‘a‘, ‘b‘, ‘d‘, ‘e‘, ‘e‘, 1, 0]
alert(arr.unique1());

 

思路2:

1先将原数组进行排序,检查原数组中的第i个元素与结果数组中的最后一个元素是否相同,因为已经排序,所以重复元素会在相同位置,如果不相同,则将该元素存入结果数组中;

Array.prototype.unique2 = function(){
 this.sort(); //先排序
 var res = [this[0]];
 for(var i = 1; i < this.length; i++){
  if(this[i] !== res[res.length - 1]){
   res.push(this[i]);
  }
 }
 return res;
}
var arr = [1, ‘a‘, ‘a‘, ‘b‘, ‘d‘, ‘e‘, ‘e‘, 1, 0]
alert(arr.unique2());

思路3:

创建一个新的数组存放结果,创建一个空对象,for循环时每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值1,存入到第二步建立的对象中,说明:至于如何对比,就是每次从原数组中取出一个元素,然后到对象中去访问这个属性,如果能访问到值,则说明重复;

Array.prototype.unique3 = function(){
 var res = [];
 var json = {};
 for(var i = 0; i < this.length; i++){
  if(!json[this[i]]){
   res.push(this[i]);
   json[this[i]] = 1;
  }
 }
 return res;
}

 

var arr = [112,112,34,‘你好‘,112,112,34,‘你好‘,‘str‘,‘str1‘];
alert(arr.unique3());

给定一个字符串数组,统计字母个数放在对象中输出(比如输入字符串为“aoihgosangaog”,输出对象{‘a‘:3,‘o‘:3,‘i‘:1,‘h‘:1,‘g‘:3,‘s‘:1,‘n‘:1}):

Array.prototype.zhao=function(){
var stat={};
for(var index in this){

var value=http://www.mamicode.com/this[index];
for(var i=0,j=value.length;i<j;i++){
var str=value.charAt(i);
if(!stat[str]){
stat[str]=1;
} else{
stat[str]++;
}
}

}
return stat;
}

 

从长度为n的数组中随机抽取m个元素,以数组形式输出,要求不能重复抽取

function zhao(arr,num){
var temp=new Array();
for(var i in arr){
temp.push(arr[i])
};
var arra=new Array();
for(var i=0;i<num;i++){
if(temp.length>0){
var ran=Math.floor(Math.random()*temp.length);
arra[i]=temp[ran];
temp.splice(ran,1);
}else{
alert("取完了")
break;
}
}
return arra;
}

 

9、不使用lwhile和for循环,创建一个长度为100的数组,并且每个元素的值等于它的下标。

http://www.cnblogs.com/mr-wuxiansheng/p/6624648.html

http://www.ccc5.cc/2085.html

10、有一个长度为100的数组,请以优雅的方式求出改数组的前10个元素之和
提示:优雅的方式是以数组自带方法,不用for或者while循环

var arr = [1,2,3,4,5,6,7,8,9,10,11,12],
r = arr.slice(0,10).reduce(function(x,y){
return x+y;
});
alert(r);

 

js题