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閱讀 230,002評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,400評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,136評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,714評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,452評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,818評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,812評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,997評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,552評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,292評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,510評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,035評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,721評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,121評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,429評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,235評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,480評論 2 379

推薦閱讀更多精彩內容