JavaScript基本語法(一)是JavaScript核心知識點(ECMAScript)的基本語法的第一部分,主要介紹了:JavaScript語句、表達式、變量和數據類型(不包括函數類型)的基本知識點,函數類型將在下一章《JavaScript函數(二)》中詳細探討;javascript
JavaScript程序的執行是由一條條語句組成的;java
每一條語句是爲完成特定任務而執行的操做;算法
語句當中能夠包含處理數據的表達式,表達式指可獲得返回值的計算式;數組
語句結束的標誌是;
;ide
var a = 1; //執行賦值操做的語句,結束標誌的分號 var b = 1+1; //執行賦值操做的語句,賦值操做符右邊使用了表達式,返回值爲2,結束標誌是分號
JavaScript是一門弱類型語言,經過使用關鍵字var
聲明變量,在賦值時變量的數據類型將根據值的類型動態轉變,從而體現弱類型的特徵。函數
聲明變量但爲賦值
變量只聲明不賦值,則變量被賦一個特殊的值undefined
;spa
var a; a//undefined
聲明變量並賦值
變量既聲明又賦值,則產生變量提高,即js引擎在解析階段會將全部的聲明變量提高到當前做用域的頭部;prototype
var a = 1; //等價於 var a; a = 1;
一次性聲明多個變量設計
var a=1, b=2, c=3;
標識符即標識變量的名字,例如var a =1
,標識符爲a
,標識符的命名規則以下:code
第一個字符必須是任意Unicode字母、下劃線_或是美圓符號$;
其餘字符除了運算符外,基本均可以使用;
變量名一般採用camelCase;
ECMA-262規定的關鍵字和保留字不能用做標識符;
JavaScript的數據類型主要包括數值、字符串、布爾值、對象、undefined
和null
,ES6新增Symbol
;
其中,數值、字符串和布爾值可稱爲基本數據類型,由於全部的數據都是由這三種最基本的類型的值構成;
對象可稱爲複雜數據類型,這裏的對象指的是廣義的對象,具體可細分爲:
狹義的對象(object)
數組(array)
函數(function)
狹義的對象和數組本質上是基本類型數據的集合,對象是一組無序鍵值對的集合,數組則是一組有序鍵值對(鍵名爲從0開始的數字)的集合;
函數在JavaScript當中既是處理數據的方法,更是一種數據類型,既可賦值也能傳參;
數值型
Number類型全部數字以64位浮點數形式存儲(至關於雙精度數值);
各類進制的數字的字面量表示
var a = 12//十進制,12 var b = 0B1//二進制,2 var c = 010 //八進制,8 var d = 0x10 // 十六進制,16 var e = 1.503e7 //科學計數法,15030000
【TIP】
在進行進制間的算術計算時,最終將轉換爲十進制;
八進制在嚴格模式下是無效的,會報錯;
數值的範圍
js能表示的數值的最大、最小範圍保存在Number.MAX_VALUE
和Number.MIN_VALUE
當中;
無窮大的數值存儲在Number.POSITIVE_INFINITY
,無窮小的數值Number.NEGEITIVE_INFINITY
,可用isFinite()
函數檢測一個數值是不是無窮數值;
NaNNaN
是一個特殊的數值,表示非數字,主要出如今原本要返回數值的操做數未返回數值的狀況下最終拋出一個NaN
替代,主要出現場景以下:
//在進行算術運算時,沒法將該變量進行數據類型轉換爲數值; var a =1,b= "h" a-b //不符合算是運算法則 0/0
【TIP】
使用typeof NaN
會拋出"number"
,證實NaN
是一個特殊的數值;NaN === NaN
結果是false
,證實,NaN
不等於任何值;
可以使用isNaN()
判斷一個值是否爲NaN
數值類型轉換
js提供三個方法將數據轉換爲數值類型,包括Number()
、parseInt()
和parseFloat()
;Number()
可將全部類型數據轉換爲數值,parseInt()
和parseFloat()
能將字符串轉換爲數值;
Number()除了值爲undefined、字符串和對象沒法轉換爲數值的將轉換爲NaN,其餘均可轉換爲數值;
此外,還可使用算術操做符實現數值類型轉換,做用相同於Number():
<pre>
在進行字符串轉換爲數值時,一般使用parseInt(),該方法的處理原理是忽略字符串前的空格,直到找到第一個非空格字符,
若是第一個字符不是數字字符或負號,則返回NaN,也就是說parseInt('')和parseInt(null)與Number()的返回值不一樣;
</pre>
<pre>
可爲parseInt()提供第二個參數,指明要進行轉換的數值的進制
</pre>
<pre>
parseFloat()方法的處理原理基本和parseInt()相似,區別在遇到第一個小數點是有效的,第二小數點是無效的,而且直解析十進制;
</pre>
字符串型
字符串能夠看作是放置在''
或""
內的零個或多個字符的數據;
字符串的多種處理方式
//可用單引號也可用雙引號; var a = "H", b = 'E'; //長字符串的表示,多適用於HTML模板的表示 var c = " <template> \ <h1>JavaScript</h1> \ <p>Hello World!</p> \ </template> " //多個字符串的拼接,多適用於添加js代碼 var c = "hello"+"world"+document.getElementById('demo').innerHTML
轉移字符
string數據類型包含一些特殊的字符,用於表示非打印字符或是具備其餘用途的字符;
\t:製表符 \n:換行符 \r:回車 \b:退格 \\:反斜槓 \':單引號 \":雙引號 \xnn:以十六進制代碼nn(n爲0~F)表示一個字符,如\x41表示"A" \unnnn:以十六進制代碼nnnn表示一個Unicode字符
字符串類型轉換
將其餘類型數據轉換爲字符串型有三種方法:
1.每一個字符串均有toString()方法 var a = 11,b; a.toString()//"11" b.toString()//對於只聲明未賦值的變量或null,toString()將報錯
2.String()函數對於任何類型的數據均有效 String(null)//"null" String(undefined)//"undefined" String(true)//"true"
3.空字符串""+其餘類型數據 ""+undefined//"undefined" ""+null//"null"
字符串與數組
字符串能夠看做字符數組而且具備length
屬性,和真實數組不一樣的是該數組元素只能讀不能寫,而且沒有數組相應的方法;
布爾型
布爾型數據使用true
和false
表示,表明真或假,js中全部類型的數據均可以表示成布爾類型的數據;
布爾類型數據轉換
可以使用轉型函數Boolean()可將數據轉換爲布爾型數據;
除了如下六個數據外,其餘類型的布爾值均爲true
;
0 NaN undefined null "" false
布爾型的應用場景
布爾型數據每每結合流程控制語句用於執行條件代碼塊
var message = "hello world" if(message){ alter(message) }
對象類型
對象本質上是由若干鍵值對構成的無序數據的集合;
對象的建立
對象建立的方法包括如下3種:
1.字面量法 var a = {a:1,b:2}; 2.Object構造函數法 var b = new Object(); 3.Object.create()法 var c = Object.create(null)
以上3種方法,字面量法最爲簡潔,Object方法比較正式,Object.create()經常使用於原型繼承場景;
對象的讀寫操做
對象的鍵或值可看作對象的屬性和方法,屬性表明對象的特性,方法表明對象的能力;
//寫操做 1.直接賦值 var a = { name:"teren", age:18, say:function(){ console.log('hi') } } 2.動態建立 a.height = 185 a.['weight'] = '60kg' a.ability = function(){ return "talk" } //讀操做 a.name a['age']
查看全部屬性
Object.keys(a)
delete命令
delete命令用於刪除對象的屬性,但delete只能刪除對象自己的屬性,沒法刪除繼承的屬性;由var聲明的全局變量默認是沒法刪除的;在Object.definedProperty方法的configurable
定義爲false的也不能刪除;
in運算符
in運算符可用來判斷對象的某個屬性是否存在,但in沒法判斷這個屬性是屬於自身的仍是繼承的,可用Object.hasOwnProperty()
去判斷屬性;
數組
數組是按照必定次序(起始編號爲0的數字序列)的一組數據集合;
數組的讀寫操做
數組的length屬性
length屬性是一個動態值,根據數組元素成員個數而發生變化;
length屬性是可寫的,當length屬性的長度大於當前長度,則會向數組添加undefined值,若小於當前長度則會刪減值,可利用這一特性清空數組;
數組的遍歷
數組的遍歷最經常使用方法爲for循環,此外還有forEach、for in和Object.keys();
var arr = [1,2,3,4] for(var i=0;i<arr.length;i++){ console.log(arr[i]) }
var arr = [1,2,3,4] arr.foo = true; for(var key in arr){ console.log(key) } //0 //1 //2 //3 //4 //foo [注]for...in循環不只遍歷數組的數字鍵,還會遍歷非數字鍵,因此通常數組的循環遍歷都採用for循環;
var arr = [1,2,3,4] arr.forEach(function(value,key){ console.log(key+"."+value) })
var arr = [1,2,3] console.log(Object.keys(arr))
類數組對象
js中有些對象被稱做「類數組對象」,樣子看上去很像數組,實際是個對象,而且沒有數組的相關屬性和方法,例如函數的arguments
對象、DOM元素集和字符串;
可使用Array.prototype.slice.call(likeArrayObject)
使得類數組對象變成真實的數組;
經過整篇文章,咱們能夠了解到:
JavaScript的代碼是由一條條語句組成的,分號表示一條語句的結束;
語句當中包含處理數據的表達式,表達式是能夠獲得返回值的計算式;
JavaScript是一門弱類型語言,使用var
聲明變量是,變量的數據類型將根據具體值而動態轉變;
JavaScript的數據類型主要包括數值、字符串、布爾型、對象(狹義的對象、數組和函數)、undefined和null六種;
數值、字符串、布爾型又稱爲基本數據類型,全部的數據都是由這三種最基本的數據類型構成,對象、數組和函數可稱爲複雜數據類型,由基本數據類型構成;
數值類型的數據可經過不一樣的前綴表示不一樣進制的數值,也可用科學計數法表示,存在最值和無窮值;NaN
是一個特殊的數值,常出如今不符合算術運算法則和沒法將變量進行數據類型轉換爲數值的運算場景;數值類型轉換的方法包括Number()
,parseInt()
,parseFloat()
和+
;
字符串能夠看作是放在引號內的零個或多個字符的數據;部分特殊字符須要轉移符號反斜槓才能表示出來;字符串能夠看作是類數組數據,可以使用Array.prototype.slice.call(str)
將其轉變爲真數組;字符串類型轉換方法包括String()
,toString()
和 ""
;
布爾型的值只有true
和false
,js中全部類型的數據均可以表示成布爾類型的數據;布爾類型的數據轉換方法有Boolean()
和!!
;除了false
,null
,undefined
,0
,NaN
,""
外,其餘全部類型的數據的布爾值都是true
;
對象本質上是若干鍵值對構成的無序數據的集合;對象的建立方法包括{}
,new Object
和Object.create(null)
;對象的讀寫操做可以使用點操做和方括號操做;遍歷對象的方法有for...in
和Object.keys()
;可以使用delete
命令刪除對象的自身屬性,繼承的屬性、var
聲明的變量以及在Object.definedProperty({},"name",{value:"teren",configurable:false})
也沒法刪除;
數組是按照必定次序(起始編號爲0的數字序列)的一組數據集合;數組的讀寫操做只能使用方括號操做;遍歷數組的方法包括for
,forEach
,Obeject.keys
;類數組對象包括HTMLCollection對象
、函數的arguments對象
以及字符串,可使用Array.prototype.slice.call(likeArrayObject)
使得類數組對象變成真實的數組;
《JavaScript高級程序設計(第3版)》