js

javascript 是一門弱類型,動態(tài)腳本語言(所有變量通過var聲明,不需要用int char....).它的出現(xiàn)主要是為了操作DOM節(jié)點.

主要制作web動態(tài)效果,前后臺的數(shù)據(jù)交互(通過jsonp ajax從后臺拿數(shù)據(jù),jsonp是利用script的跨域能力).

優(yōu)點:閉包,對象/數(shù)組字面量(不需要像其他語言一樣new出來,可以直接使用字面量),原型,函數(shù)是第一類[一等公民][意思是,函數(shù)也是值,可以當作另一個函數(shù)的參數(shù)]

1.javascript 三大組成部分 core DOM BOM

core ECMAScript 是javascript語言的標準, javascript是該標準的具體實現(xiàn).(ActionScipt/TypeScript/javascript) .現(xiàn)在是第六版ES6 2015定稿,IE10,9還不支持

babel 將EC6的語法代碼轉換成ES5的代碼

這門語言的語法(語句(分號結束之前的那一句),表達式,分號,注釋),數(shù)據(jù)類型,變量,函數(shù),對象,數(shù)組

語句:if(true) {

? ? ? ? ? ? ? var a = "A";

}else {

? ? ? ? ? ? ? var a = "B";

}

表達式:[求值]

var a = (true) ? "A" : "B";

function say(a) {

? ? ? ? ? ? ? conslole.log(a)

}

say((true)? "A" :"B")

關鍵字[for/while/do..while/switch/if/else]

return/break/continue

return 返回值,只能使用在函數(shù)內(nèi)部,return之后的語句不再執(zhí)行

break 跳出最近循環(huán) for/while/do..while/switch]

continue 跳出當此循環(huán)for/while/do..while]

變量

只有在函數(shù)內(nèi)部通過var定義的變量才是局部變量,js在EC6之前只有函數(shù)級作用域

let 使js擁有塊級作用域,塊級for,if/else/while...大括號內(nèi)

標識符[變量/函數(shù)的命名]的命名:

a.不能以數(shù)字開頭,只能使用字母,下劃線,$開頭? b.中間不能有空格,區(qū)分大小寫 c.不能使用關鍵字,保留字 d.不要使用name/top...命名? e.駝峰式命名,

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

基本數(shù)據(jù)類型(原始類型):Number(不區(qū)分浮點型,整型) String? Null Undefined Boolean Symbol[es6新增](生成唯一的值).基本數(shù)據(jù)類型原始值,按值傳遞

除了基本數(shù)據(jù)類型之外都是對象 .包括{} [] 正則 函數(shù).

復合數(shù)據(jù)類型 對象/數(shù)組,按引用傳遞

運算符

算術運算符 + - * / %

邏輯運算符 && || != (短路操作,會將操作數(shù)轉換成布爾值) var a = document.documentElement.scrollTop || document.body.scrollTop;

哪些值會轉換成false ""/undifiend/0/null/NaN為false. 注意:NaN === NaN ,{}==={}都是false

三目運算符:(confition)?ca:c2? typeof("") 二進制的左移右移 1 << 4 , 1 >> 2

全局函數(shù)

setInterval()

setTimeout()

parseInt()

parseFloat()

內(nèi)置的對象

Math Math.PI 是屬性/Math.random() 是0-1之間的隨機小數(shù)? //提供math相關屬性及方法

Date 提供日期時間,獲取年月日,時分秒

JSON(ES5之后新增) JSON.parse(strJson) 解析字符串,返回對象

JSON.stringify(obj) parse逆操作 將對象轉換成JSON格式的字符串

RegExp 當正則是動態(tài)的,不確定的,包含變量的,使用構造函數(shù)的方式創(chuàng)建正則

函數(shù),某個功能的代碼片段

函數(shù),變量都會提升[hosting]

1.具名函數(shù)

函數(shù)的聲明 function fn(){}

函數(shù)的表達式 var foo =? function(){} 調(diào)用必須在聲明表達式之后

2.匿名函數(shù)

setTimeout(function(){})

立即執(zhí)行函數(shù)[IIFE]

function(){}() 此處報錯,原因是js引擎將該語言當成是函數(shù)的聲明

(function(){}()) 將函數(shù)當成是表達式執(zhí)行

(function(){})()

js程序的執(zhí)行

a.首先進入全局執(zhí)行環(huán)境,js引擎將變量跟函數(shù)提升 ,入棧

b.當某個函數(shù)執(zhí)行時,進入該函數(shù)的執(zhí)行環(huán)境,局部變量跟局部函數(shù)提升,入棧

c.該函數(shù)內(nèi)部存在函數(shù)執(zhí)行時,重復b步驟,入棧

d.函數(shù)執(zhí)行完,出桟

變量先從自身作用域找,找不到沿著作用域鏈往上找,直到window全局作用域

函數(shù)默認返回值,undefiend.(用來求值的需要有返回值 return)求和 求絕對值....

對象/數(shù)組

對象:鍵值對[屬性]的集合,當屬性為函數(shù)的時候,稱為方法

對象屬性的訪問方式:a.點訪問法 b.中括號訪問法(有非法標識符(空格..)時使用或者屬性是變量的時候)[]

var.obj = {}

obj.name = "shafee" 添加屬性

delete obj.name 去掉屬性

遍歷一個對象

var o = {a:1,b:2,c:3}

for(var i in o){

? ? ? ? ? ? ? ?console.log(i,o[i])

}

result:

a 1

b 2

c 3

數(shù)組: 值的有序集合

數(shù)組中的元素通過下標訪問,下標從0開始

var arr = [1,2,3]; 定義數(shù)組

arr.length 數(shù)組的長度,可讀可寫

清空數(shù)組 arr = []; arr.length = 0;

數(shù)組的方法:

arr.push()

arr.pop()

arr.unshift()

arr.shift()

arr.slice(startIndex,endIndex) 復制

arr.splice(startIndex,deleteCount,arg1,arg2...) 剪切

arr.sort()? 排序

arr.indexOf() 查找數(shù)組是否存在某一個元素

arr.join()? ? 將數(shù)組轉換成字符串

arr.forEach(function(key,index,array){console.log(key,index)}) 遍歷數(shù)組

aar.map() 返回跟原數(shù)組一樣長度的數(shù)組

arr.filter() 篩選數(shù)組元素

arr.every() 判斷數(shù)組中是否每個元素都滿足條件.返回布爾值

arr.some() 判斷數(shù)組中是否至少有一個元素都滿足條件,返回布爾值

字符串方法:

str.indexOf(“a”)? 返回”a”在字符串中的開始下標

str.toUpperCase() 返回大寫字符

str.toLowerCase() 返回小寫字符

str.substring(start, end) 截取字符串

str.trim()? ? 去掉首尾空格

str.replace()? 替換字符串

str.match()? ? 匹配字符串

str.search()? ? 搜索字符串

str.split()? ? 字符串轉換成數(shù)組

2.DOM [document object model]

操作[獲取/新增/刪除/替換]文檔中的節(jié)點[元素節(jié)點,文本節(jié)點,屬性節(jié)點]

獲取元素接口:

?document.getElementById()

document.getElementsByTagName()

document.querySelector(selector)

document.querySelectorAll(selector)

創(chuàng)建元素:

document.createElement("div")

插入元素:

document.body.appendChild(newEle);

document.body.insertBefore(childNode,newEle);

復制元素:

ele.cloneNode(bol)

替換元素:

parentNode.replaceChild(newChild,targetChild)

移除元素:

ele.remove()

ele.parentNode.removeChild(ele)

屬性操作:

獲取屬性: ele.getAttribute(name)

設置屬性: ele.setAttribute(name,value)

移除屬性: ele.removeAttribute(name)

文本操作:

一般元素: ele.innerHTML = ""

表單元素: input.value = "username"

DOM樹,理清元素間的關系

兄弟元素 ele.previousElementSibling / ele.nextElementSibling

父元素? ele.parentNode / ele.parentElement

子元素 ele.children

3.BOM? browser object model 瀏覽器對象模型

location

location.)

location.reload()? 刷新

location.search

history

history.go(1)? ? history.forward()

history.back(-1) history.back()

navigator.userAgent 用戶代理,判斷用戶使用的瀏覽器種類和設備

4.js動畫

使用計時器, setInterval/setTimeout

請求動畫楨: requestAnimationFrame

DOM動畫,改變元素的某個css屬性[width/height/left/top/opacity],通過元素的變化

5.事件流

捕獲/事件目標/冒泡

事件的綁定:? on+type綁定方式 addEventListener(type,handle,false)

解綁: ? ? ? ele.onclick = null; ele.removeElementListener(type,handle,false)

取消冒泡:? ? cancelBubble = true? ? e.stopPropagation()

阻止默認事件? return false ? ? e.preventDefault();

對應的事件

鼠標事件:click/dblclick/mousemove/mousedown/mouseup/mouseover/mouseout/mouseenter[不冒泡]/mouseleave[不冒泡]/contextmenu

mousewheel/DOMMouseScroll

鍵盤事件: keydown/keypress/keyup e.keyCode 鍵值

觸屏事件: touchstrat/touchmove/touchend

指針事件: pointerEvent

表單事件: input/focus/blur/change/submit

window:? resize/scroll/load/error

事件委托

6.常見動畫效果

tab切換 / 大圖滾動 / 放大鏡 /右側懸浮導航條 / 點擊返回頂部 / 碰壁反彈 /

瀑布流 / 懶加載 / 預加載 / 新浪微博 / TodoList案例 / 自定義滾動條 /

蒙層彈窗拖拽 / JSONP / 鍵盤控制塊移動 / 彩票 / 全選反選 / 三級聯(lián)動...

7.插件,類庫

hammer.js (移動端手勢)

swiper.js (輪播圖)

fastclick.js (解決點透問題)

tween.js? (動畫庫)

JQuery.js/zepto.js

8.正則表達式,掌握表單的value驗證

/^1[0-9]{10}$/.test(string)

9.jQuery

獲取元素 ? ?

?? $(selector)

樣式獲取設置

$(ele).css("color")

$(ele).css("color","red")

$(ele).css({

? ? ? ? ? ? ? ? ?"color" :"red"

})

元素的寬高

$(ele).width()

$(ele).innerWidth();

$(ele).outerWidth();

$(ele).oouterWidth(true);

文本的設置

$(ele).html()

$(ele).val()

屬性的設置

$(ele).attr()

$(ele).removeAttr()

$(ele).prop() //操作布爾屬性

$(ele).removeProp()

元素位置

$(ele).offset() 文檔坐標? scrollTop+視口坐標 = 文檔坐標

$(ele).position() 相對定位父級的坐標

DOM


$(ele).siblings() 兄弟元素

$(ele).prev() 上一個兄弟元素

$(ele).next() 下一個兄弟元素

$(ele).children() 子元素

$(ele).parents() 直接父元素

$(ele).parents() 所有祖先元素

篩選

$("ul li").eq(0) ul下的第一個li

$("ul li").find("img") 查找li下的img

$(ele).index() 當前元素在所有兄弟元素中的下標

$(ele).index("button") 當前元素在所有button兄弟元素中的下標

class操作

$(ele).addClass()

$(ele).removeClass()

$(ele).toggleClass()

事件綁定

$(ele).on("click",fn)

$(ele).off("click",fn)

事件委托

$("ul").on("click","li",fn)

$(ele).one("click",fn)

事件模擬

$(ele).trigger("click")

動畫效果

$(ele).stop().animate({

? ? ? ? ? ? ? ? ? ? ? ?width:100,

height:200

}, 200, callback)

$(ele).show()

$(ele).hide()

$(ele).toggle()

$(ele).fadeIn()

$(ele).fadeOut()

$(ele).fadeToggle()

$(ele).fadeTo()

$(ele).slideUp()

$(ele).slideDown()

$(ele).slideToggle()

數(shù)據(jù)交互

$.ajax({

methods: "GET", //請求方式

url:"", //接口地址

dataType: "json", //返回數(shù)據(jù)類型

data:{//請求參數(shù)

},

success: function (reponse) {

? ? ? ? ? ? ? ? ?//成功回調(diào)

},

error: function() {

? ? ? ? ? ? ? ? ? //失敗回調(diào)

? }

})

工具函數(shù)

$.trim(" string ")

$.fn.extend()? 擴展元素的方法

$.extend() 擴展全局對象JQuery的方法

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末汛骂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖豪诲,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蝶念,居然都是意外死亡,警方通過查閱死者的電腦和手機芋绸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門媒殉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人摔敛,你說我怎么就攤上這事廷蓉。” “怎么了马昙?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵桃犬,是天一觀的道長。 經(jīng)常有香客問我行楞,道長攒暇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任敢伸,我火速辦了婚禮,結果婚禮上恒削,老公的妹妹穿的比我還像新娘池颈。我一直安慰自己尾序,他們只是感情好,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布躯砰。 她就那樣靜靜地躺著每币,像睡著了一般。 火紅的嫁衣襯著肌膚如雪琢歇。 梳的紋絲不亂的頭發(fā)上兰怠,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音李茫,去河邊找鬼揭保。 笑死,一個胖子當著我的面吹牛魄宏,可吹牛的內(nèi)容都是我干的秸侣。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼宠互,長吁一口氣:“原來是場噩夢啊……” “哼味榛!你這毒婦竟也來了?” 一聲冷哼從身側響起予跌,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤搏色,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后券册,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體频轿,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年汁掠,在試婚紗的時候發(fā)現(xiàn)自己被綠了略吨。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡考阱,死狀恐怖翠忠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情乞榨,我是刑警寧澤秽之,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站吃既,受9級特大地震影響考榨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鹦倚,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一河质、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦掀鹅、人聲如沸散休。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽戚丸。三九已至,卻和暖如春扔嵌,著一層夾襖步出監(jiān)牢的瞬間限府,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工痢缎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留胁勺,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓牺弄,卻偏偏與公主長得像姻几,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子势告,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

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

  • JS使用技巧專題 1開發(fā)技巧 1.1函數(shù)使用 1.1.1函數(shù)聲明方式 JS函數(shù)的寫法總結 http://blog....
    Kevin_Junbaozi閱讀 1,067評論 0 11
  • 一蛇捌、DOM 什么是DOM?Document Object Model(文檔對象模型)咱台。DOM是針對HTML和XML...
    空谷悠閱讀 960評論 0 2
  • 工廠模式類似于現(xiàn)實生活中的工廠可以產(chǎn)生大量相似的商品络拌,去做同樣的事情,實現(xiàn)同樣的效果;這時候需要使用工廠模式回溺。簡單...
    舟漁行舟閱讀 7,718評論 2 17
  • 我們首先要明白春贸,我們給頁面添加效果用到的js到底是什么?js其實包含三部分:dom 文檔對象模型 bom 瀏覽...
    一直以來都很好閱讀 793評論 0 0
  • 基礎復習筆記 JS效果三要素: 時間 事件 運動軌跡(分步驟來實現(xiàn)先死后活法逐步來) (1)獲取元素 : getE...
    2e9a10d418ab閱讀 380評論 0 3