做者:Kenmen
譯者:前端小智
來源:hackr.io
阿里雲最近在作活動,低至2折,有興趣能夠看看:
https://promotion.aliyun.com/...
爲了保證的可讀性,本文采用意譯而非直譯。javascript
Java | JavaScript |
Java是一種OOP編程語言。 | JavaScript是一種OOP腳本語言。 |
它建立在虛擬機或瀏覽器中運行的應用程序。 | 代碼在瀏覽器或node環境上運行。 |
須要編譯Java代碼。 | JS代碼都是文本的形式。 |
JavaScript 是一種輕量級的解釋型編程語言,具備面向對象的特性,容許各位在其餘靜態HTML頁面中構建交互性。 該語言的通用核心已嵌入Netscape,Internet Explorer和其餘Web瀏覽器中。css
JS 支持的數據類型:html
如下是JS的特性:前端
是的,JS是一種區分大小寫的語言。關鍵字、變量、函數名和任何其餘標識符必須始終使用一致的大寫字母進行使用。java
如下使用JS的優勢:node
JS賊支持對象概念,用以下方式建立便可:git
var emp = { name: "Daniel", age: 23 };
JS 建立數組也很簡單:程序員
var x = []; var y = [1, 2, 3, 4, 5];
命名函數在定義後當即聲明名稱,可使用function
關鍵字定義:github
function named(){ // write code here }
能夠。一個匿名函數能夠分配給一個變量,它也能夠做爲參數傳遞給另外一個函數。編程
JS 變量arguments
表示傳遞給函數的參數。 使用typeof
運算符,能夠得到傳遞給函數的參數類型。以下:
function func(x){ console.log(typeof x, arguments.length); } func(); //==> "undefined", 0 func(7); //==> "number", 1 func("1", "2", "3"); //==> "string", 3
變量的做用域是程序中定義它的區域,JS變量只有兩個做用域:
this
」運算符的用途是什麼?this
關鍵字引用它所屬的對象。 根據使用位置,它具備不一樣的值。 在方法中,這指的是全部者對象,而在函數中,這指的是全局對象。
回調函數是做爲參數或選項傳遞給某個方法的普通JS函數。它是一個函數,在另外一個函數完成執行後執行,所以稱爲回調。在JS中,函數是對象,所以,函數能夠接受函數做爲參數,而且能夠由其餘函數返回。
只要在某個內部做用域內訪問在當前做用域以外定義的變量,就會建立閉包。 它容許你從內部函數訪問外部函數的做用域。 在JS中,每次建立函數時都會建立閉包。 要使用閉包,只需在另外一個函數內定義一個函數並暴露它。
內置方法 | 返回值 |
CharAt() | 它返回指定索引處的字符。 |
Concat() | 它鏈接兩個或多個字符串。 |
forEach() | 它爲數組中的每一個元素調用一個函數。 |
indexOf() | 它返回指定值第一次出現時調用字符串對象中的索引。 |
pop() | 它從數組中刪除最後一個元素並返回該元素。 |
push() | 它將一個或多個元素添加到數組的末尾,並返回數組的新長度。 |
reverse() | 反轉數組元素的順序。 |
在JS中命名變量時要遵循如下規則:
break
或boolean
變量名無效。(0-9)
開頭。它們必須以字母或下劃線開頭。例如,123name
是一個無效的變量名,但123name
或name123
是一個有效的變量名。Test
和test
是兩個不一樣的變量。typeof
運算符用於獲取其操做數的數據類型。 操做數能夠是文字或數據結構,例如變量,函數或對象。 它是一個一元運算符,放在它的單個操做數以前,能夠是任何類型。 它的值是一個字符串,表示操做數的數據類型。
建立cookie
的最簡單方法是爲document.cookie
對象分配一個字符串值,以下所示:
document.cookie = "key1 = value1; key2 = value2; expires = date";
讀取cookie
就像寫入cookie
同樣簡單,由於document.cookie
對象的值是cookie
。
document.cookie
的值是由分號分隔的name=value
對的列表,其中name
是cookie的名稱,value
是其字符串值。split()
方法將字符串分解爲鍵和值。若是要刪除cookie
以便後續嘗試讀取cookie
,則只需將過時日期設置爲過去的時間。 我們應該定義cookie
路徑以確保刪除正確的cookie
。 若是未指定路徑,某些瀏覽器將不容許我們刪除cookie
。
type =「text」
,value ='Name'
等。下面是在JS代碼中訪問 html 元素的方法列表:
id
名稱獲取元素主要有三種:
行內方式:
... <input type="button" value="點擊有驚喜" onclick="javascript:alert('哈哈哈哈')"> ...
內部方式:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <script type="text/javascript"> //聲明一個函數(整個文檔均可以使用) function surprise() { alert('恭喜你中了一百萬')/*彈出框*/ } </script> </head> 。。。 </html>
外部方式:
... <!--不少html頁面均可以調用js4.js頁面--> <script src="../../js/js4.js" type="text/javascript" charset="utf-8"> ...
在 JS 中聲明變量有三種方式:
var
語句用於聲明一個變量,我們能夠選擇初始化該變量的值。例子:var a =10;
變量聲明在代碼執行以前處理。類型化語言中,值與值關聯,而不是與變量關聯,它有兩種類型:
number
, string
類型。string
的變量只能包含一組字符,不能包含其餘類型。特性 | Cookie | localStorage | sessionStorage |
數據的生命期 | 通常由服務器生成,可設置失效時間。若是在瀏覽器端生成Cookie,默認是關閉瀏覽器後失效 | 除非被清除,不然永久保存 | 僅在當前會話下有效,關閉頁面或瀏覽器後被清除 |
存放數據大小 | 4K左右 | 通常爲 5MB | |
與服務器端通訊 | 每次都會攜帶在HTTP頭中,若是使用cookie保存過多數據會帶來性能問題 | 僅在客戶端(即瀏覽器)中保存,不參與和服務器的通訊 | |
易用性 | 須要程序員本身封裝,源生的Cookie接口不友好 | 須要程序員本身封裝,源生的Cookie接口不友好 源生接口能夠接受,亦可再次封裝來對Object和Array有更好的支持 |
==
: 兩邊值類型不一樣的時候,要先進行類型轉換,再比較。 ===
:不作類型轉換,類型不一樣的必定不等。
一言以蔽之:==
先轉換類型再比較,===
先判斷類型,若是不是同一類型直接爲false
。
undefined
是基本數據類型 表示未定義 缺乏的意思。
null
是引用數據類型,是對象,表示空對象
undefined
是從null
派生出來的 因此undefined==null
爲 true
undeclared
的變量是程序中不存在且未聲明的變量。 若是程序嘗試讀取未聲明變量的值,則會遇到運行時錯誤。undefined的變量是在程序中聲明但未賦予任何值的變量,若是程序試圖讀取未定義變量的值,則返回undefined
的值。
JS框架是用JavaScript編寫的應用程序框架,它與控制流中的JS庫不一樣,一些最經常使用的框架是:
window:JS 的 window 是一個全局對象,它包含變量、函數、history
、location
。
document:document
也位於window
之下,能夠視爲window
的屬性。
innerHTML:也就是從對象的起始位置到終止位置的所有內容,包括Html標籤。
innerText:從起始位置到終止位置的內容, 但它去除Html標籤
事件冒泡是HTML DOM API中事件傳播的一種方式,當一個事件發生在另外一個元素中的一個元素中,而且兩個元素都註冊了該事件的句柄時。經過冒泡,事件首先由最內部的元素捕獲和處理,而後傳播到外部元素。執行從該事件開始,並轉到其父元素。而後執行傳遞給父元素,以此類推,直到body元素。
NaN
即非數值(Not a Number),NaN
屬性用於引用特殊的非數字值,該屬性指定的並非不合法的數字。
NaN
屬性 與 Number.Nan
屬性相同。
提示: 請使用 isNaN()
來判斷一個值是不是數字。緣由是 NaN
與全部值都不相等,包括它本身。
二者之間的一個區別是,原始數據類型是經過值傳遞的,對象是經過引用傳遞的。
parseInt(string, radix)
將一個字符串 string
轉換爲 radix
進制的整數, radix 爲介於2-36
之間的數,以下:
parseInt("4F", 16)
因爲2
和5
是整數,它們將以數字形式相加。由於3
是一個字符串,它將與 7
拼接,結果是73。
import
和export
有助於我們編寫模塊化JS代碼。 使用import
和export
,我們能夠將代碼拆分爲多個文件,以下:
//------ lib.js ------</span> export const sqrt = Math.sqrt;</span> export function square(x) {</span> return x * x;</span> } export function diag(x, y) { return sqrt(square(x) + square(y)); } //------ main.js ------</span> { square, diag } from 'lib'; console.log(square(5)); // 25 console.log(diag(4, 3)); // 5
嚴格模式是在代碼中引入更好的錯誤檢查的一種方法。
「use strict」
來啓用嚴格模式提示框是容許用戶經過提供文本框輸入輸入的框。 prompt()
方法顯示一個對話框,提示訪問者輸入。 若是您但願用戶在輸入頁面以前輸入值,則一般會使用提示框。 彈出提示框時,用戶必須在輸入輸入值後單擊「肯定」或「取消」才能繼續。
var Y = 1; if (eval(function f(){})) { y += typeof F; } console.log(y);
打印1undefined
。if
條件語句使用eval
求值,所以eval(function f(){})
返回函數f(){}
(爲真)。所以,在if
語句中,執行typeof f
返回undefined,由於if
語句代碼在運行時執行,而if
條件中的語句在運行時計算。
call
和apply
能夠用來從新定義函數的執行環境,也就是this
的指向;call
和apply
都是爲了改變某個函數運行時的context
,即上下文而存在的,換句話說,就是爲了改變函數體內部this
的指向。
call()
調用一個對象的方法,用另外一個對象替換當前對象,能夠繼承另一個對象的屬性,它的語法是:
Function.call(obj[, param1[, param2[, [,...paramN]]]]);
說明:call
方法能夠用來代替另外一個對象調用一個方法,call
方法能夠將一個函數的對象上下文從初始的上下文改變爲obj
指定的新對象,若是沒有提供obj
參數,那麼Global
對象被用於obj
apply()
和call()
方法同樣,只是參數列表不一樣,語法:
Function.apply(obj[, argArray]);
說明:若是argArray
不是一個有效數組或不是arguments
對象,那麼將致使一個TypeError
,若是沒有提供argArray
和obj
任何一個參數,那麼Global
對象將用做obj。
有許多方法能夠用來清空數組:
方法一:
arrayList = []
上面的代碼將把變量arrayList
設置爲一個新的空數組。若是在其餘任何地方都沒有對原始數組arrayList
的引用,則建議這樣作,由於它實際上會建立一個新的空數組。我們應該當心使用這種清空數組的方法,由於若是你從另外一個變量引用了這個數組,那麼原始的引用數組將保持不變。
方法二:
arrayList.length = 0;
上面的代碼將經過將其length
設置爲0
來清除現有數組。這種清空數組的方式還會更新指向原始數組的全部引用變量。 所以,當你想要更新指向arrayList
的全部引用變量時,此方法頗有用。
方法三:
arrayList.splice(0, arrayList.length);
這處方法也行,固然這種清空數組的方法也將更新對原始數組的全部引用。
方法四:
while(arrayList.length) { arrayList.pop(); }
上面的實現也能夠空數組,但一般不建議常用這種方式。
var output = (function(x) { delete x; return x; } )(0); console.log(output);
打印 0
。delete
操做符用於從對象中刪除屬性。這裏x
不是一個對象,而是一個局部變量,刪除操做符不影響局部變量。
var X = { foo : 1}; var output = (function() { delete X.foo; return X.foo; } )(); console.log(output);
輸出 undefined
。delete
操做符用於刪除對象的屬性。X
是一個具備foo
屬性的對象,因爲它是一個自調用函數,因此我們將從對象X
中刪除foo
屬性。這樣作以後,當我們試圖引用一個被刪除的foo
屬性時,結果是undefined
。
var foo = function Bar() { return 7; }; typeof Bar();
輸出將是引用錯誤
。函數定義只能有一個引用變量做爲其函數名。
這是一種愈來愈廣泛的作法,被許多流行的JS庫所採用。 這種技術圍繞文件的整個內容建立一個閉包,最重要的是,它能夠建立一個私有命名空間,從而有助於避免不一樣JS模塊和庫之間潛在的名稱衝突。
該技術的另外一個特性是容許爲全局變量提供一個簡單的別名,這在jQuery插件中常用。
JS轉義字符使我們可以在不破壞應用程序的狀況下編寫特殊字符。轉義字符(\
)用於處理特殊字符,如單引號、雙引號、撇號和&
號,在字符前放置反斜槓使其顯示。
如:document.write("I am a \"good\" boy")
代碼部署後可能存在的BUG無法實時知道,過後爲了解決這些BUG,花了大量的時間進行log 調試,這邊順便給你們推薦一個好用的BUG監控工具 Fundebug。
原文:https://hackr.io/blog/javascr...
乾貨系列文章彙總以下,以爲不錯點個Star,歡迎 加羣 互相學習。
https://github.com/qq44924588...
我是小智,公衆號「大遷世界」做者,對前端技術保持學習愛好者。我會常常分享本身所學所看的乾貨,在進階的路上,共勉!
關注公衆號,後臺回覆福利,便可看到福利,你懂的。
每次整理文章,通常都到2點才睡覺,一週4次左右,挺苦的,還望支持,給點鼓勵