標籤:運算 存在 邏輯 資料 首碼 作用 class 單詞 3.1
Js基礎文法
- 在js裡是區分大小寫
- 標識符:指變數,數組,函數等名字.定義標識其實就是取名字的過程.
硬性要求:指必需要滿足的,否則無法通過編譯
可不滿足
硬性要求內容:
1.由數字,字母和底線,以及$組成,但不能以數字開頭,禁止使用ES裡面的關鍵字和保留字(其實就是ES裡內建的標識符).
2.區分大小寫
軟性要求內容:望文知意
命名法則
駝峰命名法:駝峰命名法分兩種,大寫是大駝峰(帕斯卡命名法),第一個單詞首字母小寫是小駝峰.
匈牙利命名法:就是以一個或者多個單片語成.前面還會加上一個固定的首碼.這個固定的首碼就表明該變數的類型.
a_Li
蛇形命名法:指單詞之間,以底線進行分割
user_name
這種命名法,一般常見Linux核心,C++儲存庫,Ruby裡常見.
關於ES裡面的注釋
兩種:
單行://
多行:/**/
strict 模式
從ES5開始引進的一種模式,更加的嚴格,減少歧義,解析更快,可作為下一個版本的參照.
如何進入strict 模式?
“use strict” defined 使用/嚴格/未定義
Js語句
- 和多數程式設計語言一樣,每個語句以分號結尾,可以不寫,但是考慮到後期壓縮,所以建議養成書寫分號的習慣.
- 關鍵字和保留字
關鍵字:指ES裡定義好了的標識符,我們自己命名的時候,就不能再使用這些關鍵字:else if break
保留字:所謂保留字,指該版本更新後可能會被變成關鍵字的字
變數
就是儲存在裡面的資料隨時可以變化的.
使用變數前先聲明,3個關鍵字:var let const
Var 是ES6之前聲明使用的.
Let 和const 是ES6開始新增的
聲明變數的文法:
關鍵字 變數名
Var i
(沒賦值,預設為undefined)
變數的聲明和複製是可以同時進行的,如果是第一次給變數賦值,那麼這個過程叫做變數的初始化.
Var i=5;
可一次性聲明多個變數
在聲明變數的時候只能進行賦值操作,不能進行其他運算,比如+=.
- var 支援重複聲明 如:i=5 i=10
- 先聲明,再定義未賦值,未賦值的會被忽略
- 支援遺漏 沒有聲明,直接賦值
由於JS是一門解釋性語言(動態語言),所以聲明好的變數可以儲存任意類型。
Let,不支援以上1.2.3聲明特性
特點:
1.變數提升(重要)
之所以現在不推薦使用以var來聲明變數,是因為var聲明有一個變數提升。所謂變數提升,就是指將變數的聲明提升至當前範圍的頂部。
Console.log(i);
Var i=10;
Var i;
Console.log(i);
i=10;
Let聲明的變數不存在變數提升,會直接報錯。
第二個區別:
Var聲明的變數不存在塊級範圍,在其他語言(靜態)裡面,通過一對{}可以定義塊級範圍。
Let聲明存在塊級範圍
常量:指不變的量
Const:也是聲明變數的一種方式,但是聲明的變數不能夠再改變。
Js裡資料類型發分類(***)
兩大類:
基礎資料型別 (Elementary Data Type)(原始值,簡單值)
引用資料類型(複雜值)
簡單值:指最簡單 資料區段,不可以再拆分,常見的簡單值:let i=5
複雜值:複雜值是指由多個簡單值構成的資料,是可以拆分的。
常見的複雜值:let arr=[1,“hello”]
Arr是數組名,是一個地址
簡單值儲存於棧區,複雜值儲存於堆區。
長條長條 : i=5 arr 橢圓 : [ ......]
因為未經處理資料(簡單值)所佔的大小空間是固定的,所以儲存於棧區。而參考型別資料,大小不固定,所以無法在棧區開闢合適的空間。所以參考型別的資料存放區在堆區。
資料複製時候的區別:
如果是簡單值,那麼我們複製的時候,複製的是值的拷貝。如果是參考型別,則複製的是地址。
關於簡單值和複雜值的比較:
如果是簡單值,那麼進行比較的是值,也就是該值相等就是兩個變數相等。如果是參考型別,那麼比較的是地址。
資料類型
在ES5的時候,基礎資料型別 (Elementary Data Type)有5個:undefined、null、number、boolean、string ES6開始,變成6個,增減symbol
Undefined:只有一個值,undefined
已聲明未賦值的時候,(typeof i)
沒有聲明,直接報錯
Null 資料類型
只有一個:null,代表空,undefined可以說是null衍生而來。
Null==undefined true
Boolran 資料類型
True false
嚴格區分大小寫
任何資料類型都可以轉為布爾類型
Number 任何非0的數字都會轉為true 0為false
String 任何非空的字串都會轉為true,包括引號裡的空格或者是0 Null 字元串為false
在一個boolean函數,可把其它資料類型轉為bool值
以下9個值會被轉化成布爾類型 的false
“”‘’``字串模板 0和-0 NaN false null undefined
Number資料類型
數字一般我們可以分為整數和實數
整數:又可以分為正整數和負整數
關於整數,擁有不同的進位。不同的進位,前面需要添加不同的特殊符號
二進位:0b
八進位:0、0o
十六進位:0x
用來計算時,都是會轉化為10進位
實數:其實就是小數
2種表示方法:小數型(3.14)、指數型:3.14e2 (10的2次方),3.14e-2 (10的負2次方)
最大值和最小值:
MIN-VALUE MAX-VALUE 可以查看ES裡支援的最大值和最小值
Console.log(number.MAX-VALUE)
有無窮的概念,分為正無窮和負無窮
正:infinity (Math.pow(2,1024))
負:-infinity (-Math.pow(2,1024))
NaN 全稱為not a number 意思這不是一個數,這個東西就是一個標識:代表這個變數是一個非數。
- 1.列印時分類為number類型
- 2.設計到任何類型的計算,都會返回NaN
- 3.NaN不和任何值相等,包括自己
在ES裡面有一個專門用來判斷是否為非數的函數:isNaN
() 是數字就是false,不是就是true
數值轉化相關函數:Number() parseInt() parseFloat()
Number():將一個變數轉為數值
如果是布爾值,轉換為0和1
如果是null,轉為0
如果是undefined 轉為NaN
Var i;
I+=2;
Console.log(i);//NaN
關於字串使用number()轉換規則:
如果是十進位的純數字,就是十進位
如果是八進位,會捨棄前面的0;//用0o
如果是是十六進位和二進位,那麼會正常的轉為十進位
如果不是純數字,裡面有字母,那麼會轉為NaN
如果是Null 字元串,轉為0
parseInt():也是將一個變數轉換為整數。和number()有一個最大的區別,在轉換時會轉換為數字。
必須以數字開頭,(“123abc”)
parseInt(null) //NaN
parseInt(undefined) //NaN
parseInt()接收第二個數,表明前面是多少進位
(parseInt(“12,8”)) 表示8進位
parseFloat():轉換為小數,和parseInt()一樣,會儘可能去保留書 3.14.15.67 3.14
在ES6之前,number(),parseInt()、parseFloat()是基於全域對象的方法,但是用ES6開始,上面方法以及被歸類到Number對象。
String資料類型
代表的是字串,在js裡,單雙引號,沒有任何區別
如果字串外雙,內單,反之亦然,一定要加斜杠,可以使用逸出字元,反斜線
可以將其他資料類型轉為字串類型的函數:toString() String()
toString() 除了null和undefined,都能轉為字串類型
String()可以傳喚任意類型
- 1.( i.toString() ,typeof i.toString() )
- 2.( toString(null) ,typeof String(null) )
toString()可以傳一個參數,表示幾進位
字串類型非常霸道,和其他資料類型相加,得到字串。
ES6新添加了字串模版
使用的是兩個反引號``
第一個特點:支援多行文本
第二:可以進行變數的解析,需要將變數名放到${ }中
typeof:返回一個變數的資料類型
NaN返回number
infinity返回number
Null 返回object 對象
undefined 返回 undefined
類型轉換:分為兩種
隱式轉換:指系統內部自動發生的轉換,一般發生於不同資料類型運算的時候。
2+undefined //number
2+null //2
“2”+NaN ; //2 NaN
顯示轉換:就是我們程式員強制進行資料類型轉換
轉布爾:Boolean()
轉數字:Number() ParseInt() ParseFloat()
轉字串:toString() String()
資料轉換的快捷方法:
轉布爾值:只需要在變數前面加兩個!!,可轉為當前類型符合的布爾值。
!!true
!!false
轉數字:直接*1或者/1
null*1 //0,number
undefined/1 //NaN,number
轉字串:和Null 字元串相加
運算子
一元運算子:作用於一個運算元
需要常操作的就是++和 - -
++a 先自增再運算
a++先運算再自增
ps:盡量降低++、- - 放一行,減少差異性
邏輯運算子 :與 或 非
非。! 取反
與。&& 真真為真 否則為假 在ES裡不僅返回真假,如果裡面講個運算元為真,會返回第二個運算元
短路現象:當第一個運算元為假的時候,那麼就不會去判斷第二個數,因為結果已經是假了。
特殊現象:console.log(null&&NaN)//null
5&&NaN //NaN
5&&null//null
或 || 或裡面有一個為真,就返回真
同樣有短路現象
算數運算子
算術:加法、減法、乘法、除法、取餘、指數運算(ES6新增)
Ps:js裡認證相除能得到小數
指數:(Math.pow(2,3));
(2**3);
關係運算子
大於、小於、大於等於、小於等於、相等、不相等、全等、不全等
字母也可以比較大小,比較的是ascll碼對應的字元編碼
A:97 b:98
如果是字元和數字進行比較,分為兩種情況
首先將隱式轉為數字進行比較,如果不能,那就迴轉為false
相等和全等
==只要值相同,不管資料類型
=== 資料類型和值都相同
特殊情況:
null==undefined //true
null===undefined //false
NaN===NaN //false
賦值運算子
除了=以為,還有一組複合賦值運算子:+= -= /= *=
三目運算子
文法:運算式?運算式2:運算式3;
逗號運算子
一般用於一條語句執行,多個運算子操作
Let i=(1,2,3,4,5)
i=5
let i=1 ,a=2;
運算子分優先順序,可以用()提升優先順序。
javascript裡的基礎文法、資料類型以及類型轉換