JavaScript - 基礎

JavaScript

JavaScript是腳本語言余耽,編程語言 解釋性語言 單線程的

瀏覽器的內(nèi)核

  • 谷歌瀏覽器 Webkit內(nèi)核(v8引擎)Blink
  • 火狐瀏覽器 Gecko內(nèi)核
  • 歐朋瀏覽器 Presto內(nèi)核
  • IE瀏覽器 Trident內(nèi)核
  • Safari瀏覽器 Webkit內(nèi)核(發(fā)明者)

導入JavaScript的三種方式

  • 行內(nèi)使用
  • 內(nèi)聯(lián)方式
  • 外部引入

內(nèi)嵌導入和外鏈導入不能合并在一起早直,如果當前是外鏈導入的爬舰,那么在Script腳本塊中編寫的所有代碼都不會被執(zhí)行,js代碼一般放在body的末尾谎柄,要先保證元素的加載成功纲菌,才可以在js中獲取到设哗。


JavaScript的三部分組成

  • ECMAScript(ES):規(guī)定了js的一些基礎核心的知識(變量,數(shù)據(jù)類型抠蚣,語法規(guī)范,操作語句等)
  • DOM:document object model 文檔對象模型履澳,里面提供了一些屬性和方法嘶窄,可以讓我們操作頁面中的元素
  • BOM:browser object model 瀏覽器對象模型,里面提供了一些屬性和方法距贷,可以讓我們操作瀏覽器

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

基本數(shù)據(jù)類型(值類型)

  • number: 數(shù)字
  • string: 字符串 => 使用單雙引號包裹起來的值
  • boolean: 布爾 => true false
  • null: 空對象指針
  • undefined: 未定義

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

  • object對象數(shù)據(jù)類型
    • {} 普通對象
    • [] 數(shù)組
    • /^$/ 正則
  • function函數(shù)數(shù)據(jù)類型 function fn(){};

js數(shù)據(jù)類型的檢測

  • typeof: 檢測數(shù)據(jù)類型的運算符
  • instanceof: 檢測某個實例是否屬于這個類
  • constructor: 獲取當前實例的構(gòu)造器
  • Object.prototype.toString.call: 獲取當前實例的所屬類信息

typeof
使用typeof檢測柄冲,返回的結(jié)果都是一個<u>''字符串''</u>,字符串中包含的內(nèi)容證明了值是屬于什么類型的忠蝗,結(jié)果有六種现横,number,string,boolean,object,function,undefined
局限性

  • typeof null的結(jié)果不是“null“而是“object”:因為null雖然是單獨的一個數(shù)據(jù)類型阁最,但是他原本的意思是空對象指針戒祠,瀏覽器使用typeof檢測的時候就會把它按照對象來檢測
  • 使用typeof無法區(qū)分具體的object對象數(shù)據(jù)類型
typeof 12 => "number"
typeof(12) => "number"
var num = 13;
typeof num => "number"
typeof NaN => "number"
typeof 'zzp' => "string"
typeof true => "boolean"
typeof null => "object"
typeof [1,2,3] => "object"
typeof undefined => "undefined"

boolean布爾

Boolean() 方法 =>把其他類型的值轉(zhuǎn)化為布爾類型

  • 只有 0NaN速种,空字符串姜盈,nullundefined ('沒有空格') 這六個數(shù)據(jù)值轉(zhuǎn)換為布爾類型是false配阵,其余的都是true
  • 數(shù)字除了0和null馏颂,都會轉(zhuǎn)換為true
  • 字符串除了空字符串之外都是true
  • 對象也會轉(zhuǎn)換為true
  • ! 的作用
    • != 不等于
    • 取反:先把值轉(zhuǎn)換為布爾類型,然后再取反
  • !! 的作用:再取反的基礎上再取反闸餐,相當于沒有做操作饱亮,但是已經(jīng)吧其他類型的值轉(zhuǎn)化為布爾類型了,和Boolean是相同的效果

string字符串

在js中舍沙,單引號和雙引號包起來的都是字符串
常用方法:

  • a.toString()
  • charAt charCodeAt
  • substr substring slice
  • toUpperCase toLowerCase
  • indexOf lastIndexOf
  • split
  • replace
  • match

number數(shù)字

類型:0 12 -12 12.5 NaN(not a number) typeof NaN=> "number"
var num = Number.MAX_VALUE --- 數(shù)字的最大值
var num = Number.MIN_VILUE --- 大于0的最小值 5e-324
Infinity 正無窮大

  • NaN == NaN => false; NaN和任何其他的值都不相等近上,和任何數(shù)相加都是NaN
  • 方法:isNaN 用來檢測這個值是否是非有效數(shù)字,如果不是有效數(shù)字檢測的結(jié)果是true拂铡,反之是有效數(shù)字則為false
//當我們使用isNaN檢測值的時候壹无,檢測的值不是number類型的贺喝,瀏覽器會默認的把值先轉(zhuǎn)化為number類型处坪,然后再去檢測,如果檢測的對象是引用數(shù)據(jù)類型戒突,需要先使用toSting方法轉(zhuǎn)換為字符串類型涛碑,再把字符串轉(zhuǎn)換為number類型钢拧,最后再檢測
//只有對象類型,NaN,undefined會返回true
isNaN(NaN) => true;
isNaN(undefined) => true;
isNaN() => true;
isNaN({}) => true;
isNaN([]) => false;
isNaN('') => false;
isNaN(0) => false;
isNaN(null) => false;
//數(shù)組對象:空數(shù)組和一個數(shù)組元素都會返回false
isNaN([]) => false;
isNaN([12]) => false;
isNaN([12,13]) => true;
//布爾類型都會轉(zhuǎn)換為false
isNaN(true) => false;
isNaN(false) => false;
//對象類型的都會返回true, null除外
isNaN({}) => true;
isNaN({name:'zzp'}) => true;
  • Number() 方法 =>把其他數(shù)據(jù)類型的值轉(zhuǎn)化為number類型的值
//在使用Number轉(zhuǎn)換的時候只要字符串中出現(xiàn)任何一個非有效數(shù)字字符允睹,最后的結(jié)果都是NaN
Number() => 0;
Number([]) => 0;
Number({}) => NaN;
Number('') => 0;
Number(0) => 0;
Number(null)=> 0;
Number(undefined) => NaN;
//字符串類型轉(zhuǎn)換為number為數(shù)字和NaN
Number('12') => 12;
Number('12px') => NaN;
//布爾類型轉(zhuǎn)換為number是0和1
Number(true) => 1;
Number(false) => 0;
//把引用數(shù)據(jù)類型轉(zhuǎn)化為number行您,首先需要先把引用數(shù)據(jù)類型轉(zhuǎn)為字符串(toString),再把字符串轉(zhuǎn)換為number即可
//一般對象和正則轉(zhuǎn)換為數(shù)字都是NaN
Number([]) => []=>'' ''=>0;
Number([12]) => [12]=>'12' '12'=>12;
Number([12,13]) => [12,13]=>"12,13" "12,12"=>NaN;
Number({name:'zzz'}) => NaN;
Number({}) => NaN;
//可以使用toString方法來轉(zhuǎn)換進制
var num = 128;
num.toString(16); => 80
num.toString(8);  => 200
num.toString(2); => 10000000
//保留小數(shù)點之后幾位
變量.toFixed(保留的小數(shù)點的位數(shù));
  • parseInt() 方法=>也是把其他數(shù)據(jù)類型值轉(zhuǎn)換為number溜宽,和Number方法在處理字符串的時候有所區(qū)別
//=> 從左到右依次查找有效的數(shù)字字符,直到遇見非有效數(shù)字字符為止包括小數(shù)點豺撑,把找到的轉(zhuǎn)換為數(shù)字
Number('12px') => NaN;
parseInt('12px') => 12;
parseInt('12px13') => 12;
parseInt('px13') => NaN;
parseInt('12.5px') => 12;
//=> 也可以用來轉(zhuǎn)換進制數(shù)
parseInt(a,8); 吧a轉(zhuǎn)換為八進制的數(shù) 
  • parseFloat() 方法=>在parseInt的基礎上可以識別小數(shù)點
parseInt('12.5px') => 12;
parseFloat('12.5px') => 12.5;

null和undefined

null undefined 空字符串 0

  • 空字符串和null的區(qū)別 空字符串開辟了內(nèi)存烈疚,消耗了一丟丟的性能
  • null和undefined的區(qū)別
    • null一般都是暫時沒有,預期中以后會有的聪轿。在js中一般都是手動賦值為null爷肝,后期我們在給其賦值。
    • undefined:完全沒有在預料之內(nèi)

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

每一個對象都是由零到多組屬性名(key鍵):屬性值(value值)組成的陆错,或者說是有多組鍵值對組成的灯抛,每一組組鍵值中間用逗號隔開

  • 屬性:描述這個對象特點特征的
    • 對象的屬性名是字符串或者數(shù)字格式的,存儲的屬性值可以是任何的數(shù)據(jù)類型
    • 操作屬性的方法:對象名.屬性名(忽略了屬性名的單雙引號) 對象名['屬性名'](不能忽略單雙引號)
    • 如果操作的屬性名在對象中不存在音瓷,獲取的結(jié)果是undefined
    • 一個對象的屬性名是不能重復的(唯一性)对嚼,如果之前存在就是修改屬性值,之前不存在就是設置新的屬性
    • 假刪除:讓其屬性賦值為null外莲,但是屬性還在對象中猪半;真刪除:把整個屬性都在對象中暴力移除 delete 對象名.屬性名

基本數(shù)據(jù)類型和引用數(shù)據(jù)類型的區(qū)別

JS是運行在瀏覽器中的(內(nèi)核引擎),瀏覽器會為JS提供賴以生存的環(huán)境(提供給JS代碼執(zhí)行的環(huán)境)=>全局作用域window(glibal)

基本數(shù)據(jù)類型是按值操作的:在賦值的時候偷线,直接把值賦給變量 var a = 12;

  • 聲明一個變量存儲到棧內(nèi)存變量存儲空間中 =>聲明
  • 創(chuàng)建數(shù)值12 存儲到棧內(nèi)存存儲空間中
  • 讓變量a和數(shù)值12關聯(lián)起來磨确。=>就是定義也是賦值

引用數(shù)據(jù)類型是按照空間地址(引用地址)來操作的:var n = {name:'周'}

  • 先創(chuàng)建一個變量n,聲明變量存放到棧內(nèi)存變量存儲空間中
  • 創(chuàng)建值:由于值比較復雜,不能直接存放到值存儲空間中需要先開辟一個新的存儲空間(堆內(nèi)存)16進制地址声邦,把對象的鍵值對分別存儲到棧內(nèi)存中,函數(shù)存儲的是代碼字符串
  • 把空間的地址賦值給了變量 讓變量和堆內(nèi)存中的引用地址進行賦值關聯(lián)

引用數(shù)據(jù)類型中的函數(shù):function fn (){ 函數(shù)體 }

  • 先聲明一個函數(shù)名乏奥,和聲明變量一樣,先放到棧內(nèi)存變量存儲空間中亥曹,如果函數(shù)名和之前聲明的變量名字一樣的話會沖突
  • 創(chuàng)建值:先開辟一個新的存儲空間(堆內(nèi)存)16進制地址邓了,里面存放的是函數(shù)體中的代碼,是用單引號包含的字符串而已
  • 把空間的地址賦值給了變量 讓變量和堆內(nèi)存中的引用地址進行賦值關聯(lián)

JavaScript中變量命名規(guī)范

  • js中嚴格區(qū)分大小寫
  • 遵循國際命名規(guī)則‘駝峰命名法’第一個單詞首字母小寫媳瞪,其他的首字母大寫
  • 命名使用英語骗炉,不要使用拼音
  • 不能使用關鍵字和保留字
  • 可以使用$ _ 數(shù)字 字母,但是不能使用數(shù)字作為第一位

JavaScript變量和常量

變量:值是可以變的
常量:值是不可變的

//=>JavaScript中定義變量的方式蛇受,ES6中定義變量使用let
//變量只能代表一個值
var 變量名; //=> 聲明一個變量
變量名 = 值; //=> 賦值
var 變量名 = 值; //=> 定義了一個變量
初始化
//任何一個具體的數(shù)據(jù)值都是常量句葵,12
//和變量類似,我們設置一個常量兢仰,給其存儲一個值乍丈,但是這個存儲的值不能修改
const 常量名 = 值;//=>定義了一個常量把将,給它存儲值為12

變量提升

  • JavaScript中轻专,函數(shù)及變量的聲明都將被提升到函數(shù)的最頂部 變量可以在使用后聲明,也就是變量可以先使用再聲明 函數(shù)優(yōu)先提升
  • JavaScript中察蹲,只有聲明的變量會提升请垛,初始化的不會(就是賦值)

變量作用域

變量有局部變量和全局變量:局部變量只能在被聲明的函數(shù)內(nèi)部使用催训,而全局變量在網(wǎng)頁中的所有腳本和函數(shù)均可以使用當變量在函數(shù)內(nèi)沒有被聲明的時候(沒有使用var關鍵字),該變量為全局變量叼屠。 函數(shù)的參數(shù)屬于局部變量瞳腌。變量聲明時如果不使用 var 關鍵字,那么它就是一個全局變量镜雨,即便它在函數(shù)內(nèi)定義


JavaScript輸出操作(output)

三種提示方式

  • alert:在瀏覽器中彈出一個提示框(提供確定按鈕,點擊確定彈框消失)當多個alert語句加在一起的時候儿捧,可以重復點擊荚坞,知道最后點完為止。
    • 使用alert提示的信息菲盾,提示的內(nèi)容最后都會被轉(zhuǎn)換為<u>"字符串"</u>輸出(調(diào)用了tostring這個方)
  • confirm:在alert基礎上增加了讓用戶選擇性的操作(提供確定和取消按鈕)
    • 定義一個變量來接收其返回的值颓影,點擊確定返回true,點擊取消返回false懒鉴。我們可以根據(jù)接收的結(jié)果做不同的處理
  • prompt:在comfirm基礎上增加讓用戶輸入的效果(提供一個輸入框诡挂,確定和取消按鈕)
    • 用戶點擊取消按鈕,我們得到的結(jié)果是null临谱,如果用戶點擊的是確定按鈕璃俗,我們將會獲取到用戶輸入的內(nèi)容(如果用戶沒有輸入任何的內(nèi)容,獲取到的結(jié)果是空字符串)
  • var as = parseInt(window.prompt(‘input-------提示語’)); 可以提示用戶彈框輸入數(shù)字

真實項目中悉默,尤其是需要樣式精美的網(wǎng)站中城豁,我們的提示框一般都是自己封裝插件和組件來實現(xiàn)的(使用原生JS封裝模態(tài)框組件)

控制臺輸出,開發(fā)人員使用

  • console.log:在控制臺輸出抄课,優(yōu)勢是不會轉(zhuǎn)換數(shù)據(jù)類型唱星,輸出什么格式的數(shù)據(jù)都可以
  • console.dir:比log輸出的更加詳細一些
  • console.table:把json數(shù)據(jù)展示成一個表格

還有哪些console輸出方式?

在頁面中輸出

  • document.write('輸出內(nèi)容');
  • document.write(“html標簽”);
  • document.write(變量名);
  • document.write(可以輸出多項內(nèi)容 變量+”內(nèi)容“);

當括號中用引號引起是 直接輸出引號里面的內(nèi)容,輸出變量時直接寫變量名即跟磨,當輸出html的時候也用引號括起來间聊。


JavaScript運算符

= 賦值,等號左邊是變量抵拘,右邊是值
== 比較哎榴,如果左右兩邊的值的類型不一樣,瀏覽器會默認轉(zhuǎn)換為一樣的然后去比較

  • 兩個等于號比較仑濒,左右兩邊數(shù)據(jù)值的類型不一樣的叹话,會都轉(zhuǎn)換為數(shù)字再比較 null undefined NaN 除外
  • null==undefind => true; null===undefined; null和undefined和其他任意值都不相等
  • 對象和對象[]==[] => false; 比較的是空間的地址 var a={}; var b=a; a==b;=> true;
  • 對象和數(shù)字[]==0 => true; ({})==NaN => false; 先把對象轉(zhuǎn)換為數(shù)字
  • 對象和字符串[]=='' => true; 把兩邊都轉(zhuǎn)化為數(shù)字
  • 對象和布爾 []==true => false; []==false => true; ![]==false => true;

===: 絕對相等,不僅要求值一樣墩瞳,而且類型也要求完全一樣
算術運算符: + - * / ++ -- % 優(yōu)先級最高
比較運算符: < > <= >= != 最終都會轉(zhuǎn)換為數(shù)字來比較

  • 任何值和NaN做比較都是false
  • 比較兩個字符串的時候驼壶,先把他轉(zhuǎn)換為ascll碼
  • 其中的一邊為字符串的時候,先把其轉(zhuǎn)換為數(shù)字再做比較

邏輯操作符: && || ! 優(yōu)先級最低
邏輯與( && ): 同真為真 遇假返假 遇真返后
邏輯或( || ): 同假為假 遇真返真 遇假返后

  • &&:(與)當兩邊的表達式同時為真的時候喉酌,整個的運算為真 碰到假的時候就直接返回值
    • &&兩邊的表達式热凹,第一個為false的時候直接返回0 為true的時候返回另一邊的值 a=1+1 && 1-1; =>0 兩邊都為false的時候泵喘,則返回前面的值
    • 也可以當作短路語句 當用到一個值的時候,先判斷是不是為空般妙,空的話在執(zhí)行后面的語句 a && 語句;
  • ||:(或)當兩邊的表達式中任意一個為真的時候纪铺,運算為真,同時為假的時候碟渺,結(jié)果為假 碰到真的時候直接返回值
    • ||兩邊的表達式鲜锚,第一個為true的時候直接返回1 為false的時候返回另一邊的值 a=1+1 || 1-1; =>2

加法的特殊性

  • 使用+的時候,不是數(shù)字類型的先轉(zhuǎn)化為數(shù)字類型
  • 再遇到字符串的時候苫拍,+不是數(shù)學運算芜繁,而是字符串的拼接,只要不遇到字符串就是數(shù)學運算 1+1+'a'+1=2a1
  • 字符串拼接是把其他數(shù)據(jù)類型的toString是直接吧值用單雙引號包含起來绒极,只有對象toString的時候是[object object]
  • 任何值和字符串加法運算骏令,都會先轉(zhuǎn)換為字符串,然后進行字符串拼接垄提,

操作符的優(yōu)先級

  • 除了加法運算中的字符串和其他類型的值相加的時候榔袋,其他的都會轉(zhuǎn)換為number
  • 可以通過用小括號包起來的方式來提高運算的優(yōu)先級
  • 算術運算符=>比較運算符=>邏輯操作符=>=

JavaScript判斷語句

if,else if,else if(){}else if(){}else{}

  • 如果好幾個條件成立了,只把第一個成立的條件執(zhí)行铡俐,后面成立的條件忽略不管
  • if(A){}如果條件中只有一個固定值凰兑,先把他轉(zhuǎn)換為布爾類型,判斷中加來決定條件是否成立

三元運算符

  • 條件高蜂?條件成立執(zhí)行:條件不成立執(zhí)行; === if(條件){}else{}
  • 條件聪黎?條件成立執(zhí)行:null undefined void 0; 可以使用這些占位
  • 當條件成立的時候,如果執(zhí)行多條操作备恤,可以使用()稿饰,每條語句之間用逗號分割
  • 在三元運算符中,不能出現(xiàn)break露泊,content喉镰,return

switch case
應用于if else中一個變量在不同值情況下的不同操作

  • switch 后面小括號中存放的是一個值(一般我們都寫變量,把變量存儲的值拿來用惭笑,有時候也可能是一個計算)
  • case 后面放入的都是值侣姆,目的是驗證switch后面的值和哪一種case后面的值相等,相等的進行對應的處理(也可以是一個計算)
  • default 當其他的值都不成立的時候執(zhí)行
  • 每一種case結(jié)束的時候沉噩,后面都要加 break捺宗,結(jié)束當前的判斷,最后一項可以不加break
  • 不加break時川蒙,不管后面的條件是否成立蚜厉,都會繼續(xù)往下執(zhí)行,直到遇到break為止
  • 把符合某幾項值都去做同一件事情畜眨,使用不加break實現(xiàn)
  • switch case中的比較使用的是:===

JavaScript循環(huán)

重復做一件事情
continue昼牛;=> 結(jié)束本輪循環(huán)术瓮,其之后的代碼不會執(zhí)行,直接去執(zhí)行步長贰健,繼續(xù)執(zhí)行下一輪
break胞四;=> 結(jié)束整個循環(huán),其后面的代碼都不會執(zhí)行

while循環(huán) while(條件){循環(huán)語句}

  • 當條件成立的時候伶椿,執(zhí)行后面的語句辜伟,直到條件不滿足為止typeof

do...while循環(huán)
保證循環(huán)體至少執(zhí)行一次,先執(zhí)行一遍代碼悬垃,然后判斷條件

for循環(huán)

//沒有步長累加的時候游昼,會形成死循環(huán),項目中避免
for(循環(huán)的起始值,循環(huán)的執(zhí)行條件,步長累加){
//=> 循環(huán)體:=重復做的事情都在循環(huán)體中
    }

for in循環(huán)

  • for...in 語句用于對數(shù)組或者對象的屬性進行循環(huán)操作
  • for ... in 循環(huán)中的代碼每執(zhí)行一次尝蠕,就會對數(shù)組的元素或者對象的屬性進行一次操作
//對象中有多少個鍵值對,就循環(huán)多少次(不一定)
//每一次循環(huán)key這個變量存儲的都是當前循環(huán)這組鍵值對的屬性名
//key存儲的額值都是字符串格式的(不管屬性名是否為數(shù)字)
//在for in 循環(huán)遍歷的時候载庭,大部分的瀏覽器先把對象中的鍵值對進行排序:數(shù)字屬性名放在前面由大到下排列看彼,其次把非數(shù)組按照之前的順序排列(小數(shù) 不算)
 var obj = {name:'zzp',age:'12',1:'ddd',3:'fds'};
 for (var key in obj){}
 //obj['key'] 屬性名是key
 //obj[key] key變量存儲的值

JavaScript函數(shù)

函數(shù)中有最基本的函數(shù)使用function一個函數(shù)名來定義,也可以把它賦值給一個變量來使用(函數(shù)表達式)囚聚,這樣使用的時候可以不添加函數(shù)名字靖榕,所以他也叫做匿名函數(shù)。

函數(shù)的創(chuàng)建有三種方式

  • 使用構(gòu)造函數(shù): var fun = new Function();
  • 使用函數(shù)聲明: function fun (){}
  • 使用匿名函數(shù): var fun = function(){}

OOP:面向?qū)ο?/p>

  • 函數(shù)數(shù)據(jù)類型是按照引用地址來操作的
  • 函數(shù):具備一定功能的方法
  • 命名規(guī)范是小駝峰 theFirstName
  • 函數(shù)方法體中可以訪問外面的變量顽铸,外面的不可以訪問函數(shù)內(nèi)部的變量
  • 函數(shù)只創(chuàng)建不執(zhí)行沒有意義:因為在堆內(nèi)存空間中存儲的都是毫無意義的字符串
  • 在真實的項目中茁计,我們一般都會把實現(xiàn)一個具體功能的代碼封裝在函數(shù)中:函數(shù)封裝(類的繼承·封裝·多態(tài))
    • 如果當前這個功能需要在頁面中執(zhí)行多次,不封裝成為函數(shù)谓松,每一次想實現(xiàn)這個功能星压,都需要重新把代碼寫一遍,浪費時間鬼譬;而封裝在一個函數(shù)中娜膘,以后想要實現(xiàn)多次的這個功能,我們就沒有必要在重新寫代碼了优质,只需要把函數(shù)重新執(zhí)行即可竣贪,提高了開發(fā)效率
    • 封裝在一個函數(shù)中,頁面中就基本上很難出現(xiàn)重復一樣的代碼了巩螃,減少了頁面中代碼的堆積演怎,提高了代碼的重復利用率:低耦合高內(nèi)聚
//=> 創(chuàng)建函數(shù)的語法:相當于生產(chǎn)了一臺洗衣機 ===>堆內(nèi)存存儲的都是字符串
//=> 這個叫做函數(shù)的聲明,命名函數(shù)表達式
function 函數(shù)名() {
             //=>函數(shù)體:實現(xiàn)某一個功能的js代碼
          } 
          
//函數(shù)執(zhí)行調(diào)用:把函數(shù)體中的代碼執(zhí)行=> ===>棧內(nèi)存
// 1. 瀏覽器創(chuàng)建一個供函數(shù)中代碼執(zhí)行的私有環(huán)境(私有作用域)=> 私有作用域中的變量提升
// 2. 把創(chuàng)建的時候空間中存儲的字符串拿過來避乏,然后變?yōu)檎嬲腏S表達式代碼爷耀,然后再執(zhí)行
//=> 執(zhí)行函數(shù):相當于使用洗衣機洗衣服(如果函數(shù)只創(chuàng)建了但是沒有執(zhí)行,函數(shù)就沒有任何意義)
函數(shù)名();  //=> 執(zhí)行這個函數(shù)
函數(shù)名;    //=> 輸出函數(shù)本身 
//函數(shù)也可以作為方法調(diào)用淑际,如果在對象中定義了方法畏纲,調(diào)用的時候直接使用 對象名.方法名();來調(diào)用

//=> 形參:形式參數(shù)(變量)扇住,函數(shù)的入口
//=> 實參:函數(shù)執(zhí)行傳遞給函數(shù)具體的值
//=> 當我們創(chuàng)建一個函數(shù)想要實現(xiàn)某個功能的時候,發(fā)現(xiàn)一些材料并不清楚盗胀,只有當函數(shù)運行的時候才知道艘蹋,此時我們就需要設定入口,讓用戶執(zhí)行的時候通過入口把值傳給我們
//=> 當我們定義了形參但是執(zhí)行的時候沒有傳遞進去實參票灰,默認參的值是undefined(容錯處理)
//=> 
function fn(形參女阀,形參){         };
fn (1,2);

argument實參集合

當我們不知道用戶要傳遞幾個值的時候,此時我們無法設置形參的個數(shù):遇到此類需求屑迂,需要使用函數(shù)內(nèi)置的實參集合:arguments

  • arguments只有函數(shù)才有
  • 不管執(zhí)行函數(shù)的時候是否傳遞實參浸策,arguments天生就存在,沒有傳遞實參ARG是個空的集合惹盼,傳遞了ARG中包含了所有穿的實參值
  • 不管是否設置了形參庸汗,ARG中始終存儲了所有的實參信息
  • arguments是一個類數(shù)組集合
    • 以數(shù)字作為索引(屬性名)從零開始
    • 有一個length屬性,存儲的是當前的幾個的長度arguments.length argument['length']
    • arguments.callee:存儲的是當前函數(shù)的本身
    • arguments.callee.caller:存儲的是當前函數(shù)在哪執(zhí)行的(宿主函數(shù))手报,在全局作用域下執(zhí)行的

返回值return

  • 返回值是函數(shù)提供的一個出口:如果我們想在外面使用函數(shù)私有的一些信息蚯舱,那就需要通過return,把這些信息返回出來供外面使用
  • 如果函數(shù)中沒有寫return或者return后面啥也沒有掩蛤,默認的返回結(jié)果是undefined
  • 在函數(shù)體當中枉昏,遇到return之后,后面的代碼都不執(zhí)行了

棧內(nèi)存

作用域(全局作用域/私有作用域):提供一個供js代碼執(zhí)行的環(huán)境

堆內(nèi)存

所有的引用數(shù)據(jù)類型揍鸟,他們需要存儲的內(nèi)容都在堆內(nèi)存中(相當于一個倉庫兄裂,目的是存儲信息)

  • 對象會把鍵值對存儲進來
  • 函數(shù)會把代碼當作字符存儲進來

匿名函數(shù)

沒有名字的函數(shù)

  • 函數(shù)表達式
    • 把一個沒有名字的函數(shù)作為值賦值給一個變量或者一個元素的某個事件
    • var a = function (){return a};
  • 自執(zhí)行函數(shù)
    • 創(chuàng)建函數(shù)和執(zhí)行函數(shù)放在一起,創(chuàng)建完成立馬執(zhí)行 ;(函數(shù)內(nèi)容)(傳參);
    • ~函數(shù)體(實參); 前面可以是 - + 阳藻! 用來控制語法規(guī)范

構(gòu)造函數(shù)

對象名使用大駝峰命名規(guī)則 就是首字母大寫 有new關鍵字

  • 構(gòu)造函數(shù)的首字母必須大寫晰奖,用來區(qū)分于普通函數(shù)
  • 內(nèi)部使用的this對象,來指向即將要生成的實例對象
  • 使用New來生成實例對象

當定的一個函數(shù)的首字母是大寫的時候稚配,這個函數(shù)就是一個構(gòu)造函數(shù)
調(diào)用這個函數(shù)的時候:var ren = new Person(參數(shù),參數(shù)); ren.內(nèi)部方法();
也就是說把這個方法給了變量畅涂,他擁有方法的特性
var Person = function(){}; 創(chuàng)建一個構(gòu)造函數(shù)
var person = new Person(); 實例化一個對象

閉包

函數(shù)執(zhí)行會形成一個私有的作用域,讓里面的私有變量和外界的互不影響(互不干擾道川,外面的無法直接獲取里面的變量值)午衰,此時我們可以理解為私有作用域吧私有變量保護起來,我們把這種保護機制稱為閉包.

get冒萄,set

...

JavaScript中的this

...


JavaScript方法

Math中常用的方法

數(shù)學函數(shù):但是他的數(shù)據(jù)類型是對象數(shù)據(jù)類型 dir(Math);

  • Math.abs(); 取絕對值就是一個數(shù)的正數(shù) an be s
  • Math.ceil(); 向上取整 sei you Math.floor() 向下取整 f lor er
  • Math.round(); 四舍五入 當是負數(shù)的時候臊岸,5包含在向下的 Math.round(-12.5)=>-12 ruang de
  • Math.random(); 獲取[0,1)之間的隨機小數(shù)包含0
    • Math.round(Math.random()*10); 獲取[1,10]之間的隨機整數(shù)
    • Math.round(Math.random()*(m-n)+n); 獲取[n,m]之間的隨機整數(shù)
  • Math.max(); 獲取一組中的最大值
  • Math.min(); 獲取一組中的最小值
  • Math.PI; 獲取圓周率 派
  • Math.pow(10尊流,2)=> 100; 獲取一個值的多少次冪
  • Math.sqrt(100)=> 10; 開平方

string中常用的方法

在JS中使用單雙引號包起來的都是字符串 字符串相當于一個數(shù)組 var str = 'aap'; str.length=3;
在控制臺輸入 console.dir(String.prototype);

  • str.charAt(索引); 返回指定索引位置的字符帅戒,指定的索引不存在的話會返回空字符串,不指定的話返回第一個 str[不存在]=> ' '
  • str.charCodeAt(索引); 在charAt基礎上,把獲取的字符變?yōu)閡nicode編碼值
  • String.fromCharCode(111); 把值按照ASCLL表中的值轉(zhuǎn)換為原有的字符
  • str.substr(n,m); 從索引n開始截取m個字符
    • 只傳遞n直接截取到字符串的末尾
    • 超出索引能截多少截多少
    • 一個參數(shù)也不傳,克隆整個字符串
  • str.substring(n,m); 從索引n開始截取到m處(不包括m) 只傳一個值則截取到末尾
  • str.slice(n,m); 從索引n開始截取到m處(不包括m) 支持負數(shù)索引
  • str.toUpperCase; 把字母全部大寫
  • str.toLowerCase; 把字母全部小寫
  • str.indexOf('字符') 獲取當前字符在字符串中第一次出現(xiàn)的位置索引
    • 如果當前字符在字符串中沒有出現(xiàn)過逻住,結(jié)果是-1钟哥,可以用來驗證當前字符串中是否有這個字符
  • str.lastIndexOf('字符') 獲取當前字符在字符串中最后一次出現(xiàn)的位置索引
  • str.split()=>全部拆開 按照字符串中的某一個字符把字符串拆分成數(shù)組中的某一項,和數(shù)組中的join相對應 支持正則
  • str.replace('之前的字符',替換的字符') 實現(xiàn)字符的替換 執(zhí)行一次只能替換一次
  • str.trim() str.trimRight() str.trimLeft() 去除字符串首尾的空格

Data方法

Data對象用于處理日期與時間 首先需要創(chuàng)建Data對象: var date = new Date();

  • var n = date.getFullYear(); 返回當前是多少年
  • var n = date.getMonth(); 返回當前是幾月
  • var n = date.getDate(); 返回當前月的當前一天
  • var n = date.getDay(); 返回當前是星期幾
  • var n = date.getHours(); 返回當前是幾點(24小時)
  • var n = date.getMinutes(); 返回當前是幾分鐘
  • var n = date.getSeconds(); 返回當前是幾秒
  • var n = date.getMilliseconds(); 返回當前是幾毫秒
  • var n = date.getTime(); 返回距1970年1月1日之間的毫秒數(shù):
  • var n = data.getUTCDate(); 使用UTC的時候返回的是國際時間
  • var n = data.setUTCDate(12); 設置國際時間的日期為12
  • var t = d.toLocaleDateString(); => "2019/2/13" 返回的是年月日 luo kan ou er
  • var t = d.toLocaleString(); => "2019/2/13 下午2:23:07" 返回的是年月日和時間
  • var t = d.toLocaleTimeString(); => "下午2:23:07" 返回的是時間
  • var t = d.toString(); => "Wed Feb 13 2019 14:23:07 GMT+0800 (中國標準時間)" 返回中國標準年月日和時間
  • var t = d.toTimeString(); => "14:23:07 GMT+0800 (中國標準時間)" 返回中國標準時間
  • var t = d.toUTCString(); => "Wed, 13 Feb 2019 06:23:07 GMT" 返回的是國際標準時間
  • =>
  • =>
//返回時間的方法
function date() {
  var data = new Date();
  var y = data.getFullYear(); //年
  var M = data.getMonth(); //月
  var d = data.getDate(); //日
  var day = data.getDay(); //星期幾
  var h = data.getHours(); //時
  var m = data.getMinutes(); //分
  var s = data.getSeconds(); //秒
  var ms = data.getMilliseconds(); //毫秒
  //返回日期時間
  return y + '年' + M + '月' + d + '日' + ' ' + '星期' + day + ' ' + h + '時' + m + '分' + s + '秒' + ms + '毫秒';
}
var time = date(); //方法調(diào)用 

計時器

  • setInterval(function(){},3000) 間隔指定的毫秒數(shù)不停地執(zhí)行指定的代碼
  • 把定時器賦值給一個全局對象瞎访,然后可以使用 clearInterval(myVar); 來清除計時器
  • setTimeout(function(){},3000); 指定的時間之后執(zhí)行函數(shù)
  • 把延時時器賦值給一個全局對象腻贰,然后可以使用 clearTimeout(myVar); 來清除計時器

頁面上的方法

  • document.documentElement.scrollTop || document.body.scrollTop -- 滾動條距離頂部的距離
  • scrollBar: flase -- 隱藏滾動條
  • var 0bj = obj.getBoundingClientRect() -- 獲取元素相對于視窗的位置集合 小括號
    0bj.top:元素上邊到視窗上邊的距離;
    0bj.right:元素右邊到視窗左邊的距離;
    0bj.bottom:元素下邊到視窗上邊的距離;
    0bj.left:元素左邊到視窗左邊的距離;
  • box.offsetTop -- 盒子距離頂部的距離 沒有小括號
    box.offsetLeft -- 盒子距離頂部的距離
    box.offsetWidth -- 盒子距離頂部的距離
    box.offsetHeight -- 盒子距離頂部的距離
  • obj.classList.add("類名", "類名") -- 給所選的class添加一個或多個新的class名
  • obj.classList.remove("類名", "類名") -- 移除一個或者多個類名
  • obj.classList.length -- 獲取有幾個類名

讓一個元素來回滾動的方法是先設置絕對定位,然后使用var xxleft = parseInt(xx.style.left);方法獲得left的值扒秸,通過設置xx.style.left = xxleft + 'px';來控制移動, 通過計時器的方法執(zhí)行這個動畫播演。


JavaScript對象

頂層對象,在瀏覽器環(huán)境指的是window對象伴奥,在 Node 指的是global對象
對象定義的規(guī)則

  • 將左花括號與類名放在同一行
  • 冒號與屬性值間有個空格
  • 字符串使用雙引號写烤,數(shù)字不需要
  • 最后一個屬性值對后面不要添加逗號
  • 將右花括號獨立放在一行,并以分號作為結(jié)束符號

一個對象里面有自己的屬性和方法拾徙,對象的方法是對對象屬性的一個定義結(jié)合洲炊,需要的時候調(diào)用就可以

  • 如果想要增加一個屬性 => 對象名.屬性=值;
  • 如果要刪除一個屬性 => delete 對象名.屬性;

訪問對象屬性的兩種方法: 對象.屬性名; 對象[”屬性名“];
創(chuàng)建對象的方法: 方法名: function(){};
使用對象的方法: 對象名.方法名();


JavaScript數(shù)組

數(shù)組也是對象數(shù)據(jù)類型的 typeof [] => 'object'; 字符串相當于一個數(shù)組

  • 數(shù)組的創(chuàng)建:

    • var array = new Array();
    • var array = new Array(1,2,3,4,);
    • var array = [0,1,2,3,];
  • 數(shù)組中存儲的數(shù)據(jù)可以是任意類型的

  • 創(chuàng)建的新數(shù)組是空數(shù)組,沒有值尼啡,輸出則顯示undefined

  • 創(chuàng)建數(shù)組的時候选浑,雖然指定了他的長度,但是數(shù)組的長度是可變化的

  • 在數(shù)組中添加新的成員玄叠,直接使用一個未使用的索引 arr[12] = 21;

  • 數(shù)組的長度:數(shù)組名.length長度會隨著元素的增加而增大,也可以直接改變數(shù)組的長度arr.length=12;

  • 數(shù)組也有屬性名拓提,只不過屬性名是數(shù)字读恃,我們把數(shù)字屬性名稱之為他的索引:數(shù)組是以數(shù)字作為索引,索引從零開始

  • 類數(shù)組:類似于數(shù)組代态,但是不是數(shù)組

    • 通過getElementByTagName獲取的元素集合
    • 函數(shù)中的實參集合arguments

數(shù)組中的常用方法

方法的意義和作用
方法的形參
方法的返回值
使用此方法之后寺惫,數(shù)組的改變

  • console.dir(Array.prototype):用來輸出數(shù)組中常用的方法
  • arr[arr.length]=xxx; => 在數(shù)組的末尾增加一個新的內(nèi)容
  • push:在數(shù)組的末尾添加一個新的元素 arr.push(12,'zzp',{name:'zzp'},function(){});
  • unshift:在數(shù)組的開頭添加新的元素 arr.unshift (12,'zzp',{name:'zzp'},function(){});
  • pop:刪除數(shù)組的最后一項 arr.pop();
  • shift:刪除數(shù)組的第一項 arr.shift(); 刪除之后,后面每一項的索引都要向前進一位
  • delete arr[索引]:刪除指定的索引對象蹦疑,當前項被刪除之后西雀,其他項的索引不會改變,當前數(shù)組的length也不會改變
  • arr.length--:也可以刪除數(shù)組的最后一項
  • splice 刪除 Array.splice(開始位置歉摧, 刪除的個數(shù)艇肴,元素)
  • 返回的是被刪除的內(nèi)容(以一個新的數(shù)組保存) 原數(shù)組改變
  • arr.splice(0);:清空數(shù)組 splice();:一項也不刪除,返回一個新的空數(shù)組
  • arr.splice(n,m);:從索引n開始刪除m個(m不寫是刪除到數(shù)組的末尾)
  • splice 修改
    • 返回的是被刪除的內(nèi)容(以一個新的數(shù)組保存) 原數(shù)組改變
    • arr.splice(n,m,x);:在原有刪除的基礎上叁温,用x代替刪除的
  • splice 增加
    • 返回的是一個空數(shù)組 原數(shù)組改變
    • arr.splice(n,0,x);:在修改的基礎上再悼,我們一項也不刪除,把x插入到索引n的前面
    • arr.splice(0,0,x);:在數(shù)組的開頭追加新的內(nèi)容
    • arr.splice(arr.length,0,x);:在數(shù)組的最后追加新的元素
    • arr.splice(0,1);:刪除數(shù)組的第一項
    • arr.splice(arr.length);:刪除數(shù)組的最后一位
  • 數(shù)組的查詢 slice
    • arr.slice(n,m):找到從索引n開始到索引m處(不包含m)
    • 返回查找到的內(nèi)容以新數(shù)組的方式返回膝但,原來的數(shù)組不變
    • arr.slice(n);: 只寫n冲九,從n開始找到末尾
    • arr.slice(0)/slice();: 數(shù)組克隆,克隆一份和原來的數(shù)組一摸一樣的新數(shù)組跟束,克隆的數(shù)組和原數(shù)組不一樣
    • arr.slice(-n,-m);: 支持負數(shù)索引莺奸,按照倒數(shù)來選的
  • 數(shù)組的拼接 concat
    • 返回的是拼接之后的新數(shù)組丑孩,原數(shù)組沒有改變
    • arr.concat([111,222],333,'zzp',{name:'zzp'});: 拼接的對象可以是任意的類型
    • arr.concat();:可以實現(xiàn)數(shù)組的克隆
  • 數(shù)組轉(zhuǎn)化為字符串 toString
    • 實現(xiàn)吧數(shù)組轉(zhuǎn)化為字符串(轉(zhuǎn)化后的字符串以逗號分隔每一項)
    • 返回的是轉(zhuǎn)換后的字符串,原有的數(shù)組不變
  • join:把數(shù)組按照指定的分隔符(分隔符是字符串形式)轉(zhuǎn)換為字符串 返回的是一組字符串 原數(shù)組不變 arr.join('+');
  • split:按照字符串中的某一個字符把字符串拆分成數(shù)組中的某一項 支持正則
  • evel:把字符串變?yōu)閖s表達式執(zhí)行 var a = evel(arr.join('+'));可以實現(xiàn)數(shù)字數(shù)組的求和
  • reverse:把數(shù)組反過來進行排列 返回的是排列之后的數(shù)組 原數(shù)組也改變
  • sort: 實現(xiàn)數(shù)組的排序 返回的是排序之后的新數(shù)組
    • 如果沒有傳入?yún)?shù) 可以給10以內(nèi)的數(shù)升序排列 超過10位數(shù)時只識別第一位
    • arr.sort(function(a,b){return a-b});: 升序排列
    • arr.sort(function(a,b){return b-a});: 降序排列
  • 遍歷數(shù)組的方法
    • arr.forEack(function(n,m){});:遍歷數(shù)組中的每一項 n是當前的遍歷值 m是當前值的索引
    • arr.map(function(n,m){returen xxx});: 返回的值是當前遍歷的這一項修改之后的值
  • 查找數(shù)組中的某一項是否包含字符串
    • includes(字符串) 包含的話返回true
  • 給某個字符串補全幾位
    • padstart(2, '0') 前面是補全幾位,后面是用什么補全

數(shù)組去重

  • 方法一:遍歷數(shù)組中的每一項灭贷,那一項和它后面的項依次比較温学,如果相同了,則把相同的項去掉
  • 方法二:利用indexOf來驗證當前數(shù)組中是否包含某一項氧腰,包含把當前項刪除掉
  • 方法三: 遍歷數(shù)組中的每一項枫浙,把每一項作為新對象的屬性名和屬性值存儲起來,在每一次向?qū)ο笾写鎯χ肮潘紫瓤匆幌略瓕ο笾惺欠癜@個屬性

二維數(shù)組

二維數(shù)組的本質(zhì)是箩帚,數(shù)組中的元素又是數(shù)組

  • var ary = [[0,1,2][0,1,2]]; 直接給數(shù)組賦值
  • arr[1][1]; 第一個代表外圍數(shù)組的索引,第二個代表的是找到第一個索引數(shù)組之后當中的數(shù)組索引
  • 通過雙for循環(huán)的方法復制黄痪,然后使用循環(huán)遍歷出來
//先定義二維數(shù)組
var arr = new Array();
for(var i=0;i<3;i++){
    arr[i] = new Array();
    for(var j=0;j<5;j++){
        arr[i][j] = i+j;
        }
    }    
//循環(huán)遍歷二維數(shù)組
for(var i=0;i<arr.length;i++){
    for(var j=0;j<arr[i].length;j++){
        document.write(arr[i][j]);
    }
    document.write("<br/>");  
}


JavaScript算法

冒泡排序

...

遞歸算法

找規(guī)律找出口

快速排序

...

插入排序

...


JavaScript正則


JavaScriptDOM操作

DOM節(jié)點

在HTML中的所有內(nèi)容都是節(jié)點紧帕,節(jié)點是用來描述頁面中每一部分之間關系的 只要能獲取頁面中的一個節(jié)點,那么我就可以通過相關的屬性和方法獲取頁面中的其他節(jié)點

  • 元素節(jié)點: HTML標簽
    • nodeType:1
    • nodeName:大寫的標簽名
    • nodeValue:null
  • 文本節(jié)點: 文字內(nèi)容 空格換行
    • nodeType:3
    • nodeName:#text
    • nodeValue:文本內(nèi)容
  • 注釋節(jié)點: 注釋內(nèi)容
    • nodeType:8
    • nodeName:#comment
    • nodeValue:注釋內(nèi)容
  • document文檔節(jié)點:
    • nodeType:9
    • nodeName:#document
    • nodeValue:null
  • 使用dir(document.body.childNodes); 來獲得body下面的所有子節(jié)點
    • 元素id.children 獲取所有的元素子節(jié)點(元素集合) 使用ID時直接可以操作
    • parentNode 獲取當前元素的父節(jié)點(元素對象)
    • previousSibling nextSibling 獲取當前節(jié)點的上一個哥哥節(jié)點 下一個弟弟節(jié)點
    • previousElementSibling nextElementSibling 獲取當前節(jié)點的上一個哥哥元素節(jié)點 下一個弟弟元素節(jié)點
    • firstChild lastChild 當前元素所有子節(jié)點的第一個 當前元素所有子節(jié)點的最后一個
    • firstElementChild lastElementChild 當前元素所有子節(jié)點的第一個元素節(jié)點 當前元素所有子節(jié)點的最后一個元素節(jié)點
  • 自定義屬性
    • (set/get/remove)Attribute 給當前的元素設置/獲取/移除屬性桅打,一般操作的都是自定義屬性
    • XXX.index = x:把當前操作的元素作為一個普通的對象

DOM的增刪改

document.createElement;: 在js中動態(tài)創(chuàng)建一個HTML標簽

  • 增加 appendChild;: 把當前創(chuàng)建的新元素添加到容器的末尾
  • 增加 inserBefore(新元素, 老元素);: 把新創(chuàng)建的元素增加到老元素之前
  • 刪除 容器.removeChild(元素); 在當前容器中刪除這個元素
  • 替換 replaceChild(新元素,老元素); 在當前容器中拿新元素替換老元素
  • 克隆 元素.cloneNode(false/true); 把原有的元素克隆一份不寫的話默認時false false:只克隆當前元素本身 true:克隆當前元素以及他的后代
var obj = document.createElement('div'); //=> 創(chuàng)建一個div
obj.id = 'obj1'; //=> 添加id
obj.className = 'obj2'; //=> 添加className
document.appendChild(obj); //=> 把它添加到頁面中
document.inserBefore(obj.box); //=> 把新元素obj添加到box之前
//移除一個元素
document.當前容器.removeChild(要刪除的元素)
元素.parentNode.removeChild(元素)
var 元素 = 要克隆的元素.cloneNode();
document.body.appendChild(元素);

獲取html元素

找到的內(nèi)容使用單引號擴起來

  • getElementById: 通過指定的id獲得元素 1個
  • getElementByName: 通過元素名稱name屬性獲得元素 1組
  • getElementByTagName: 通過標簽名稱獲得元素 1組

innerHTML: 獲取和替換HTML元素的內(nèi)容

  • object.innerHTML區(qū)分大小寫
  • 只是object.innerHTML的時候是元素的內(nèi)容
  • object.innerHTML = “新的內(nèi)容” 改變內(nèi)容

innerText: 設置元素的文本顯示
obj.innerText= "haha"

改變HTML樣式

  • Object(轉(zhuǎn)換的對象).style.property(要改變的屬性)=new style(新的屬性);
  • Var mr = document.getElementById(“aa”); ———找到對象
    Mr.style.color=“red”; ——改變樣式

內(nèi)容的顯示和隱藏display
object.style.display = value; none(隱藏) block(顯示塊級)

控制類名
object.className = newclassname; -- 設置一個元素的類名

解決選項卡的三種方式

  • 閉包
  • 自定義屬性
  • ES6 let定義

JavaScript事件

事件是可以被js檢測到的行為 事件可以是瀏覽器行為是嗜,也可以是用戶行為

  • 通過行內(nèi)綁定的事件只能綁定一個事件
  • div.onclick = function(event){方法體}; this指向的是dom元素本省
  • div.addEventListener('事件名','function(){},false); 先通過getElement找到元素然后綁定一個事件,也可以綁定多個事件 this指向的是dom元素本省

鼠標事件

  • 鼠標單擊事件: onclick="方法";
  • 鼠標雙擊事件: ondblclick="方法";
  • 鼠標按下事件: onmousedown="方法";
  • 鼠標抬起事件: onmouseup="方法";
  • 鼠標移入事件: onmouseover="方法"; 會冒泡挺尾,其后面的元素也會觸發(fā)事件 onmouseenter="方法";
  • 鼠標移開事件: onmouseout="方法"; onmouseleave="方法";
  • 鼠標點擊右鍵的事件: oncontextmenu="方法";

鍵盤事件

  • 鍵盤按鍵按下事件: onkeydown="方法";
  • 鍵盤按鍵抬起事件: onkeyup="方法";
  • 鍵盤按鍵按下并抬起事件: onkeypress="方法";
  • event.keyCode = 鍵盤按下的時候?qū)哪莻€碼

表單事件

  • 光標聚焦事件: onfocus="方法";
  • 光標失焦事件: onblur="方法";
  • 內(nèi)容選中事件: onselect="方法";
  • 內(nèi)容改變事件: onchange="方法";
  • 表單提交時觸發(fā): onsubmit="方法";
  • 表單重置時觸發(fā): onreset="方法";
  • 元素獲取輸入觸發(fā): oninput="方法";
  • 拷貝內(nèi)容時觸發(fā): oncopy="方法";
  • 剪切內(nèi)容時觸發(fā): oncup="方法";
  • 粘貼內(nèi)容時觸發(fā): onpaste="方法";

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鹅搪,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子遭铺,更是在濱河造成了極大的恐慌丽柿,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件魂挂,死亡現(xiàn)場離奇詭異甫题,居然都是意外死亡,警方通過查閱死者的電腦和手機涂召,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門坠非,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人果正,你說我怎么就攤上這事炎码。” “怎么了舱卡?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵辅肾,是天一觀的道長。 經(jīng)常有香客問我轮锥,道長矫钓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮新娜,結(jié)果婚禮上赵辕,老公的妹妹穿的比我還像新娘。我一直安慰自己概龄,他們只是感情好还惠,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著私杜,像睡著了一般蚕键。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上衰粹,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天锣光,我揣著相機與錄音,去河邊找鬼铝耻。 笑死誊爹,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的瓢捉。 我是一名探鬼主播频丘,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼泡态!你這毒婦竟也來了搂漠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤某弦,失蹤者是張志新(化名)和其女友劉穎状答,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體刀崖,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年拍摇,在試婚紗的時候發(fā)現(xiàn)自己被綠了亮钦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡充活,死狀恐怖蜂莉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情混卵,我是刑警寧澤映穗,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站幕随,受9級特大地震影響蚁滋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一辕录、第九天 我趴在偏房一處隱蔽的房頂上張望睦霎。 院中可真熱鬧,春花似錦走诞、人聲如沸副女。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碑幅。三九已至,卻和暖如春塞绿,著一層夾襖步出監(jiān)牢的瞬間沟涨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工位隶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拷窜,地道東北人。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓涧黄,卻偏偏與公主長得像篮昧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子笋妥,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354

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