zoukankan      html  css  js  c++  java
  • 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=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);

  • 相关阅读:
    数据结构与算法之二叉树的遍历
    数据结构与算法之二叉树
    数据结构与算法之单调栈
    数据结构与算法之栈
    C里面的变长参数
    C++模板问题之多出的static
    通过返回值'重载'函数
    flask小记
    ANSI C
    Python坑
  • 原文地址:https://www.cnblogs.com/Mrkaikai/p/6689432.html
Copyright © 2011-2022 走看看