前端_JavaScript_基礎語法

JavaScript

ECMAScript的一種實現方式,輕量級的腳本語言,自己不提供I/O(輸入/輸出)相關的API,host提供。es6

語法

變量
對"值"的具名引用,變量名區分大小寫. 聲明變量的六種方法:var function let const import class
 變量提高:JavaScript引擎的工做方式,先解析代碼,獲取全部被聲明的變量,而後再一行行地運行.全部的變量聲明語句會被放在代碼的頭部.
 let聲明變量:不存在變量提高(先聲明後使用),存在塊級做用域.存在"暫時性死區"(在let/const未聲明前,使用則報錯.),暫時性死區的本質是執行當當前做用域,在等到變量聲明那一行出現,在獲取和使用該變量.不容許重複聲明.
 const聲明常量,聲明以後不可改變,存在塊級做用域,存在"暫時性死區",保證了內存地址存在的數據不可改變,指針永遠執行它.
標識符
變量名,函數名等.命名規則,首字母能夠是字母或$或_,餘下字符:除了Unicode字母,美圓符號和下劃線,還能夠用數字0-9 使用駝峯命名法.
保留字##:不能做爲標識符使用
agargument,break,case,catch,class,const,continue,debugger,
 default,delete,do,else,enum,eval,export,extends,flase,finally,for,function,if,implements,
 import,in,instanceof,interface,let,new,null,package,private,
 protected,public,return,static,super,switch,this,throw,true,try,typeof,var,void,while,with,yield.
註釋
一種單行註釋:用//開頭. 多行註釋: /*和*/之間. <!---->
語句
if結構 if..else結構 switch結構 三元運算符?: while循環 for循環 do...while循環 break語句和continue語句 lable標籤if語句,if-else語句,switch語句,注意switch語句後面的表達式,與case語句後面的表達式比較運算結果時,採用的是嚴格相等運算符(===),而不是相等運算符(==),即不會發生類型轉換.

數據類型

運行時類型是代碼實際執行過程當中咱們用到的類型。全部的類型數據都會屬於 7 個類型之一。從變量、參數、返回值到表達式中間結果,任何 JavaScript 代碼運行過程當中產生的數據,都具備運行時類型。

JavaScript 語言的每個值都屬於某一種數據類型。規定 7 種語言類型。語言類型普遍用於變量、函數參數、表達式、函數返回值等場合。分別是: number (數字),string(字符串),boolean(布爾型),undefined(未定義),null(空),object(對象), Symbol(複合).算法

原始類型:Number/String/Boolean ,特殊值:null/undefined. 
  合成類型:object,存放許多值的容器.對象細分爲:狹義的對象,數組,函數.
  判斷一個值的類型: typeof運算符, instanceof運算符 object.prototype.toString運算符
  歷史遺留,typeof null 會返回object instanceof能夠區分array和object
null和undefined
null是一個表示"空"的對象,轉爲數值時爲0,undefined是一個表示"此處無定義"的原始值,轉爲數值爲NaN.null:比如待補球員. 在任何代碼中,你均可以放心用 null 關鍵字來獲取 null 值
 undefined: 當變量聲明瞭,但沒有賦值,調用函數時,該提供的參數沒有提供,該參數等於undefined.對象沒有賦值的屬性,函數沒有返回值時,默認返回undefined.
Bollean
真true,假false.如下運算符返回布爾值,前置邏輯運算符! ,相等運算符 === !== == != 比較運算符 > >= < <=  如下六個值被轉爲false(undefined,null,false,0 NaN, ""或'),其餘值都視爲true,空數組{}和空對象對應的布爾值都是true.
Number
在JavaScript內部,全部的數字都是小數(64位浮點數),對於某些運算須要整數,會自動把64位數浮點數轉換爲32位整數,再進行運算. Js中最大數值爲2的1024次方,超出則Infinity. Js中最小值爲2的-1075次方,超出則0.數值的進制:十進制,十六進制(0x或0X),八進制(0o或0O),二進制(0B或0b).歷史遺留,0888會被看作八進制.
特殊數值:正零和負零,Js內部的2個0,一個是+0,-0,區別是64位浮點數表示法的符號位不一樣,它們爲等價的。
NaN是JavaScript的特殊值,數據類型依然屬於Number,表示「非數字」,主要出如今將字符串解析成數字出錯的場合。NaN不等於任何值,包括它自己。
Infinity.表示「無窮」。Infinity,無窮大;-Infinity,負無窮大。
Number 類型有 18437736874454810627(即 2^64-2^53+3) 個值。
String
string:字符串'abc'或"abc", 要在''裏面使用單引號加反斜槓\,用來轉義。 length屬性返回字符串長度。String 用於表示文本數據。
String 有最大長度是 2^53 - 1 ,字符串的最大長度,其實是受字符串的編碼長度影響的,JavaScript 中的字符串是永遠沒法變動的,一旦字符串構造出來,沒法用任何方式改變字符串的內容,因此字符串具備值類型的特徵。
Symbol
它是一切非字符串的對象 key 的集合,在 ES6 規範中,整個對象系統被用 Symbol 重塑。
建立 Symbol 的方式是使用全局的 Symbol 函數。例如 var mySymbol = Symbol("my symbol");
Object
object是JavaScript語言的核心概念,對象是一組"鍵值對(key-value)"的集合,屬性的讀取與賦值(.運算符和[]運算符).
對象的定義是「屬性的集合」。屬性分爲數據屬性和訪問器屬性,兩者都是 key-value 結構,key 能夠是字符串或者 Symbol 類型。
「類」僅僅是運行時對象的一個私有屬性,而 JavaScript 中是沒法自定義類型的。
幾個基本類型,都在對象類型中有一個「親戚」。如:Number;String;Boolean;Symbol。因此,咱們必須認識到 3 與 new Number(3) 是徹底不一樣的值,它們一個是 Number 類型, 一個是對象類型

查看一個對象自己的全部屬性,可使用object.keys方法. 屬性的刪除,只能刪除對象自己的屬性 delete Objectname.value;
屬性是否存在 in運算符 'value' in Objectname; 屬性的遍歷 for..in循環,用來遍歷一個對象的所有屬性,不只遍歷對象自身的屬性,還遍歷繼承的屬性。數組

function:函數是一段能夠反覆調用的代碼塊,是處理數據的方法,是JavaScript的第一等公民。函數還能接受輸入的參數,不一樣參數返回不一樣值。
若是同一個函數被屢次聲明,後面的聲明就會覆蓋前面的聲明.
聲明函數的方法:function 函數表達式 Function構造函數
array: 數組是方括號裏面按次序排列的一組值。能夠先定義後賦值,能夠放入任何數據類型。
<script>數據結構

(1)function命令
function print(s) {  //function命令後面就是函數名,函數名後面一組圓括號,裏面是傳入的參數,函數體放入大括號裏面。
    console.log(s);
}
(2)函數表達式
let  print = function(s) {  //表達式的function命令以後,如要加函數名,則只會在函數體內部有效,在函數體外部無效.
    console.log(s);
};
(3)Function構造函數
let  add = new Function (
   'x',
   'y',
   'return x + y'
    );

</script>
除了這七種語言類型,還有一些語言的實現者更關心的規範類型。
List 和 Record: 用於描述函數傳參過程。
Set:主要用於解釋字符集等。
Completion Record:用於描述異常、跳出等語句執行過程。
Reference:用於描述對象屬性訪問、delete 等。
Property Descriptor:用於描述對象的屬性。
Lexical Environment 和 Environment Record:用於描述變量和做用域。
Data Block:用於描述二進制數據。
01.png函數

運算符

處理數據的基本方法,從現有的值獲得新的值.
算術運算符,比較運算符,布爾運算符,二進制運算符,其餘運算符,運算順序.
算術運算符:加法運算符(+),減法運算符(-),乘法運算符(),除法運算符(/),指數運算符(**)餘數運算符(%),自增運算符(++x/++x),學習

自減運算符(--x/x--),數值運算符(+),負數值運算符(-x)
加法運算符容許非數值的相加.

比較運算符: >(大於運算符) <(小於運算符) <=(小於或等於運算符) >=(大於或等於運算符) ==(相等運算符) ==(嚴格運算符) !=(不相等運算符)
!==(嚴格不相等運算符)
布爾運算符:!(取反運算符) &&(且運算符) ||(或運算符) ?:(三元運算符) ·如下運算符(undefined,null,false,0,NaN,'')取反爲true.
二進制位運算符:
其餘運算符,運算順序:
void運算符,執行一個表達式,如何不返回任何值.或者返貨undefined.
逗號運算符,用於對兩個表達式求職,並返回後一個表達式的值.
運算符的優先級別:*this

  • ()最高
  • 一元運算符 ++ -- !.
  • 算術運算符: 先* / % 後 + -
  • 關係運算符 > >= < <=
  • 相等運算符 == != === !==
  • 邏輯運算符 先$$ 後||

專題一:數據類型的轉換

Number():解析爲數值,不可解析與undefined則NaN,空字符串與null則爲0,true轉爲1.false轉爲0.
String():解析爲字符串。
Boolean():轉爲布爾值,如下五個值(undefined,null,-0或+0,NaN,''(空字符串))的轉換結果爲false,其餘的值爲true.
StringToNumber():字符串到數字的類型轉換,存在一個語法結構,類型轉換支持十進制、二進制、八進制和十六進制,編碼

裝箱轉換

每一種基本類型 Number、String、Boolean、Symbol 在對象中都有對應的類,所謂裝箱轉換,正是把基本類型轉換爲對應的對象,它是類型轉換中一種至關重要的種類。

拆箱轉換

在 JavaScript 標準中,規定了 ToPrimitive 函數,它是對象類型到基本類型的轉換(即,拆箱轉換)。對象到 String 和 Number 的轉換都遵循「先拆箱再轉換」的規則。經過拆箱轉換,把對象變成基本類型,再從基本類型轉換爲對應的 String 或者 Number。拆箱轉換會嘗試調用 valueOf 和 toString 來得到拆箱後的基本類型。若是 valueOf 和 toString 都不存在,或者沒有返回基本類型,則會產生類型錯誤 TypeError。

專題二: 執行上下文與內存空間

在JavaScript中,全部數據保存在堆(heap)裏面,執行上下文的的執行順序借用棧數據結構的存取方式.棧是先進先出(FIFO),而JavaScript具備垃圾回收機制,經過標記清除算法清除再也不使用的對象.
一個頁面開始加載JS就進入全局環境,每段函數的加載,進入函數環境(又稱爲執行上下文).執行上下文分爲兩個階段:建立階段:(建立變量對象,創建做用域鏈,肯定this指向)+代碼執行階段(變量賦值,函數引用,執行額外代碼)spa

專題三: 原型與原型鏈

原型:全部對象都有它.
構造函數:能夠經過new建立一個對象.
實例:經過構造函數和new建立的對象就是實例,實例經過_proto_指向原型,經過constructor指向構造函數.
原型鏈: _proto_將對象鏈接成原型鏈,實現繼承與共享屬性的對象鏈.prototype

//實例
const instance = new Object()  
//實例爲instance 構造函數是Object

    圖片描述

雜症

有的內容看不懂,該如何學習,如何定位這塊的知識呢

好比對 JavaScript 問題,先搞清楚看不懂的是詞法問題、語法問題、仍是運行時問題?定位清楚了問題,你已經距離解決問題前進了一大步。

參考

(1)網道-互聯網開發文檔(https://wangdoc.com/).
(2)ECMAScript 6 入門 (http://es6.ruanyifeng.com/).

相關文章
相關標籤/搜索