JavaScript學習(1)


JavaScript工作原理

前端三元素:

  1. HTML:通過各種元素搭建頁面結構
  2. CSS:負責頁面樣式:形狀,大小,顏色,動畫等
  3. JavaScript:控制頁面行為:部分動畫效果、頁面與用戶的交互、頁面功能

概念:

  1. 互聯網最流行的輕量級腳本語言
  2. 廣泛用於服務端、pc端、移動端
  3. 嵌入更大型的應用程序環境,去調用宿主環境提供的底層 API,比如結合瀏覽器使用

與宿主的關系:

  1. 各種宿主環境提供額外的 API(即只能在該環境使用的接口),以便 JavaScript 調用。
  2. 以瀏覽器為例,它提供的額外 API 可以分成三大類:
  • 瀏覽器控制類:操作瀏覽器
  • DOM 類:操作網頁的各種元素
  • Web 類:實現互聯網的各種功能
  1. 如果宿主環境是服務器,則會提供各種操作系統的 API,比如 Node 環境中:
  • 文件操作 API
  • 網絡通信 API等

調試JavaScript的方法:

  1. alert
  2. console.log
  3. document.title
  4. vscode插件

ES6開啟JavaScript的新時代

  1. ECMAScript 6.0(以下簡稱 ES6)是 JavaScript 語言的下一代標准,已經在 2015 年 6 月正式發布了 。它的目標,是使得 JavaScript 語言可以用來編寫復雜的大型應用程序,成為企業級開發語言。
  2. ECMAScript 和 JavaScript 的關系是,前者是后者的標准,后者是前者的一種實現(另外的 ECMAScript 方言還有 Jscript 和 ActionScript)。
  3. ES6 既是一個歷史名詞,也是一個泛指,含義是 5.1 版以后的 JavaScript 的下一代標准,涵蓋了 ES2015、ES2016、ES2017 等

學習DOM:找到對象很重要

什么是DOM:

  1. DOM 是 JavaScript 操作網頁的接口,全稱為“文檔對象模型”(Document Object Model)。它的作用是將網頁轉為一個 JavaScript 對象,從而可以用腳本進行各種操作(比如增刪內容)。
  2. 瀏覽器會根據 DOM 模型,將結構化文檔(比如 HTML 和 XML)解析成一系列的節點,再由這些節點 組成一個樹狀結構(DOM Tree)。所有的節點和最終的樹狀結構,都有規范的對外接口。
  3. DOM 只是一個接口規范,可以用各種語言實現。所以嚴格地說,DOM 不是 JavaScript 語法的一部分 ,但是 DOM 操作是 JavaScript 最常見的任務,離開了 DOM,JavaScript 就無法控制網頁。另一方面 ,JavaScript 也是最常用於 DOM 操作的語言。后面介紹的就是 JavaScript 對 DOM 標准的實現和用法。

常見的DOM文檔對象模型:

document    #節點
doucment.cookie    #獲取cookie
document.links    #返回當前文檔所有鏈接的數組,獲取所有的a
document.URL    #獲取當前URL
document.location    #當前網站位置信息
document.title    #當前文檔標題
doucment.querySelector    #取到元素
document.getElementsByTagName    #取標簽列表,支持切片
document.getElementsByClassName    #取class列表
document.getElementsByName    #取name
document.getElementByID    #根據ID取元素

Node 接口

所有 DOM 節點對象都繼承了 Node 接口,擁有一些共同的屬性和方法。這是 DOM 操作的基礎。

Node.prototype.nodename    #節點名字
Node.prototype.nodevalue    #節點值
Node.prototype.textcontent    #文本內容
Node.prototype.nextsibling    #同級別下一個節點
Node.prototype.previousSibling    #同級別上一個節點
Node.prototype.firstchild     #子節點第一個
Node.prototype.parentNode    #父節點
Node.prototype.childnodes    #所有子節點

var h4 = document.createElement('h4')
h4.textContent = '這是h4'
div.append(h4)    #追加元素

Node.prototype.clonenode    #克隆節點
div.parentNode.removeChild(div)    #刪除節點
Node.prototype.contains    #判斷節點是否存在

Element 節點

Element節點對象對應網頁的 HTML 元素。每一個 HTML 元素,在 DOM 樹上都會轉化成一個Element節點對象。

Element.id    #取id
Element.tagName    #標簽名
Element.attributes    #取屬性
Element.classname    #取類名字
Element.classlist    #類列表

var attr = document.getElementById('屬性')
attr.classList.toggle('hljs', true)    #如果是true就添加類

Element.dataset    #獲取data屬性下的值
Element.innerHtml    #獲取當前節點下html代碼
Element.outerHtml    #獲取當前節點html
Element.style    #獲取樣式
Element.closest    #返回匹配該選擇器的、最接近當前節點的一個祖先節點(包括當前節點本身)
Element.matches    #匹配元素返回一個布爾值

attribute 屬性

HTML 元素包括標簽名和若干個鍵值對,這個鍵值對就稱為“屬性”(attribute)。

Element.attributes    #取屬性
id
name
value
href
img.src
for 改為htmlfor
class 改成classname
Element.getAttribute    #獲取屬性
code.setAttribute('class', 'bg')    #添加屬性
Element.hasAttribute()    #當前元素節點是否包含指定屬性
Element.hasattributes()    #方當前元素是否有屬性,如果沒有任何屬性,就返回false,否則返回true。

CSS 操作

CSS 與 JavaScript 是兩個有着明確分工的領域,前者負責頁面的視覺效果,后者負責與用戶的行為互動。但是,它們畢竟同屬網頁開發的前端,因此不可避免有着交叉和互相配合。如何通過 JavaScript 操作 CSS?

setAttribute('style', 'color:red;background-color:green')    #設置樣式
element.style.屬性 = 值
element.style.cssText    #設置css
element.style.lenght    #長度
element.style.item()    #取第幾個
element.style.removeProperty('color')    #刪除樣式
element.style.setProperty('color', 'red')    #添加樣式
window.getComputedStyle(el, 'before').content

ES6 內置類型number和boolean

number 表示方式

ob 或 0B    #二進制
0o 或 0O    #八進制
0x 或 0X    #16進制

Number 特殊值

  • Number.MAX_VALUE 最大數值
  • Number.MIN_VALUE 最小數值
  • Number.NaN 特殊的非數字值
  • Number.NEGATIVE_INFINITY 負無窮大
  • Number.POSITIVE_INFINITY 正無窮大

Number 方法

typeof 判斷類型
parseInt()    #轉成數字
parseInt(10101, 2)    #二進制轉十進制 最大36進制
null    #空值
undefined    #未定義
numObj.toExponential()    #科學計數法
numObj.toFixed()    #四舍五入為指定小數位數的數字
numObj.toPrecision    #可在對象的值超出指定位數時將其轉換為指數計數法
numObj.tostring    #將—個數字轉換成字符串
Number.valueOf()    #返回原始值
toLocaleString('')    #方法可根據本地時間把 Date 對象轉換為字符串,並返回結果
isFinite()    #是否是數字
isNAN()    #是否不是數字
parseFloat()    #轉成小數

Boolean 類型

布爾值代表“真”和“假”兩個狀態。“真”用關鍵字true表示,“假”用關鍵字false表示。布爾值只有這兩個值。

  • 前置邏輯運算符: ! (Not)
  • 相等運算符:=,!,==,!=
  • 比較運算符:>,>=,<,<=
    轉換規則是除了下面六個值被轉為false,其他值都視為true:
  • undefined
  • null
  • false
  • 0
  • NaN
  • ""或''(空字符串)

ES6的內置類型之string

表示方法

  • 用 '' 或 ""
  • 多行字符串:\n 連接
  • ES6標准:用反引號 ... ,用 + 號連接

舉例

var name = 'de8ug';
var age = 17;
var hello = hi, 我是${name}, 今年${age};

常用方法

String.charAt()    #返回字符串中的第n個字符 
String.charCodeAt()    #返回字符串中的第n個字符的代碼 
String.concat()    #連接字符串 
String.fromCharCode()    #從字符編碼創建—個字符串 
String.indexOf()    #檢索字符串 
String.lastIndexOf()    #從后向前檢索一個字符串 
String.localeCompare()    #用本地特定的順序來比較兩個字符串 
String.match()    #找到一個或多個正則表達式的匹配 
String.replace()    #替換一個與正則表達式匹配的子串 
String.search()    #檢索與正則表達式相匹配的子串 
String.slice()    #抽取一個子串 
String.split()    #將字符串分割成字符串數組 
String.substr()    #抽取一個子串 
String.substring()    #返回字符串的一個子串 
String.toLocaleLowerCase()    #把字符串轉換小寫 
String.toLocaleUpperCase()    #將字符串轉換成大寫
String.toLowerCase()    #將字符串轉換成小寫 
String.toString()    #返回字符串 
String.toUpperCase()    #將字符串轉換成大寫 
String.valueOf()    #返回字符串 
String.includes()    #返回布爾值,表示是否找到了參數字符串 
String.startsWith()    #返回布爾值,表示參數字符串是否在原字符串的頭部 
String.endsWith()    #返回布爾值,表示參數字符串是否在原字符串的尾部 
String.repeat()    #方法返回一個新字符串,表示將原字符串重復n次 
String.padStart()    #用於頭部補全 
String.padEnd()    #用於尾部補全 

ES6的內置類型之null與undefined

  1. null: 值為空,不是一個全局的標識符
  2. undefined: 全局標識符,表示初始值未定義

ES6的內置類型之symbol

一種新的類型,得到一個唯一的值
console.log(Symbol('foo') === Symbol('foo'));
用於對象的屬性名:

  • 一種是字符串,
  • 另一種是Symbol 類型,可以保證不會與其他屬性名產生沖突。
    let s = Symbol(); #typeof s
    使用 Symbol 值定義屬性時,Symbol 值必須放在方括號之中
let s = Symbol('name')
let obj = {}
obj[s] = 'dongli'
#s不能再給新的Symbol值

ES6的數據結構Set與Map

  1. Map是一組鍵值對的結構,有非常快的查詢速度。
  • key值支持多種類型
  • 按插入順序排列
  • var map=new Map();
  • const map = new Map([[1,2], ['a', 'b']])
  • keys
  • values
  • forEach
  • delete
  • get
  • set
  • size
  • clear
  1. Set也是一組key的集合,存儲唯一值
  • var s1=new Set();
  • var s2=new Set([1,2,3,1,2,3,1,2,3]);
  • add
  • delete
  • has
  • clear
  • size

ES6的object對象

概念

  • js對象是一種無序的集合數據類型,由若干個鍵值對組成。
  • 對象是屬性的容器,每個屬性有名字和值,用k:v對應的關系表示,逗號隔開
  • 對象是無類型的,k,v的值都可以自定義
  • 對象可以嵌套,即對象包含對象,但不建議太多層
  • 屬性可以動態添加
  • 所有的屬性都是字符串,對應的值可以是任意的類型。

使用

  • K:V的K不需要加引號
  • 優先用. 其次考慮 []
  • 屬性通過原型鏈往上查找,Object.prototype沒有的屬性,會產生undefined
  • 屬性判斷:hasOwnProperty,不檢查原型鏈
  • 刪除:delete,不涉及原型鏈的對象
  • 全局變量:命名空間,唯一使用,靈活可讀


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM