天天看點

前端之js基礎

前端之js基礎

1、建立變量的方式

var es3

function es3

let es6

const es6

import es6

class es6

2、資料類型

基本資料類型(值類型)

null、undefined、string、number、boolean
   null  空對象指針
      undefined  未定義
   string  字元串,用單引或或包裹起來,例如'13'
   number 數字,其中有一個特殊的數字,NaN,全稱(not a Number):不是數字的數字,例如1,2,3
   boolean 布爾值,僅存在兩種情況,true,false
           

引用資料類型

object
        普通對象
              var obj={name:"aa",age:20} 使用大括号包裹,内部包含多組鍵值對
        數組對象
              var arr=[1,2,3,4,5]  使用[]包裹,包含零到多項内容
        正則對象
            var reg=/^$/
        日期對象
         var date=new Date()

   function
   Symbol 唯一的值,es6中新增資料類型 
      var a=Symbol('a');
        var b=Symbol('b');
        console.log(a==b); //false
           

js原生輸出方法

alert 警告,alert輸出的内容為字元串,實作機制:1、将值(如果是表達式,将計算後的結果)通過toString 轉換為字元串輸出
 alert(1+1); //'2'
 promt 确認
 console.log 控制台輸出日志
 console.dir 控制台輸出詳細
 console.table 以表格方式輸出json資料
           

3、數字方法

isNaN()

作用:檢查是否不是有效數字,true 不是有效數字,false是有效數字
 
    isNaN(12); //false
    isNaN('12');//false
    isNaN(true);//false   Number(true) ->1
    isNaN(false);//false Number(false) ->0
    isNaN(null);//false  Number(null) ->0
    isNaN(undefined); true
    isNaN([12]); //false  Number([12]) ->12
    isNaN([12,23]); //true  Number([12,23]) ->NaN
    isNaN(/^$/); //true
    isNaN(function(){}); //true

 isNaN機制:
   1、如果需要檢測的值不是數字類型,浏覽器會預設将其轉換為數字類型
   2、值是數字false,不是數字true  (數字類型中隻有NaN不是有效數字,其餘都是有效數字)
           

Number()

作用:将其他類型轉換為數字類型
    
     1、字元串->數字
        如果字元串中出現任意一個非有效字元,結果為NaN
        
           Number('10');//10
           Number('10px'); //NaN
           Number(""); //0

    2、布爾值->數字
       轉換結果為0或1
           
           Number(true); // 1
           Number(false); //0

    3、其他->數字
    
          Number(null); //0
          Number(undefined);//NaN

    4、引用資料類型->數字
       引用資料類型先調用toSting 方法,轉換為字元串,在使用Number方法,轉換為數字
           
           Number({}); //({}).toString() ->'[object Object]' ->NaN
           Number([1,2,3]);  //[1,2,3].toString() -> '1,2,3'->NaN
           Number(/^$/); /(/^$/).toSting() -> '/^$/' ->NaN
           Number([]); //([]).toSting() ->""
           isNaN([]);// [].toSting() ->"" ->Number("") ->0

parseInt/parseFloat
  等同于Number,作用:将其他類型轉換為數字
  
  parseInt:将一個字元串的整數部分解析出來,遇到非有效數字,傳回NaN
  parseFloat:将一個字元串的小數部分解析出來,,遇到非有效數字,傳回NaN

       parseInt('10.5px');//10
    parseFloat('10.5px');//10.5
    parseInt("abc123"); //NaN
    
  差別:number 遇到非有效數字傳回NaN
   
NaN和任意一個數字都不相等,包括自己
  NaN == NaN  //false
           

4、boolean、null、undefined

boolean 傳回true或false
!"a";//false  "a"->true,!true->false
!!"a";.true  !!相當于沒取反
js中,隻有0,‘’,NaN,null,undefined為false,其他均為true

null 空指針對象,使用場景:手動指派null,後面會對該變量指派
undefined 未定義,使用場景:聲明變量,如果不手動指派,浏覽器會預設undefined,後面可以不指派
           

5、對象

var obj={name:"XX",age:20}

新增
    obj['a'] = '';
    obj.a  = '';
    obj[20] =20;
    obj[{}];

擷取
    obj["20"];//20
    obj['[object Object]']

删除
    delete obj.a

注:
  1、對象中的屬性名,不可以重複
  2、如果對象中沒有key,傳回undefined
  3、對象key可以存儲字元串、數字
  4、對象存儲屬性名不是字元串或數字時,會調用toString方法,然後在進行存儲
           

6、數組

數組也是對象的一種,數組中存在length 屬性,為該數組的元素長度
      [1,2,3,4,5]
下标 0 1 2 3 4  數字作為key,遞增

數組中的元素可以是任意類型的

新增

    var ary=[];
    ary['age']=20;
    ary[1]='1';
        
擷取
    ary['age'];
    ary[1];
           

7、js運作機制和不同資料類型的操作

1、當浏覽器核心/引擎渲染和解析js時,會提供一個js代碼運作的環境,這個環境稱為全局作用域(棧記憶體)
2、代碼自上而下執行(之前有一個變量提升的過程)
      基本資料類型的值存在目前作用域下
      var a=12;
      1、在記憶體中開辟一個空間(棧記憶體)存儲12
      2、在目前作用域中聲明一個變量a
      3、讓聲明的變量和存儲的12進行關聯,把存儲的12指派給a

    var a=12;
    var b=a;
    b=15;
    console.log(a);        
    基本資料類型(值類型),按值操作,把之前的值複制一份,放到新的空間,操作與之前的空間沒有關系
    
    引用資料類型的值不能直接存儲在目前作用域下,需要開辟一個新的空間,把内容存儲到這個空間内
    
    var obj={n:100}
    1、開辟一個新的空間(堆記憶體),把對象的鍵值依次存儲起來,空間擁有一個16進制的位址
    2、聲明一個變量
    3、讓變量和空間位址關聯在一起,把位址指派給變量
    
    var obj={n:100};
    var obj2 = obj;
    obj2['n']=200;
    console.log(obj['n']);
    引用類型不是按值操作,它操作的是引用位址,把原來的空間位址指派給變量,但是原來的空間沒有被克隆,這樣就會出現多個變量關聯一個空間,修改會互相影響
    
    棧記憶體:存儲基本類型的值
    堆記憶體:存儲引用類型中的資訊,對象存儲的是鍵值對,函數存儲的是字元串
           

8、操作語句

判斷
    if/else if/else
        var num=12;
        if(num >10){
            num++;
        }else{
            num--;
        }
    
    注:if條件判斷中,==判斷相當,===判斷是否全等,!=判斷是否不相等,!==判斷是否不全等
          10=='10';//true
          10==='10';//false
          1!='1';//false
          1!=='1';//true
    
    三元運算符
        var num=12;
        num>10?num++:null 
    switch
        switch(num){
            case 10:
                num++;
                break;
            case 10
                num--;
                break;
            default:
                num=0;
        }
        注:必須添加break;否則會進入下一個beak為止;
        switch case是基于===進行比較的        
        
循環
    for 
        for(var i=0;i<10;i++){
            
        }
        1、定義初始值var i=0;
        2、設定循環成立條件,條件成立循環成立,不成立則循環結束,i<10
        3、條件成立進入循環體
        4、執行步長累加            
    注:1、可根據需求,改變為倒叙或修改遞增次數
        2、循環退出使用break,continue 跳過本輪循環,進入下一輪循環,循環中break和continue 後面的代碼均不執行
    
    for in 
    while
           

9、檢測資料類型

typeof 作用:檢測基本資料類型 傳回值為”number“/"string"/"boolean"/"undefined"/"object"/"function"
注:檢測數組、正則、對象為object
    typeof(NaN);//'number'
    typeof []; //'object'
    typeof type []; //typeof 'object' ->'string'
    
constanceof
custructor
Object.prototype.toString.call()
           

10、dom

擷取元素
document.getElementById()
document.getElementsByClassName()
document.getElementByTagName() //擷取元素集合,類數組對象,key作為索引,存在length屬性,但不是數組
document.getElementsByName()

//元素對象屬性
id 存儲目前元素的id值,存儲的值為字元串
className 代表目前元素樣式類名,存儲的值為字元串
innerHtml 存儲元素中所有的内容,包含html标簽
innerText 存儲元素中所有的文本内容,不包含html标簽
onclick  點選事件
onmouseover 滑鼠滑過事件
onmouseout 滑鼠離開事件
style 存儲目前元素所有的行内樣式,樣式表中樣式無法擷取
           

11、函數

函數就是一個方法,為了實作某個功能,将多次使用的代碼塊封裝在函數中
優點:實作低耦合,高内聚,減少備援,提高代碼可複用性
使用:1、定義function fn(),
     2、調用fn()

函數執行機制:
    1、形成私有作用域(棧記憶體)
    2、把之前堆記憶體中的字元串複制一份過來,    變為真正的js代碼,在新的作用域下,自上而下執行
    3、每次調用時,都會形成一個私有作用域棧,操作同2    

function 函數名(形參){//參數作為函數的入口
    //函數體
}
fn(1);//1為實參,實參與形參對應
注:1、如果形參未接受變量,為undefined
    2、如果實參比形參多,多餘的丢棄
           

12、資料類型轉換

isNaN,當檢測的值不是數字,浏覽器會使用Number()方法,先将其轉換為數字,然後在檢測是否為非有效數字
isNaN('3px');  Number('3px')  -> NaN -> isNaN(NaN)  -> true

parseInt/parseFloat 
數學運算:+ - * /,其中+還有字元串拼接的作用
‘3’-1;   Number('3')-1 -> 3-1 ->2
'3px'-1  NaN
'3px'+1 '3px1'

var i='3';
i=i+1; ''31
i+=1; '31'
i++; 4  //純數學運算,不存在字元串拼接

判斷條件中 ==比較時,會将其他類型轉換為數字類型

轉換規律
    浏覽器調用Number方法
字元串轉數字
    隻要遇到一個非有效數字,為NaN
    '' ->0
布爾轉數字
    true ->1
    false ->0
其他轉數字
    null->0
    undefined ->NaN
引用類型轉數字
    先調用toString方法,然後在通過Number方法,将其轉換為數字

将其他類型值轉換為字元串
    情況:
        1、基于alert/comfirm/propt/document.write等方法将内容輸出時,會将字元串轉換為字元串
        2、基于+進行字元串拼接時
        3、把引用類型轉換為數字時,會先轉換為字元串,在轉換為數字
        4、給對象設定屬性名,如果不是字元串,會将其轉換為字元串,然後在當屬性存儲到對象中
        5、手動調用toString/String/toFixed/join方法
轉換機制
    調用toString 方法
        1  -> '1'
        null -> 'null'
        NaN -> 'NaN'
        [] -> ''
        [13] - >'13'
        [12,13] ->'12,23'
    
    對象
        {name:'',age:20}  -> '[object Object]'
        {}  -> '[object Object]'

将其他類型值轉換為布爾
    情況:
            1、基于!/!!/Boolean方法轉換
            2、條件判斷中的條件會轉換為布類型
            
    轉換規律
        隻有‘0/''/NaN/null/undefined’ 為false,其餘為true

特殊情況:數學運算和字元串拼接+
    規律:出現字元串為拼接,否則就是數學運算
        1+true  ->2  數學運算
        '1'+true -> '1true'  字元串拼接
        [12]+10  -> '1210'  //引用類型轉換為數字,會先轉換為字元串,是以結果為字元串拼接
        ({})+10  -> '[object Object]10'
        []+10 -> '10'
        
        {}+10 ->10  //{}為代碼塊,加什麼就會得到什麼
        {}+[] ->0  
        {}+true ->1
        {}+{} ->'[obect Object][object Object]'
        function fn(){}+10  -> function fn(){};   ->10
                                        +10  
特殊情況
    ‘==’比較時,如果兩邊不是相同類型,則先轉換為相同類型,在進行比較
        規律:不用情況的比較,則先把其他值轉換為數字,在進行比較
        對象 == 對象,引用類型,位址不相同,則不相等
        對象 ==數字,把對象轉換為數字,然後在比較
        對象 == 布爾,把對象轉換為數字,布爾也轉換為數字,在進行比較
        對象 == 字元串,把對象轉為數字,把字元串也轉換為數字,在進行比較
        字元串 == 數字,把字元串轉換為數字
        布爾 == 數字,把布爾值轉換為數字    

特殊記憶    
    null ==undefined  //true
    null ===undefined //false
    null、undefine和其他值都不相等
    
    NaN == NaN  //false NaN和誰都不想等,包括自己    
    
    1==true; //tue
    1== false; //false
    2==true; //false  因為true 是1

 
   []==true; //都轉換為數字  0 ==1 ->false.
   ![]==true;  //false ==true  ->false
   
   []==false  //0==0  都轉換為數字   ->true  
   ![]==false; //先算![],把數組轉換為布爾值,取反->false,false ==false   ->true 
           

13、數組方法 - 增删改

常用方法:
    push
        作用:向數組尾部添加元素
        參數:添加的内容,可以是多個
        傳回值:新增後數組的長度,原有數組改變
        
        var arr=[1,2,3];
        arr.push(4);//4
        console.log(arr); //[1,2,3,4]
    
    pop
        作用:删除數組最後一項
        參數:無
        傳回值:被删除那一項的内容
        
        var arr=[1,2,3];
        arr.pop();//3
        console.log(arr);//[1,2]
    
    shift
        作用:删除數組第一項
        參數:無
        傳回值:被删除那一項的内容
        
        var arr=[1,2,3];
        arr.shift();//1
        console.log(arr);//[2,3]
        
    unshift
        作用:向數組頭部添加元素
        參數:添加的内容,可以是多個
        傳回值:新增後數組的長度,原有數組改變
        
        var arr=[1,2,3];
        arr.unshift(0);//4
        console.log(arr); //[0,1,2,3]
        
    splice
        作用:删除指定位置的内容
        參數:arr.spice(n,m),從n項開始,删除m個,m省略,則删除到末尾
        傳回值:傳回新數組,原有數組改變
        
        var arr=[1,2,3,4,5];
        arr.splice(1,2);//[2,3]
        console.log(arr);//[1,4,5]

        var arr=[1,2,3,4,5];
        arr.splice(1);//[2,3,4,5]
        console.log(arr);//[1]
                        
        作用:修改指定位置的内容
        參數:arr.spice(n,m,,x,...),把原有的删除,替換成新的内容
        傳回值:傳回新數組,原有數組改變
        
        var arr=[1,2,3,4,5];
        arr.splice(1,2,4);//[2,3]
        console.log(arr);//[1,4,4,5]
        
        作用:新增指定位置的内容
        參數:arr.spice(n,0,m),從n開始删除零個,将m或更多的内容放到n前面
        傳回值:傳回空數組,原有數組改變
        
        var arr=[1,2,3,4,5];
        arr.splice(1,0,4);//[]
        console.log(arr);//[1,4,2,3,4,5]
        
        思考:删除數組中最後一個的方法有哪些
                var arr=[1,2,3,4,5];
                1、arr.pop()
                2、arr.length--
                3、arr.splice(arr.lenth-1);        
            
            數組末尾添加一項的方法有哪些
                var arr=[1,2,3,4,5];
                1、arr.push(6);
                2、arr.splice(arr.length,0,6);
                3、arr[arr.length]=6;
                
    slice
        作用:截取,原數組不改變
        參數:n,m 從n到m,不包含m,
                  m省略,則截取到最後,
                  n為0或不寫參數,則将數組克隆
                  支援負數下标,規則:數組總長度+負數索引
        傳回值:将截取出的值以新數組方式傳回
            
        var arr=[1,2,3,4,5];
        arr.slice(1,3);//[2,3]
        arr.slice(0);//[1,2,3,4,5]
        arr.slice(-3,-1);//[3,4]
        console.log(arr);//[1,2,3,4,5]
            
    concat
        作用:實作多個數組或值的拼接
        參數:數組或多個值    
        傳回值:拼接後的新數組,原有數組不變
        
        var arr=[1,2,3];
        arr.concat([4,5]);//[1,2,3,4,5]
        console.log(arr);//[1,2,3];
        
    toString    
        作用:将數組轉換為字元串
        參數:無
        傳回值:數組中的每一項以逗号分隔,原有數組不變

        var arr=[1,2,3];
        arr.toString();//'1,2,3'
        console.log(arr);//[1,2,3]

    join
        作用:以指定的連接配接符,将數組轉換為字元串
        參數:指定的連接配接符
        傳回值:字元串,原有數組不變

        var arr=[1,2,3];
        arr.join('+');//'1+2+3'
        eveal(arr.join('+'));//6
        console.log(arr);//[1,2,3]

    sort
        作用:數組反排序
        參數:無/函數
        傳回值:排序後的新數組,原有數組改變
        
        var arr=[12,34,23,56,45];
        arr.sort();//[12, 23, 34, 45, 56]
        console.log(arr);//[12, 23, 34, 45, 56]
        
        var ary=[18,1,23,27,2,35,3,56];
        ary.sort();//[1,18,2,23,27,3,35,56]
        ary.sort(function(a,b){
            return a-b;//a-b升序,b-a 降序
        })    
        
    reverse
        作用:數組反轉
        參數:無
        傳回值:改變順序的新數組,原有數組改變
        
        var arr=[1,2,3];
        arr.reverse();//[3,2,1]
        console.log(arr);//[3,2,1]
        
        
    indexOf
        作用:查找目前值在數組中出現第一次的下标
        參數:需要檢測的值
        傳回值:位置下标,沒有找到傳回-1
        
        var arr=[1,2,3,4,5];
        arr.indexOf(2);//1
        
    lastIndexOf
        作用:檢測目前值在數組中出現最後一次的下标
        參數:需要檢測的值
        傳回值:位置下标,沒有找到傳回-1
           

14、數組去重

1、利用雙層循環,目前項和後面每一項進行比較,如果相同則删除
         var arr=[3,2,3,2,2];
         for(var i=0;i<arr.length;i++){
             var item =arr[i];
             for(var j=i+1;j<arr.length;j++){
                 if(item == arr[j]){
                     arr.splice(j,1);
                     j--;
                 }
             }
         }
         console.log(arr);

    2、利用對象key不能重複
         var arr=[3,2,3,2,2];
         var obj={};
         for(var i=0;i<arr.length;i++){
            var item = arr[i];
            if(typeof obj[item] !== 'undefined'){
                arr[i] = arr[arr.length-1];
                arr.length--;
                i--;
            }else{
                obj[item] = item;
            }
         }
         console.log(arr);
           

15、字元串常用方法

補:字元串存在length屬性,字元串按值操作,不像數組按照空間位址操作,是以字元串是不變的
    
    charAt
        作用:charAt根據索引擷取指定位置的字元
        參數:索引
        傳回:指定位置的字元
        
        var str="abcdefg";
        str.charAt(0);//a
        str[0];//a
        str[100];//undefined
        str.charAt(100);//''沒有指定索引位置的字元,傳回空字元串        
        
    charCodeAt
        作用:擷取字元對應的unicode 編碼值(ASC II)
        參數:索引
        傳回:字元對應的編碼
        
        var str="abcdefg";
        str.charAt(0);//97
    
    substr
        作用:字元串截取
        參數:n,m 從n開始,截取m個
                  m可省略,則從n到最後
                  n,m省略,則為字元串克隆
                  n支援負數下标
        傳回值:以新字元串方式傳回
        
        var str='abcdefg';
        str.substr(0,2);//'ab'
        str.substr(0);//'abcdefg';
        str.substr(-2,2);‘fg’

        
    substring
        作用:和slice一樣,差別:不支援負數下标
        參數:n,m 從n開始到m處,不包含m
                  m可省略,則從n到最後
                  n,m省略,則為字元串克隆
        傳回值:以新字元串方式傳回
        
        var str='str';
        str.substring(0,2);//'st'
        str.substring(0);//'str'
        str.substring(-2,-1);//''
        
    slice
        作用:擷取字元在字元串中第一次出現的位置索引,
        參數:n,m 從n開始到m處,不包含m
                  m可省略,則從n到最後
                  n,m省略,則為字元串克隆
                  支援負數下标
        傳回值:以新字元串方式傳回
        
        var str='str';
        str.slice(0,2);//'st'
        str.slice(0);//'str'
        str.slice(-2,-1);//'t'

    indexOf
        作用:擷取字元在字元串中第一次出現的位置索引,
        參數:指定字元
        傳回值:下标,包含大于0,不包含傳回-1
        
        var str='abcdefg';
        str.indexOf('a');//0
        
    lastIndexOf
        作用:擷取字元在字元串中最後一次出現的位置索引,
        參數:指定字元
        傳回值:下标,包含大于0,不包含傳回-1
        
        var str='abcdefga';
        str.lastIndexOf('a');//7

    toUpperCase
        作用:轉為大寫
        
    toLowerCase
        作用:轉為小寫
    
    split
        作用:根據指定字元串,拆分為數組的每一項
        var str="1,2,3,4,5";
        str.split(',');//[1,2,3,4,5]
    
    replace
        作用:替換字元串中原有字元
        參數:新字元
        傳回:替換後的新字元
        
        var stt='abcdefg';
        str.replace('ab','12');'12cdefg'
           

16、Math方法

abs 絕對值
ceil 向上取整
floor 向下取整
round 四舍五入
max 最大值
min 最小值
sqrt 開平方
pow 幂次方
Pi 圓周率
random 随機數(0,1)

求1-10之間的随機整數
Math.round(Marh.random()*(10-1)+1);  
求n-m之間的随機數
Math.round(Math.random()*(m-n)+n)           

來源:CSDN

原文:

https://blog.csdn.net/qq_36251118/article/details/90737882

版權聲明:本文為部落客原創文章,轉載請附上博文連結!

繼續閱讀