js的一些基础知识

1、有这样一个URL:http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e,请写一段JS程序提取URL中的各个GET参数(参数名和参数个数不确定),将其按key-value形式返回到一个json结构中,如{a:’1′, b:’2′, c:”, d:’xxx’, e:undefined}。

主要考察字符串的split()的方法:把一个字符串分割成字符串数组。

  • 语法:stringObject.split(separtor,howmany)
    separtor:必需,字符串或正则表达式,从该参数指定的地方分割 stringObject。
    howmany:可选。该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。
  • 返回值:一个字符串数组。
    该数组是通过在 separator 指定的边界处将字符串 stringObject 分割成子串创建的。返回的数组中的字串不包括 separator 自身。
  • 注意:如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符之间都会被分割。
代码.png
运行以后.png
2、看下面代码,给出输出结果
for(var i=1;i<=3;i++){
    setTimeout(function(){
        console.log(i)
    },0)
};

答案:4 4 4

原因:setTimeout会在js引擎空闲的时候再执行,JavaScript事件处理器在线程空闲之前不会运行。

如何让上述代码输出1 2 3?
for(var i=1;i<=3;i++){
    //改成立即执行函数
    setTimeout((function(a){
        console.log(a);
    })(i),0);
};

答案:1 2 3
3、数组去重

var arr=[1,2,3,1,3,2,3,5,6,5]

  • 第一种方法(for循环的方法)
var result=[];
for(var i=0;i<arr.length;i++){
    var flag=true;
    for(var j=i;j<arr.length;j++){
        if(arr[i]==arr[j+1]){
            flag=false;
            break;
        }
    }
    if(flag){
        result.push(arr[i]);
    }
}
console.log(result);
  • 第二种方法(对象的方法)
var arr1=[];
var obj={};
for(var i=0;i<arr.length;i++){
    if(!obj[arr[i]]){
        arr1.push(arr[i]);
        obj[arr[i]]=1;
    }
}
console.log(arr1);
  • 第三种方法(用indexOf())
var arr2=[];
for(var i=0;i<arr.length;i++){
    if(arr2.indexOf(arr[i])===-1){
        arr2.push(arr[i]);
    }
}
console.log(arr2);
  • 第四种方法(es6的Set数据结构)
let s = new Set(arr);
console.log(s);
4、去除字符串两头的空格

var str=" Hello World "

  • 方法一(for循环)
//去掉头部空格
var str1;
for(var i=0;i<str.length;i++){
    if(str[i]!=" "){
        str1=str.substring(i);
        break;
    }
}
//去掉尾部空格
var str2;
for(var j=str1.length-1;j>=0;j--){
    if(str1[j]!=" "){
        str2=str1.substring(0,j+1); 
        //提取字符串substring(0,j+1)  [)左闭右开;第一个参数是开始位置,第二个参数是结束位置
    }
}
  • 方法二(RegExp正则表达式)
var p=/^\s+|\s+$/g;
var s=str.replace(p,"");
console.log(s);
  • 方法三(jquery)
    需要先引入jquery库
var str1=$.trim(str);
console.log(str1);
5、倒计时

距离2018年还有多少天

  • 第一种做法
<body>
    <div id="time"></div>
    <script type="text/javascript">
        var time=document.getElementById("time");
        function clock(){
            var targetDate= new Date(2018,0,1);
            var currentDate= new Date();
            var remainTime=targetDate-currentDate;
            //天数
            remainDay=parseInt(remainTime/1000/60/60/24);
            //小时
            remainHours=parseInt(remainTime/1000/60/60%24);
            //分钟
            remainMinutes=parseInt(remainTime/1000/60%60);
            //秒
            remainSecond=parseInt(remainTime/1000%60);
            time.innerHTML=remainDay+"天"+remainHours+"小时"+remainMinutes+"分钟"+remainSecond+"秒"
            setTimeout(clock,1000);
        }
        clock();
    </script>
</body>
  • 第二种做法
<body>
    <div id="box"></div>
    <script type="text/javascript">
        var box=document.getElementById("box");
        var t=null
        function clock(time){
            var targetDate=new Date(time);
            var nowDate=new Date();
            var remainDate= targetDate-nowDate;
            if(remainDate<0){
                clearInterval(t);
            }
            //天数
            var remainDay=parseInt(remainDate/1000/60/60/24);
            //小时
            var remainHours=parseInt(remainDate/1000/60/60%24);
            //分钟
            var remainMinute=parseInt(remainDate/1000/60%60);
            //秒数
            var remainSecond=parseInt(remainDate/1000%60);
            box.innerHTML=remainDay+"天"+remainHours+"小时"+remainMinute+"分钟"+remainSecond+"秒"         
        }
        clock("2018/1/1");
        t=setInterval(clock,1000,"2018/1/1");   
        //定时器后面可以传值 
    </script>
</body>
  • 第三种做法
<body>
<ul>
  <li id="time_d"></li>
  <li id="time_h"></li>
  <li id="time_m"></li>
  <li id="time_s"></li>
</ul>
<script src="lib/js/jquery-1.11.1.js"></script>     
<script type="text/javascript">
    $(function(){ 
        showTime();
    }); 
    function showTime(){
        var time_start=new Date().getTime();//获取当前时间
        var time_end=new Date("2018/10/1  00:00:00").getTime();//设置过去的时间
        // 计算时间差 
        var time_distance = time_end - time_start; 
        // 天
        var int_day = Math.floor(time_distance/86400000) 
        time_distance -= int_day * 86400000; 
        // 时
        var int_hour = Math.floor(time_distance/3600000) 
        time_distance -= int_hour * 3600000; 
        // 分
        var int_minute = Math.floor(time_distance/60000) 
        time_distance -= int_minute * 60000; 
        // 秒 
        var int_second = Math.floor(time_distance/1000) 
        // 时分秒为单数时、前面加零 
        if(int_day < 10){ 
            int_day = "0" + int_day; 
        } 
        if(int_hour < 10){ 
            int_hour = "0" + int_hour; 
        } 
        if(int_minute < 10){ 
            int_minute = "0" + int_minute; 
        } 
        if(int_second < 10){
            int_second = "0" + int_second; 
        } 
        // 显示时间 
        $("#time_d").html(int_day); 
        $("#time_h").html(int_hour); 
        $("#time_m").html(int_minute); 
        $("#time_s").html(int_second); 
        // 设置定时器
        setTimeout("showTime()",1000); 
    }
</script>
</body>
6、cookies、sessionStorage与localStorage的区别

(1)cookie在浏览器和服务器间来回传递,而sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。
(2)存储大小限制也不同,cookie数据不能超过4k,sessionStorage和localStorage 可以达到5M或更大。
(3)数据有效期不同,sessionStorage:仅在当前浏览器窗口关闭前有效,localStorage:始终有效,窗口或浏览器关闭也一直保存,cookie只在设置的cookie过期时间之前一直有效
(4)作用域不同,sessionStorage不在不同的浏览器窗口中共享,即使是同一个页面;localStorage 在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,219评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,363评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,933评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,020评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,400评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,640评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,896评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,597评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,327评论 1 244
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,581评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,072评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,399评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,054评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,849评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,672评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,585评论 2 270

推荐阅读更多精彩内容