JS基礎(chǔ)所有知識點

基礎(chǔ)復習筆記

  • JS效果三要素:

    1. 時間

    2. 事件

    3. 運動軌跡(分步驟來實現(xiàn)先死后活法逐步來)


(1)獲取元素 :

  • getElementById()----靜態(tài)方法,前面只能跟隨document
  • document.body,document.title ----頁面上只有一個的元素
  • getElementsByTagName()-----動態(tài)方法,前面可以是document也可以跟其他元素,返回的是一個類似數(shù)組的集合
    (1)有類似數(shù)組的length
    (2)有類似數(shù)組的應用方式例如:ali[0]
    (3)再用TagName的時候必須要加上[]
    (4)所謂的動態(tài)方法,是指通過js動態(tài)添加的元素,getElementsByTagName()也可以找到
    但是document.getElementById是找不到的

(2)事件:

事件:鼠標事件,鍵盤事件,系統(tǒng)事件,表單事件,自定義事件等等

  • onclick
  • onmouseover
  • onmouseleave
  • onmousedown
  • onmouseout
  • onmouseup
  • onmousemove
  • ......

添加事件

元素.onmouseover

函數(shù)

函數(shù)可以理解為方法,工具比如

function abc(){
  /*要做的事情*/
}
  • 直接調(diào)用就是abc()
  • 事件調(diào)用: 元素.事件 = 函數(shù)名
  • 匿名函數(shù)
  元素.onmouseover = function(){}
  window.alert(1);  window.alert("ok");

變量

變量就是變化的量,由數(shù)字,字母,下劃線,美元($)組成.但是開頭不能用數(shù)字。定義一個變量必須用var也可以用window["xxx"]

  • var li = document.getElementById("list");
  • var num = 123;
  • var name = "leo";

JS屬性操作(重點)

  • 屬性名
  • 屬性值
  • 屬性的讀取操作:獲取,找到
    元素.屬性名
  • 屬性的寫操作:替換,修改
    元素.屬性名 = 新的值
    添加的話需要用+=
  • innerHTML讀取元素內(nèi)所有的HTML代碼

屬性讀寫操作的注意事項

  • JS屬性中不允許出現(xiàn)"-",例如font-size改為fontSize

  • class在JS里面是保留字,在JS作用class要用className

  • 4個絕對不要判斷
    1.相對路徑(src ,href)
    2.顏色值
    3.innerHTML值也不要(IE678可能有空格)
    4.type類型也不要判斷.因為IE678下面type更改不了

  • []的使用

    1. 點"."后面的值無法修改
    2. []里面的值可以修改,JS允許把.替換成[] 例如style[attr]這樣的

條件判斷

  • if(){}

  • if(){}else{}

  • if(){}else if(){}else if(){}

數(shù)組

  • 放數(shù)據(jù)的倉庫
  • 中括號[],間隔用逗號,最后一個數(shù)據(jù)不要加逗號
  • 數(shù)組的length屬性

自定義索引和屬性

自定義屬性 abtn[0].abc = 123; //自定義屬性
自定義屬性賦值 obj.timer = setInterval(function(){},1000); //自定義屬性賦值

數(shù)據(jù)類型

6大類

  • 對象
  • undefined
  • Boolean
  • String
  • number

(1)要是基礎(chǔ)類型可以用typeOf()來判斷
字符串方法charAt(),獲取到字符串第幾個charCodeAt()獲取到UniCode編碼。然后在計算。再利用fromCharCode()換算成字符
(2)要是引用類型可以用instanceOf Array;instanceOf Object 來判斷
Number()方法能轉(zhuǎn)化字符串數(shù)字,空,空數(shù)組,要是前面有0比如00100轉(zhuǎn)化的結(jié)果就是100
parseInt()相當于把前面的數(shù)字部分轉(zhuǎn)化為數(shù)字,后面的字符直接舍棄.他轉(zhuǎn)化不了空,真要是轉(zhuǎn)化空結(jié)果就是NaN
parseFloat()同上
isNaN()判斷是不是NaN

作用域重點

  • 域:空間,范圍,區(qū)域
  • 作用:讀,寫

(1)在JS找到變量前,他要做的就是先找到一些關(guān)鍵字 var function,參數(shù)然后在正是運行代碼之前他把這些都提前付了一個值,undefined
遇到重名的只留一個
(2)逐行解讀代碼。每讀一行就是到庫里面去看看,要是有值就替換,改變表達式的值

alert(a); //彈出:function a(){alert(4);}
var a=1; //預解析中的a改為了1
alert(a);  //彈出1
function a(){alert(2);}//函數(shù)聲明,沒有改變a的值。什么也沒發(fā)生。
alert(a); //繼續(xù)彈出1,因為a在預處理庫里面的值沒有被改過。
var a=3; //預處理中a的值變?yōu)?
alert(a); //彈出3
function a(){alert(4);} //函數(shù)聲明,什么也沒有發(fā)生
alert(a); //繼續(xù)彈出3
a(); //報錯 a is not a function
第一步:
       預編譯他會先找一些關(guān)鍵字存儲到內(nèi)存中。 比如var function 參數(shù)等等
       他找到var a 先看左邊,不看右邊.上來都給他一個未定義 var a = undefined;要是function他就直接替換了
       比如上面a從undefined直接變成了方法
       他根本不考慮后面的值
第二步:
        在一步步執(zhí)行代碼
        要是遇見表達式(表達式就是 var a = xxx)他才會重新替換或者賦值

函數(shù)的作用域要區(qū)分全局變量和局部變量

在方法內(nèi)部寫var的都是局部。在方法外面的都是全局變量。要是在方法里面不加var,那他改變的就是全局的值.

特別注意的就是在JS里面只有方法有作用域。for和if里面都沒有作用域

真和假

  • 真:非0的數(shù)字,字符串,true,函數(shù),object,[],{}都是真的
  • 假:就記住6個為假其余都真 0,NaN,空字符串,null,false,undefined

函數(shù)返回值return

這里特別注意下:

 fn1();
function fn1(){
    return function(){
        alert(1);
    }
}

返回的值就是function(){alert(1)}

 fn1()();
function fn1(){
    return function(){
        alert(1);
    }
}

返回的值就是1

arguments參數(shù)合集

arguments表示所有的參數(shù)合集

lert(sum(1,2,3));
function sum(){
    var n=0;
    for(var i=0; i<arguments.length; i++){
        n += arguments[i];
    }
    return n;
}

工具類

獲取到樣式

function getStyle(obj,attr)
{
  return obj.currentStyle?obj.currentStyle[attr]:getComputedStyle(obj)[attr]
}

兼容IE678 獲取到樣式合集.獲取到元素的屬性值

運動函數(shù)
//封裝運動函數(shù)
    //既然是運動函數(shù)就需要傳遞幾個條件(參數(shù))
    // 1.對象(你得知道讓誰動吧)
    // 2.方向(你得告訴他朝哪邊走吧)
    // 3.速度 (你得告訴他一次走多少吧)
    // 4.終點(你得告訴他什么時候停止吧)
    // 5.回調(diào)函數(shù)(到達終點以后干點什么吧)
    function Imove(obj,attr,step,target,endfn)
    {
        //防止累加,越來越快。這樣一上來我都從0開始計算
        clearTimeout(obj.timer);
        //主要是判斷速度是正的還是負的,上來先比較。我的思路是要是目標的位置比初始的位置大,則速度肯定是正的,要是小則速度肯定是負的
        step =  target>parseInt(getStyle(obj,attr))? step:-step;
        obj.timer = setInterval(function(){
            var dis = parseInt(getStyle(obj,attr))+step;   //獲取到每次走了之后距離最開始的位置
            //判斷一下當走的距離要是超過了終點,則必須拉回來。要是沒超過。則繼續(xù)走.
            if(dis>=target&&step>0||dis<target&&step<0)
            {
                dis = target;
            }
            obj.style[attr] = dis+"px";   //給這個對象賦值,讓他自己慢慢走。
            if(dis==target)               //當?shù)竭_了終點了,就不讓他走了。這個時候你需要清除定時器了。因為沒用了。
            {
                clearInterval(obj.timer);   //清除定時器
                endfn&&endfn();           //執(zhí)行回調(diào)方法
            }
        },100)
    }
    //封裝運動函數(shù)結(jié)束

下面是抖動函數(shù)封裝

抖動函數(shù)封裝
function shake(obj,attr,endfn) {
        var arr = [];
        for (var i = 20; i > 0; i -= 2)
        {
            arr.push(i,-i);
        }
        arr.push(0);
        clearInterval(obj.shaker);
        var index = 0 ;
        obj.shaker = setInterval(function(){
            var speed = (parseInt(getStyle(obj,attr))+arr[index]);
            obj.style[attr] = speed +"px";
            ++index;
            if(index==arr.length)
            {
                clearInterval(obj.shaker);
                endfn&&endfn();
            }
        },10)
    }

下面是濾鏡opacity函數(shù)封裝

function doopacity(obj,step,target,endfn)
    {
      var first = getStyle(obj,"opacity")*100;  //獲取到濾鏡的初始值
       step = target>first?step:-step;    //一步走的距離是正的是負的
        clearInterval(obj.opacity);       //一上來清除定時器。防止累加
         obj.opacity = setInterval(function(){
           var speed = getStyle(obj,"opacity")*100+step;     //改變opacity
           if(speed>=target&&step>0&&speed<=target&&step<0)
           {
               speed = target;        //變成目標值
           }
           if(speed==target)
           {
               clearInterval(obj.opacity);   //要是相當則清空
               endfn&&endfn();                //執(zhí)行回調(diào)函數(shù)
           }
             obj.style["opacity"] = speed/100;   //DIV濾鏡效果
             obj.style.filter = 'alpha(opacity:' + speed + ')';  //為了兼容性
        },100)
    }

時間函數(shù)

  • getFullYear() //獲取到年份
  • getMonth() //這里特別注意的一定要+1因為他從0開始
  • getDate() //獲取到多少號
  • getDay() //獲取到星期幾,得到是一個數(shù)值,要是星期天,則得到數(shù)字0
  • getHours() //獲取到小時
  • getMinutes() //獲取到分鐘
  • getSeconds() //獲取到秒數(shù)

Date對象參數(shù)

數(shù)字形式:new Date(2014,4,1,9,48,12) //特別注意月份從0開始,所以他實際找的是5月

var iNow = new Date();
var iNew = new Date(2014, 10, 26, 21, 56, 0);  //獲取的是11月
var t = Math.floor((iNew - iNow)/1000); 
var str = Math.floor(t/86400) + '天' +  Math.floor(t%86400/3600) + '時' + Math.floor(t%86400%3600/60) + '分' +  t%60 + '秒';
  • 天: Math.floor(t/86400);
  • 時: Math.floor(t%86400/3600);
  • 分:Math.floor(t%86400%3600/60);
  • 秒:Math.floor(t%60);

時間戳

getTime();返回的就是格林威治時間1970年 1月1日0點0分0秒0毫秒到現(xiàn)在的毫秒數(shù)

字符串獲取,封裝,截取,查找,檢測

  • length 空格也算長度
  • charAt()找到子字符串,括號要是什么也不寫。默認找到第0個
  • charCodeAt()得到指定字符串的unicode編碼
  • String.fromCharCode():根據(jù)字符編碼。返回一個字符。例如:String.fromCharCode(22937);返回的就是妙字
    要是想獲取到多個,可以String.fromCharCode(22937,22938);

查找indexOf,lastIndexOf

  • indexof()返回某個字符或字符串的位置.string.indexOf('m',5)代表從str字符串中的第5位開始以后找到m的位置.
    如果要是找不到則返回-1
  • lastIndexOf()從右邊往前找,也可以帶數(shù)字參數(shù),表示從哪里找

比較類,截取類

  • substring(n,m)表示從第n截取,到第m位置結(jié)束.如果沒有m默認截取到最后一位,包前不包后.
  • slice(n,m),str.slice(0,2)與str.slice(2,0)這樣的結(jié)果完全不一樣。后者找不到結(jié)果。因為slice()方法不會判斷里面的參數(shù)大小并交換參數(shù)位置.
  • slice(-2);截取的是從最后一位到倒數(shù)第二位,-1表示的最后一位.str.slice(-4,-2);截取的是倒數(shù)第四位到倒數(shù)第二位

  • toUpperCase()轉(zhuǎn)換為大寫
  • toLowerCase()轉(zhuǎn)換為小寫
  • split()講字符串切割成數(shù)組
var str = 'www.miaov.com';
str.split('.'); => [“www”, “miaov”, “com”];
var str1 = 'leo'; 
str1.split(); => ['leo'];
str2 = ‘leo’; 
str2.split(‘’); => [“l(fā)”, “e”, “o”];
var str3 = ‘/www.miaov.com/’; 
str3.split(‘/’); => [””, “www.miaov.com”, “”];
var str4 = ‘2013-11-29-23-07’;
str4.split(‘-‘, 3); => [“2013”, “11”, “29”]
  • join方法用來把數(shù)組變成字符串
var arr = [‘a(chǎn)a’, ‘bb’, ‘cc]; 
arr.join(); => ‘a(chǎn)a,bb,cc’ .join()括號中什么也不寫,默認就是用逗號隔開。
arr.join(‘’); => ‘a(chǎn)abbcc’ ;
 arr.join(‘-‘); => ‘a(chǎn)a-bb-cc’

下面是所有的字符串操作總結(jié)

var str = '妙味課堂-WWW.miaov.com';

str.charAt(1); //味
str.charCodeAt(1); //21619
String.fromCharCode(22937, 21619); //妙味

str.indexOf('m', 3); //9
str.lastIndexOf('o'); //16

'1000' < '2' //true
'1000' > 2 //true

str.substring(0, 4); //妙味課堂
str.slice(-3); //'com'

str.toUpperCase(); //'妙味課堂-WWW.MIAOV.COM'
str.toLowerCase(); //'妙味課堂-www.miaov.com'

str.split('.', 2); //['秒微課堂-www', 'miaov']

var arr = ['www', 'miaov', 'com'];
arr.join('.'); //'www.miaov.com'

for-in 循環(huán)遍歷json因為json是個對象。沒有長度。類似鍵值對。循環(huán)的是屬性

var json4 = { 'name': 'miaov', 'age': 3, 'fun': '前端開發(fā)'};
for(var attr in json4){
    alert(attr);
    alert(json4[attr]);
}

var json5 = { 
    url: ['img/1.png', 'img/2.png'],
    text: ['圖片一', '圖片二']
};

for(var attr in json5) {
    for(var i=0; i<json5[attr].length; i++){
        alert(json5[attr][i]);
    }
}

數(shù)組

  • 可以通過修改數(shù)組的length屬性來清空數(shù)組。
  • 從后面添加數(shù)組push() arr.push()往數(shù)組最后一位加內(nèi)容..push()方法是有返回值得。返回是數(shù)組的新長度
  • 前面添加數(shù)組unshift() arr.unshift()往數(shù)組的最前面添加內(nèi)容,返回值為數(shù)組的新長度(IE6,7不支持)
  • 刪除pop() arr.pop()表示從后面刪除一個數(shù)組元素。返回值就是要刪除的數(shù)組
  • 刪除shift() arr.shift()刪除數(shù)組的第一個返回值是被扔掉的值
var arr = ['TM', '鐘毅', '張森', '杜鵬', 'Leo'];
arr.unshift(arr.pop()); //數(shù)組變?yōu)椋篬'Leo', '鐘毅', '張森', '杜鵬', 'TM']
或
arr.push(arr.shift()); //數(shù)組變?yōu)椋篬'鐘毅', '張森', '杜鵬', 'Leo', 'TM']
  • splice()方法
    splice(a,b,c) a表示起始位置,b表示個數(shù),c表示要替換的值
    b要是為0表示插入,c要是什么也不寫表示刪除。

代碼見下

var arr = ['TM', '鐘毅', '張森', '杜鵬', 'Leo'];
//刪除
//arr.splice(0, 1); //刪掉第0位,刪1個。兩個參數(shù)第一個是從第幾位開始,第二個是刪掉幾個。splice刪除的時候有返回值,返回的是被刪除的內(nèi)容
//替換
//arr.splice(0, 1, '莫濤'); //替換第0位,替換1個,替換為'莫濤'。返回的還是刪除的東西
//添加
arr.splice(1, 0, '李賢'); //在第1位那里,刪除0個,添加了一個'李賢'到了第1位,'鐘毅'就變成了arr[2]了。后面也可以添加多個。如果splice刪除了0個,那么就沒有返回值。

數(shù)組去重

var arr = [1, 2, 2, 4, 2];
for ( var i=0; i<arr.length; i++ ) {
    for ( var j = i+1; j<arr.length; j++) {
        if( arr[i]==arr[j] ){
            arr.splice( j, 1 );
            j--;
        }
    }
}
也可以使用indexOf

Sort排序

var arr = ['c', 'd', 'a', 'e'];
arr.sort(); // 'a', 'c', 'd', 'e' 按照unicode編碼排序

var arr2 = [4, 3, 5, 76, 2, 0, 8];
// arr2.sort(); // 0, 2, 3, 4, 5, 76, 8 sort默認是將數(shù)組中的每一個按照字符串來排序的,因此出現(xiàn)了76排在8前面的情況

// arr2. sort(function( a, b ){
    return a - b; //如果a-b返回正數(shù),就a、b兩個數(shù)字換個序。如果a-b是負數(shù),就不換序
}) //返回數(shù)字從小到大 0, 2, 3, 4, 5, 8, 76

// arr2. sort(function( a, b ){
    return b - a;
}) //返回數(shù)字從大到小 76,, 8, 5, 4, 3, 2, 0

隨機數(shù)

Math.round( Math.random()*80 + 20 ); //返回20~100之間的隨機整數(shù)


concat連接,表示把2個數(shù)組拼接起來

var arr1 = [1, 2, 3];
var arr2 = [4, 5, 6];
var arr3 = [7, 8, 9];

arr1.concat(arr2); //[1, 2, 3, 4, 5, 6] 新數(shù)組與原來數(shù)組沒什么關(guān)系。
arr1.concat(arr2, arr3); //[1, 2, 3, 4, 5, 6, 7, 8, 9]

reverse反轉(zhuǎn)

var arr1 = [1, 2, 3];
arr1.reverse();
alert(arr1); // [3, 2, 1]

以上JS基礎(chǔ)全部基礎(chǔ)點

對應的鏈接是:

基礎(chǔ)知識點所有效果點擊這里

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,001評論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,786評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,986評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,204評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,964評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,354評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,410評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,554評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,106評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,918評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,093評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,648評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,342評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,755評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,009評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,839評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,107評論 2 375

推薦閱讀更多精彩內(nèi)容