js基礎中容易被遺忘的細節

    學習js基礎常常容易忽略的細節,這些細節在面試中遇到往往是致命的。對於應屆生來,最大的挑戰就是基礎不牢,很多技術一旦用起來就會出現很多疑惑
    javascript的概念:
        JavaScript 是一種輕量級的腳本語言。所謂“腳本語言”(script language),
        指的是它不具備開發操作系統的能力,而是隻用來編寫控制其他大型應用程序
        (比如瀏覽器)的“腳本”。
        
    瀏覽執行Js代碼
        瀏覽器內核分成兩部分:
            渲染引擎:
                解析HTML與CSS,比如chrome瀏覽器的blink,老版本的webkit
            js引擎:
                瀏覽器本身不會執行js代碼,而是通過內置javascript引擎(解釋器)來js代碼
                js引擎會逐行解釋執行
        由於js引擎越來越獨立,內核就傾向於只指渲染引擎,負責請求網絡頁面資源加以解析排版並呈現給用戶
        
    學習javascript三步走
        ECMAScript:
            javascript的基本語法,別名javascript或Jscript(Javascript的基礎語法與核心知識)
        DOM:
            頁面文檔對象類型
        BOM:
            瀏覽器對象模型,通過BOM可以操作瀏覽器窗口,如彈出框、控制瀏覽器的頁面跳轉,獲取分辨率等
            
    js代碼書寫的位置
        行內:
            <button οnclick="meythods()"></button>
        內嵌:
            <script>js代碼</script>
        外部引用:
            <script src="外部js文件的url"></script>
            
    js註釋:
        多行註釋:/* 註釋內容 */
        單行註釋://註釋內容
        
    數據類型:
        JavaScript 的數據類型共有六種。(ES6 又新增了第七種 Symbol 類型的值)
            數值(number):
                整數和小數(比如1和3.14)
                Number.MAX_VALUE最大值    Infinity無窮大,大於任何數據
                Number.MIN_VALUE最小值    -Infinity無窮小,小於任何數據
            字符串(string):
                文本(比如Hello World),'字符串(推薦使用單引號)',屬性length,字符串長度。
            布爾值(boolean):
                表示真僞的兩個特殊值,即true(真)和false(假);默認爲false
                常考細節注意:
                    boolean類型的值參與加法運算時會先將true轉換爲1,false轉換爲0,在進行加法值運算
                    var flag1=true;
                    var flag2=false;
                    console.log(flag1+1);  //true轉換爲數值1,輸出2
                    console.log(flag2+1);  //false轉換爲0,輸出1
                    
                    console.log(1||2);    //輸出1
                    console.log(1&&2);    //輸出2
                    
                    console.log(([])?true:false); //相當於(true)?true:false
                    console.log([]==false?true:false); //相當於0==0?true:false
                    console.log(({}==false)?true:false); //相當於(NaN==0)?true:false;
                    注意:
                    當比較運算涉及類型轉換時 (i.e., non–strict comparison), JavaScript會按以下規則對字符串,數字,布爾或對象類型的操作數進行操作:
                        1.當比較數字和字符串時,字符串會轉換成數字值。 JavaScript 嘗試將數字字面量轉換爲數字類型的值。 首先, 一個數學上的值會從數字
                    字面量中衍生出來,然後這個值將被轉爲一個最接近的Number類型的值。
                        2.如果其中一個操作數爲布爾類型,那麼布爾操作數如果爲true,那麼會轉換爲1,如果爲false,會轉換爲整數0,即0。
                        3.如果一個對象與數字或字符串相比較,JavaScript會嘗試返回對象的默認值。操作符會嘗試通過方法valueOf和toString將對象轉換爲其原
                    始值(一個字符串或數字類型的值)。如果嘗試轉換失敗,會產生一個運行時錯誤。
                        4.注意:當且僅當與原始值比較時,對象會被轉換爲原始值。當兩個操作數均爲對象時,它們作爲對象進行比較,僅當它們引用相同對象時返回true。
                        5.如果一個對象與數字或字符串相比較,JavaScript會嘗試返回對象的默認值。操作符會嘗試通過方法valueOf和toString將對象轉換爲其原
                    始值(一個字符串或數字類型的值)。所以[].valueOf().toString()爲""
                    
            undefined:
                表示“未定義”或不存在,即由於目前沒有定義,所以此處暫時沒有任何值
                例:
                    var a=undefined;
                    console.log(a+"pink");// 輸出undefinedpink字符串拼接
                注意:
                    undefined與數字相加,最後結果爲NaN

                    console.log(undefined+1);  //輸出NaN
            null:
                表示空值,即此處的值爲空。
                例:
                    var space=null;
                    console.log(space+"pink"); //輸出nullpink字符串拼接
                    console.log(space+1);//輸出1
                注意:null與任何數字相加結果都爲原相加的數字
                    undefined==null        =>輸出true
                    undefined===null    =>輸出false
            對象(object):各種值組成的集合。
                狹義的對象(object)
                數組(array)
                函數(function)
                
    typeof類型判斷
        typeof 1;                "number"
        typeof "";                "string"
        typeof true;            "boolean"
        typeof undefined;        "undefined"
        typeof null;            "object"
        typeof [];                "object"
        typeof {};              "object"
        
    數據類型轉換
        數字類型轉字符串類型的三種方法:
            1.變量.toString();
            2.var num=String(變量);
            3.變量+"字符串";
        
        字符串類型轉數字類型的三種方法:
            1.轉爲整數:
                parseInt(字符串變量);字符串變量內容不能以字母開頭,否則輸出NaN
                以數字開頭,則會連續讀到小數點前一位非字母字符,轉換爲整數
                例:
                    var num=parseInt("123.2356fgdgf");
                    console.log(num);  //輸出123
                    var num=parseInt("dsd123456");
                    console.log(num); //輸出NaN
              轉爲小數
                parseFloat(字符串變量);字符串變量內容不能以字母開頭,否則輸出NaN
                例:
                    var num=parseInt("123.2356fgdgf");
                    console.log(num);  //輸出123.2356
                    var num=parseInt("dsd123456");
                    console.log(num); //輸出NaN
                    var num=parseInt("123m.456");
                    console.log(num); //輸出123
            2.利用Number(字符串變量)
                例:
                    var num=Number("123gf");
                    console.log(num); //輸出123
                    var num=Number("ds123");
                    console.log(num); //
            3.利用運算符(-/*%)隱式轉換
                例:
                    "dfds123"-5        NaN
                    "1234fd"-5        NaN
                    "123"-5            118
        
        其它數據類型轉換爲布爾類型
            代表空、否定的值都會轉換爲false,如:''、0、NaN、null、undefined,其餘的都轉換爲true
            例:
                Boolean('');         //false
                Boolean(0);              //false
                Boolean(NaN);        //false
                Boolean(null);        //false
                Boolean(undefined);    //false
                Boolean([]);        //false
                Boolean({});        //false
                
    運算符
        算術運算符
        不能直接判斷兩是否相等
        例:
            0.1+0.2==0.3   //false
            0.07*100==7;   //false
        比較運算符:
            === 嚴格相等,要求兩側的變量數據類型和值都要完全一致
            ==  兩變量值相同即可,對象比較內存地址
            例:
                18==="18"  //false   比較值與類型是否相同
                18=="18"   //true     比較值是否相同
        
        邏輯運算符
            邏輯與短路運算
                例:
                    console.log(1&&2);  //輸出2
                    console.log(1&&0);  //輸出0
                    console.log(0&&1);  //輸出0
                    如果表達式1爲真,則返回表達式2,如果表達式1爲假,則返回表達式1
            邏輯或短路運算
                例:
                    console.log(1||2);  //輸出1
                    console.log(1||0);  //輸出1
                    console.log(0||1);  //輸出1
                    console.log(0||0);  //輸出0
        運算符的優先級:
            小括號()>一元運算符(++、--、!)>算術運算符(+-*/%)>比較運算符(==、===、!=、!==、>、<、>=、<=)>邏輯運算符(&&、||)>賦值運算符(=)
            
    條件分支語句:
        判斷字符串是否爲空的條件:
            str=="" || str.length==0
    
    三元表達式(常用於替換if-else語句)
        條件表達式?表達式1:表達式2
    
    switch語句與if-else語句的應用場景
        1.有範圍判斷條件優先用if-else語句
          有確定值,優先用switch,效率高
         2.分支少,用if-else語句
           分支多,用switch語句
    
   
   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章