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=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);