JS的基礎語法


## JavaScript概述
1·JavaScript的發展史大致可分為4個階段,分別為javaScript起源,第一次瀏覽器大戰,第二次瀏覽器大戰和javaScript蓬勃發展。
2·java和javaScript是兩個不相干的語言,兩者除了名字和歷史淵源外,幾乎沒有任何關系。
3·1997年,以javaScript1.1為藍本的建議被提交給了歐洲計算機制造商協會(ECMA)̶ 262,也就是ECMAScript。
4·2002年,Mozilla在Navigator瀏覽器的基礎上,推出了火狐瀏覽器。
5·2005年,Google公司推出了Ajax技術,並將其應用到了自家的Gmail上面,Ajax的出現,大大的改變了用戶的上網體驗,可以無刷新的改變頁面內容,而Ajax的主體就是JavaScript。
6·2009年,RyanDahl在V8引擎的基礎上發布了Node.js。至此,JavaScript不再局限於客戶端的開發,而是可以進行服務器端的開發了。
**NPM**
1·安裝NPM指令:(淘寶鏡像:在命令行中敲入)
npm insrall -g cnpm --registry=https://registry.npm.taobao.org
2·初始化設置
npm init
3·安裝輸入模塊
npm install readline-sync
4·執行命令結果:
node 文件夾名
## JavaScript編程基礎
**JavaScript基礎語法**
*1-1 注釋*
1·單行注釋:// ctrl+/
2·多行注釋:
/*

*
*這是一個較長的多行注釋

*
*/
*1-2語句*
在javaScript中,語句一般我們都會采用以分號結尾,每條語句獨占一行的形式來書寫代碼。
*1-3標識符*
所謂標識符,就是指用來標識某個實體的一個符號。其命名規則分為2大類:
硬性要求:
  1·可以是由數字,字母,下划線和美元符號組成,不允許包含其他特殊符號。
  2·不能以數字開頭。
  3·禁止使用JavaScript中的關鍵字和保留字來進行命名。
  4·嚴格區分大小寫。
軟性要求:望文知意
**命名的3中方法**
1·匈牙利命名法:
  是微軟公司下面以為匈牙利籍的程序員所發明的命名法則,其特點是標識符的名字以一個或者多個小寫字母開頭,表示該變量的數據類型;

 

數據類型  對應前綴
Array數組  a  
Boolean布爾 b
Float浮點 f
 Function fn
Interger(int)整型  i
Object對象  o
Regular Expression正則  re
String 字符串    s

 

  前綴之后的是一個單詞或多個單詞的組合,該單詞表明表明變量的用途。
例如:a_array,o_object,i_userAge ,b_isPassed.
2·駝峰命名法:
  大駝峰:就是每一個單詞都是首字母大寫。例如:UserName
  小駝峰:第一個單詞的首字母是小寫,后面單詞的首字母是大寫。例如:userName。
3·蛇形命名法:
  特點在於單詞與單詞之間使用下划線進行分隔。
  這種命名法常見於Linx內核,c++標准庫,Boost以及Ruby,Rust等語言。
例如:user_name,my_name.
*1-4關鍵字和保留字*
JavaScript中的關鍵字和保留字:
abstract,await,boolean,break,byte,case,catch,char,class,const,contine,
debugger,default,deldte,do,double,else,enum,export,extends,false final,finally,float,

for,function,goto,if,implements,import,in,instanceof,int,interface,let,long,native,new,

null,package,private,protected,public,teturn,short,static,super,switch,synchronized,

this,throw,throws,transient,true,try,typeof,var,volatile,void,while,with,yield

*1-5數據類型介紹*
數據類型分為兩大類:簡單數據類型和復雜數據類型。
簡單數據類型:
分為6種:string,symbol,number,Boolean,undefined,null
復雜數據類型:object,就這一種,包括javascript中的數組,正則等,其類型都是object類型。
*查看數據類型*
在javascript中,我們通過typeof運算符來查看一個數據的數據類型。
例如:

console.log(typeof 10);//number
console.log(typeof true);//boolean
console.log(typeof 'hello');//string
console.log(typeof [1,2,3]);//object

 

*2-1變量*
變量:就是用於引用內存中儲存的一個值,
*2-2聲明變量*
在javascript中聲明變量的方式由3種:var let const。其中var現在已經不推薦使用了。
const:
所聲明的變量如果是簡單數據類型,那么是不能夠再改變的。
例如:

const name ='Bill';
name ='Lucy';

let:
所聲明的變量無論是簡單數據類型還是復雜數據類型,在后面是可以改變的。
例如:

let name ='Bill';
name ='Lucy';
console.log(name);

 

*2-3變量的賦值與初始化*
我們可以利用 =來給一個變量進行賦值,給變量第一個賦值的過程,叫做變量的初始化。一般我們在聲明變量的時候就會將變量給初始化。
例如:let a =3;
一次性初始化多個變量:let x =3, y =4, z =5;

如果聲明變量時沒有賦予初值,那么默認值為undefined。
*2-4使用var聲明變量*
1,重復聲明:
重復聲明不帶由賦值操作時JS引擎會自動忽略后面的變量聲明
例如:

var test =3var test;
console.log(test);//3
```
重新聲明時如果帶有賦值操作,那么會進行一個數據的覆蓋。
例如:
```
var test =3var test =5;
console.log(test);//5

 

2·遺漏聲明:
如果試圖讀取一個沒有聲明的變量的值,JS會報錯,JS允許遺漏聲明,即直接對變量賦值二無需事先聲明,賦值操作會自動聲明該變量。
例如:

{a =5;
console.log(a);//5
}
console.log(a);//5

 

*2-5作用域*
1·全局作用域:
  這是JS引擎一進來就處於的運行環境,在全局作用域的中所有聲明稱之為全局變量。全局變量的特點在於變量在任何地方都能被訪問。
2·局部作用域:
  在js中,一對大括號就可以產生一個局部作用域,只能在這個恐懼不的作用域里面能訪問到,外部時訪問不到的。
  在大括號中使用var聲明的變量不是局部變量,而是一個全局變量。
  在局部作用域里面,如果變量名和全局作用域里面的變量名沖突,優先使用局部作用域里面的變量。
## 3-1數據類型
3-1-1 undefined類型:
  undefined類型只有一個值,那就是undefined。在使用變量但沒有為其賦予其值的時候,這個變量就是undefined。
  沒有聲明的變量,使用時會報錯,而不是undefined。
3-1-2null類型:
  null類型的值只有一個,就是null。null表示一個空的對象,
3-1-3布爾類型boolean:
  就是真和假,這個類型的值只有兩個,true和false。
**9個值對應布爾類型里面的假值**

"":雙引號的空字符串
'':單引號的空字符串
``:空字符串模板
0 :數字0
-0:JS中-0和0 為不同的值
NaN:
false
null
undefined


*3-2數字類型*
1·整數:
  可以分為正整數和負整數:例如:let a =12;let b =-7;
2·實數:
  就是平常所常見的小數,或者稱之為浮點數。
  在javascript中,表示浮點數的方式由兩種:小數型和科學計數法型
  例如:let a =3.14;let b =9.12e+2;console.log(a,b);//3.14 912
3·NaN:
  全稱為Not a Number ,即非數值。是惡個數值用於表示本來要返回數值的操作未返回數值的情況。
  NaN有兩個特點:1·任何涉及NaN的操作都會返回NaN.2·NaN和任何值都不相等,包括它自己本身。
  除此之外,ECMAScript還定義了一個isNaN()函數,來幫助我們判斷一個參數是否是數值。
例如:

console.log(isNaN(NaN));//true
console.log(isNaN("123"));//false
console.log(isNaN(123));//false
console.log(isNaN("hello"));//true
console.log(isNaN(true));//false

 

NaN時屬於number類型的。
4.數值轉換:
  在javascript中有三個函數可以將非數值的數據轉為數值。
  分別是:Number(),parse Int()轉為整數,parseFloat()轉為浮點數,小數
  1· Number():可以將非數值轉為數值
注意規則:
  - 如果時Boolean值,true和false將分別被轉換為1和0,
  - 如果時數字,那么就是簡單的傳入和返回,
  - 如果是null值,那么返回0,
  - 如果是undefined,那么返回NaN,
示例:

console.log(Number(true));//1
console.log(Number(false));//0
console.log(Number(10));//10
console.log(Number(null));//0
console.log(Number(undefined));//NaN

 

如果是字符串,那么又是如下的規則:

  - 如果字符串只包含數字,則將轉為十進制,即1會變成1,123變成123,而011會變成11.
  - 如果字符串中包含有效的十六進制格式,如1.1,則將其轉換為對應的浮點數值。
  - 如果字符串中包含有效的十六進制格式,例如0xf,則將其轉換為相同大小的十進制整數。
  - 如果字符串是空的,則將其轉換為0,
  - 如果字符串包含上述格式之外的字符,則將其轉換為NaN
示例:

console.log(Number("1"));//1
console.log(Number("012"));//12
console.log(Number("0o10"));//8
console.log(Number("ob111"));//7
console.log(Number("3.14"));//3.14
console.log(Number("0xf"));//15
console.log(Number(""));//0
console.log(Number("123Hello"));//NaN

 

2·paeseInt():也是將一個非數值轉為數值
  相比number()函數,parseInt()會更多的看是否有數字,有就會將其轉換為數值,最簡單的例子為number()函數轉換123hello時會轉換為NaN,而parseInt()則會將其轉換為123.
  碰到空字符串時,number()函數會將其轉換為0,而parseInt()則會將其轉換為NaN。
  最后時碰到小數時,會有一個取整的過程,例如3。14會被轉換為3.

3·parseFloat():將非數值轉為浮點數
  parse Float()只解析十進制值,沒有第二個參數,該函數會將帶有小數點的字符串轉換為小數,如果沒有小數點的樹會被轉換為整數。同樣的parseFloat()也是盡可能轉換更多的數值,例如:   123hello會被轉換為123.
ES6將全局方法paeseInt()和parseFloat()等方法,移植到number,行為完全保持不變,是為了逐步減少全局性的方法,使得語言逐步模塊化。
例如:

console.log(Number.parseInt("12.34"));//12
console.log(Number.parseFloat("12.34#"));12.34

 

4·toFixed():按照指定的小數點返回數值四舍五入后的字符串表示(常用於處理貨幣值),toFixed()里的參數只接受0-20,若不傳參數或者參數為undefined則相當於參數為0.
示例:

let num = 10.456; 
console.log(num.toFixed(2));//10.46 
console.log(num.toFixed());//10 
console.log(num.toFixed(0));//10 
console.log(num.toFixed(undefined));//10
console.log(num.toFixed(-1));//報錯

 

*3-3字符串類型*
3-3-1字符串介紹:
可以使用單引號,也可以使用雙引號。
字符串的內容本身包含單引號或者雙引號的話,需要和字符串界限符區分開。
示例:

let a ="hello 'world',welcome";//正確
let a ='hello"world",welcome';//正確
let a ="hello"world",welcome";//錯誤
所以,使用轉義字符是一個很好的選擇。
示例:

let a = "Hello 'World',welcome";// 正確
let b = 'Hello "World",welcome';//正確
let c = "Hello \"World\",welcome";//正確

 

字符串這種數據類型非常霸道,它和其他數據類型相加都會被轉換為字符串類型。
示例:

let a = "abcd"; 
let b = 13 + a; 
let c = 3.14 + a; 
let d = true + a; 
let e = null + a; 
let f = undefined + a; 
console.log(typeof b);//string 
console.log(typeof c);//string 
console.log(typeof d);//string 
console.log(typeof e);//string 
console.log(typeof f);//string

 

所以,我們要讓一個非字符串的變量轉換為字符串的話,只需要和一個空字符串相加就可以了。
*3-4字符串模板*
在ES6中新增了模板字面量是增強版的字符串,它用反引號(`)標識
如果在字符串中包含反引號,只需要用反斜杠\轉義即可
在反引號之內的所有空白符都是字符串的一部分,因此需要特別注意縮進。

變量占位符${name},可替換的不僅僅是變量名,可以嵌入運算符,函數調用。
*3-5類型轉換*
1·隱性轉換:
當不同的數據類型進行相互運算的時候,當對布爾類型的數據求布爾值的時候。
預期為數字的時候:
算術運算的時候,我們的結果和運算的數都是數字,數據會轉換為數字進行計算(-*/%)

 

類型       轉換前  轉換后
number  4 4
string  ’1‘    1
string ’abc‘    NaN   
string                ’‘  0
boolean      true    1
boolean false  0
undefined undefined   NaN  
null        null 0

 

預期為字符串的時候:
  轉為字符串使用+號時候,會自動轉換為字符串。
預期為布爾的時候:
  轉為布爾值,undefined,null,“” , 0, NaN轉為false,其余轉為true。
2·強制轉換:
  轉換數值為number(),parse Int(),parseFloat()轉換函數小技巧:

    - 轉換字符串:a =""+數據
    - 轉換布爾:!數據類型
    - 轉換數值:數據類型*或/1
**4-1運算符**
*4-1-1算術運算符*
+(加) ,- (減),* (乘法),/ (除法),%(求余,即兩數相除后的余數)
**(求冪)
*4-1-2一元運算符*
就是只作用於一個操作數的運算符,有兩種:
1·賦值運算符:
最常見的就是=,還有+=,-=,*=, /=,%=等
示例:

let a = 5;
a += 5; 
console.log(a); // 10 
a -= 3; console.log(a); // 7 
a *= 5; console.log(a); // 35 
a /= 5;
console.log(a); // 7 
a %= 2; 
console.log(a); // 1

 

2·遞增和遞減:
有前置和后置的區別:
前置:那就是先自增或自減,然后參與運算。后置:則是先參與運算,然后再自增或自減。
前置示例:

let a = 2;
let b = 10; 
let c = --a + b;
let d = a + b;
console.log(a,b,c,d);//1 10 11 11

后置示例:

let a = 2; 
let b = 10; 
let c = a-- + b;
let d = a + b; 
console.log(a,b,c,d);//1 10 12 11

 

自增自減操作符不僅局限於數值,其他類型需遵循以下規則:

  - 在應用一個包含有效數字字符的字符串時,現將其轉換為數字值,在執行加減1操作,字符串變量變為了數值變量。
  - 在應用於一個不包含有效數字字符的字符串時,將變量的值設置為NaN,字符串變量變成數值變量。
  - 遇布爾值false時,先將其轉換為0再執行加減1操作,布爾值變量變成數值變量。
  - 遇布爾值true時,先將其轉換為1再執行加減1操作,布爾值變量變成數值變量。
  - 在應用浮點數數值時,執行加減1操作。
示例:

let s1 = "123"; 
let s2 = "123Hello"; 
let s3 = "Hello";
let s4 = true;
let s5 = 3.14; 
console.log(--s1);//122 
console.log(--s2);//NaN 
console.log(--s3);//NaN 
console.log(--s4);//0 
console.log(--s5);//2.14

 

**比較運算符**
*4-1-3關系運算符*
大於,小於,小於等於,大於等於
示例:

console.log(5 > 3);//true 
console.log(3 > 5);//false

字符串的比較:

console.log("c" > "b");//true
console.log("c" > "box");//true

 

這里的比較主要是按照ASCII碼來進行比較的。
如果是一個字符串和一個數字進行比較,那么會將字符串先轉換為數字,如果不能轉換為數字 ,則轉換為NaN
示例:

console.log("5" > 3);//true, 因為"5" 轉換為了 5 
// 任何一個數與NaN進行關系比較,返回的都是false
console.log("Hello" > 3);//false, 因為"Hello" 轉換為了NaN

**完整規則如下**

  - 如果兩個數都是數值,則執行數值比較。
  - 如果兩個都素字符串,則比較兩個字符串對應的字符編碼
  - 如果一個操作數是數值,則將另一個操作數轉換為一個數值,然后執行數值的比較。
  - 如果一個操作時時對象,則調用這個對象的valueof()方法,用得到的結果按照前面的規則執行比較,如果對象沒有valueof()方法,則調用toString()方法,並用得到的結果根據前面的規則執行比較。
  - 如果一個數時布爾值,則先將其轉換為數值,然后再進行比較。
還需注意的時,任何數和NaN進行比較反壞的都是false。

*4-1-4相等和不相等*
==表示相等,!=表示不相等,
轉換規則:
  - null和undefined時相等的
  - 如果有一個操作數時NaN,則返回false,NaN和NaN比較也是false。
  - 如果時數字的字符串和數字進行比較,會將字符串轉換為數字
  - 布爾值里面true轉換為1,false轉換為0.
一些特殊情況:

表達式
null == undefined true 
"NaN" == NaN false 
5 == NaN false 
NaN == NaN false 
NaN != NaN true 
false == 0  true 
true == 1  true 
true == 2  false 
undefined == 0  false 
null == 0 false 
 "5" == 5  true 


*4-1-5全等和不全等*
全等時 === ,不全等時 !== ,這個時必須數據類型和數值都相等。
示例:

console.log("5" == 5);//true
console.log("5" === 5);//false

 



*4-1-6邏輯運算符*
1·非:!
  就是取反,非真即假,非假即真
示例:

let i = true; 
console.log(!i);//false

 

非運算符不僅只能用於布爾值,其他數據類型如下:

  - 如果操作數是一個對象,返回false
  - 如果操作數是一個空字符串,返回true
  - 如果操作數是一個非空字符串,返回false
  - 如果操作數是數值0,返回true
  - 如果操作數是任意非0數值(包括Infinity),返回false
  - 如果操作數是null,返回true
  - 如果操作數是NaN,返回true
  - 如果操作數是undefined,返回true
示例:

console.log(!false);//true 
console.log(!"blue");//false
console.log(!0);//true 
console.log(!NaN);//true 
console.log(!"");//true 
console.log(!12);//false

 

2·與: &&
作用於兩個到多個值,並且只有所有的操作數都是真值時,才是true
示例:

console.log(false && true);//false 
console.log(true && true);//true

 

短路現象:
  -第一個操作數為真,會進入第二個操作數的判斷,且無論第二個操作數的真假,都會返回第二個操作數。
  - 第一個操作數為假,不會進入第二個操作數的判斷,直接返回第一個操作數。
示例:

console.log(3 && 5);//5 
console.log("Hello" && 20);//20
console.log("Hello" && false);//false 
console.log("" && "shoe");//"" 
console.log("Hello" && '');//''

 

3·或:||
同樣時作用於兩個到多個值,但是只要有一個操作數為真,就返回真。
示例:

console.log(false || true);//true 
console.log(true || false);//true

 

短路現象:
  -第一個操作數為真,則不會進入第二個操作數的判斷,所以無論第二個操作數的真假,都會直接返回第一個操作數。
  - 第一個操作數為假,則會進入第二個操作數的判斷,但無論第二個操作數的真假,都會直接返回第二個操作數。
示例;

console.log(false || true);//true 
console.log("Hello" || "");//Hello 
console.log("Hello" || "str");//Hello 
console.log(NaN || "");//"" 
console.log(0 || "Hello World");//Hello World 
console.log('' || 'str');//str 
console.log('' || false);//false

 

**4-2運算符優先級**
運算符優先級有一套規則,具有較高優先級的運算符先於較低與優先級的運算符執行。
下表按從高到低的優先級列出js運算符。具有相同優先級的運算符按照從左到右的順序求值。

 

運算符 描述 
. [] ()  字段訪問,數組下標,函數調用以及表達式分組
++ -- - ~ ! delete new typeof void  一元運算符,返回類型,對象創建,未定義值
* / % 乘法,除法,取余
+ - + 加法,減法,字符串拼接
<< >> >>> 移位
< <= > >= instanceof 小於,小於等於,大於,大於等於,instanceof 
== != === !==  等於,不等於,全等,不全等
按位於
按位異或
| 按位或
&& 邏輯與
|| 邏輯或
?:  三目運算符
= 賦值
多重賦值


免責聲明!

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



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