1损姜、JavaScript 簡介
JavaScript是什么?
JavaScript是一種運行在客戶端的解釋性腳本語言殊霞,能夠?qū)崿F(xiàn)HTML網(wǎng)頁豐富的動態(tài)交互效果摧阅。
ECMAScript
為了讓JavaScript成為全球標準,幾個公司聯(lián)合ECMA(European Computer Manufacturers Association)組織定制了JavaScript語言的標準脓鹃,被稱為ECMAScript標準逸尖。
ECMAScript 是 JavaScript 語言的規(guī)范標準,JavaScript 是 ECMAScript 的一種實現(xiàn)瘸右。不過娇跟,在大多數(shù)情況下,這兩個詞在語境上是可以互換的太颤。
JavaScript的組成
JavaScript是由 ECMAScript苞俘、DOM 以及 BOM 三者組成。
ECMAScript:語言核心部分
DOM: Document Object Model龄章,文檔對象模型吃谣,DOM是專門操作網(wǎng)頁內(nèi)容的API標準
BOM:Browser Object Model,瀏覽器對象模型做裙,對客戶端和瀏覽器窗口進行訪問和操作
2岗憋、JavaScript 的基本語法
JavaScript書寫位置
-
可以寫在html文檔中的
<script>
標簽中,例如:<body> <script> // 書寫js代碼 </script> </body>
-
也可以單獨寫在外部的js文件中锚贱,通過
<script>
標簽進行引入仔戈,例如:<script src="js/main.js"></script>
注釋的使用
js的注釋有兩種:單行注釋(// ...... )和多行注釋(/* ...... */)
簡單的輸入、輸出函數(shù)
alert() 語句
在瀏覽器中彈出警示框拧廊,內(nèi)容自定義监徘,js內(nèi)置方法
<script>
alert("1"); //在瀏覽器窗口彈出警示框,內(nèi)容為 1
</script>
prompt() 語句
在瀏覽器中彈出一個提示對話框吧碾,對話框中有一個提示信息 以及 一個輸入框凰盔,輸入框中可根據(jù)提示信息輸入合理內(nèi)容。
prompt() 是 js內(nèi)置方法倦春,有兩個參數(shù)户敬,都是字符串類型落剪,第一個參數(shù)是設(shè)置 提示對話框的提示信息,第二個參數(shù)是 輸入框中的默認初始內(nèi)容尿庐,該參數(shù)可以省略不寫
<script>
prompt("請輸入一個正整數(shù)", "10");
</script>
console對象
瀏覽器控制臺中進行js語句的執(zhí)行操作著榴,其中console.log()能夠?qū)?nèi)容在控制臺中打印輸出
字面量的概念
用于表達一個固定值(比如數(shù)字、字符串屁倔、布爾類型、undefined等的字面值)的表示法暮胧。 通俗的理解锐借,字面就是所見即所得,js執(zhí)行代碼中的字面量往衷,會立即知道它是什么類型的數(shù)據(jù)钞翔,值為多少。
變量
變量席舍,是計算機內(nèi)存中存儲數(shù)據(jù)的標識符布轿。使用變量,能夠方便地獲取和修改內(nèi)存中的數(shù)據(jù)来颤。
聲明變量
通過var關(guān)鍵字定義變量汰扭,var之后需要添加空格,再自定義一個變量名萝毛,例如:var num;
命名規(guī)則
允許使用字母、數(shù)字滑黔、下劃線、$符號,不能以數(shù)字開頭
字母區(qū)分大小寫
不能使用 保留字 和 關(guān)鍵字
命名規(guī)范
見名知意
建議使用 駝峰命名:多個單詞組成時验毡,第一個單詞的首字母小寫辩昆,之后的每個單詞首字母大寫华望,如:backgroundColor哟玷、listStyleType
變量賦值
將等號右邊的數(shù)據(jù)狮辽,保存到等號左邊的變量中
變量名 = 值
在聲明變量的同時一也,可以初始化變量的值,如:var num = 0;
使用變量的特殊情況
- 當只聲明了變量喉脖,但沒賦值椰苟,在使用時,默認值為undefined
- 不能使用從未聲明的變量树叽,在使用時舆蝴,會報錯,ReferenceError:XXX is not defined
- 從未聲明的變量题诵,能夠賦值洁仗,此時變量為全局變量(與var定義的變量還是存在區(qū)別的)
因此,在使用變量之前性锭,必須先聲明變量
3赠潦、JavaScript的數(shù)據(jù)類型
基本數(shù)據(jù)類型: Number、String草冈、Boolean她奥、undefined、null
復雜數(shù)據(jù)類型: Object
Number怎棱,數(shù)字類型
表示所有數(shù)字哩俭,整數(shù)、浮點數(shù)拳恋、特殊值NaN携茂。凡是不加引號的數(shù)字,都是Number類型數(shù)據(jù)诅岩。
整數(shù)
整數(shù)可以被表示成十進制讳苦、八進制以及十六進制
十進制:最基本的數(shù)值字面量格式
八進制:數(shù)值前綴必須為 0、0O吩谦、0o鸳谜,八進制整數(shù)只能包括數(shù)字0~7,如:045式廷、0O45咐扭、0o45
十六進制:前綴為0x或者0X。后面可以包含數(shù)字0~9和字母a ~ f或者A ~ F滑废,如:0x45a蝗肪、0X45A
1、八進制中的特殊情況: 在八進制中蠕趁,如果以 0 開頭薛闪,每個 位數(shù) 上有超過0~7之間的數(shù)字出現(xiàn),即8或9俺陋, 將強制忽視前面的 0 豁延,直接將后面的數(shù)字當做 十進制 處理昙篙。
2、在進行算術(shù)計算時诱咏,所有八進制和十六進制的數(shù)字都會被轉(zhuǎn)換成十進制
浮點數(shù)
包含整數(shù)苔可、小數(shù)點、小數(shù)部分袋狞,所有的浮點數(shù)都是十進制下的數(shù)字
Infinity 無窮
由于計算機計算能力的限制焚辅,高于最大計算值的數(shù)將以正無窮Infinity顯示,低于最小計算值直接顯示 -Infinity
在js中苟鸯,用Number.MIN_VALUE 表示最小的數(shù)(接近 0 法焰,但不是負數(shù))
用Number.MAX_VALUE 表示最大的數(shù)
NaN
Not a Number,“不是一個數(shù)字” 的 數(shù)字類型倔毙。當數(shù)據(jù)無法轉(zhuǎn)為數(shù)字時,或無法正常計算時乙濒,結(jié)果都為 NaN陕赃。
String,字符串類型
字符串颁股,由若干個有序或無序的字符組成的串么库,包括字母、漢字甘有、特殊符號诉儒、空格等,并用一對單引號('')或雙引號(" ")包裹亏掀。所有的字符串忱反,都是String類型
1、在js的內(nèi)存中滤愕,字符都是用Unicode號來進行存儲的温算,因為計算機只認數(shù)字,不認字符间影。
2注竿、字符串的內(nèi)容一旦創(chuàng)建,值不可改變魂贬,若想改巩割,只能用新字符串替換舊字符串。
Boolean付燥,布爾類型
只有兩個值:true
宣谈、false
, 且必須是小寫字母键科,不帶引號蒲祈。
布爾類型主要用來保存 對/錯甘萧、 真/假、成立/不成立梆掸,在計算機內(nèi)部存儲中扬卷,true
為1 , false
為0
undefined類型
undefined本身也是一個數(shù)據(jù)酸钦,表示未定義怪得。變量在只聲明的時候值默認為undefined
null類型
null本身也是一個數(shù)據(jù),null值表示一個空對象指針
4卑硫、數(shù)據(jù)類型轉(zhuǎn)換
javascript是弱類型的編程語言徒恋,其特點:
1、聲明變量時欢伏,不用考慮變量中將要存儲的數(shù)據(jù)類型
2入挣、賦值時,動態(tài)判斷數(shù)據(jù)的類型
3硝拧、運算時径筏,js會根據(jù)自己的需要,動態(tài)轉(zhuǎn)換數(shù)據(jù)類型
將數(shù)據(jù)轉(zhuǎn)換為 String類型
toString()
能夠?qū)⑵渌麛?shù)據(jù)類型轉(zhuǎn)為String類型障陶,其中null類型 和 undefined類型無法使用此方法var str = x.toString()
String()
可以將任意數(shù)據(jù)類型轉(zhuǎn)為String類型滋恬,包括undefined 和 null,var str = String(x)
使用 +
號拼接字符串的方式抱究,如 var str = x + ""
+ 號的特殊性
當
+
兩邊有一個是字符串類型的數(shù)據(jù)時恢氯,計算機會將另一個數(shù)據(jù)轉(zhuǎn)換為字符串再進行字符串的拼接操作,最總返回字符串類型的數(shù)據(jù)鼓寺。而如果兩邊都是數(shù)字勋拟,那么就是算術(shù)運算。
將數(shù)據(jù)轉(zhuǎn)換為 Number類型
Number()
能夠?qū)⑷魏螖?shù)據(jù)類型轉(zhuǎn)為數(shù)字類型妈候,var n = Number(x)
- 字符串:如果是純數(shù)字的字符串(“456”)指黎,則轉(zhuǎn)為對應的數(shù)字,空字符串("")和空白字符(" ")串則轉(zhuǎn)為0州丹,若是非空非純數(shù)字的字符串醋安,則轉(zhuǎn)為NaN
- 布爾值: true轉(zhuǎn)為1,false轉(zhuǎn)為0
- undefined: 轉(zhuǎn)為 NaN
- null: 轉(zhuǎn)為 0
parseInt()
用于將字符串轉(zhuǎn)成整數(shù)的方法墓毒,var n = parseInt(str)
吓揪,默認情況下,parseInt()方法會將傳入的數(shù)據(jù)先隱式轉(zhuǎn)換為String類型
- 原理:從頭開始讀取字符串中的每個字符(如果開頭是空字符所计,會跳過空字符)柠辞,只讀取數(shù)字字符。只要碰到第一個不是數(shù)字的字符主胧,就退出叭首,不認識小數(shù)點
.
- 作用: 能夠?qū)Ω↑c數(shù)進行取整操作习勤; 能夠?qū)⒁詳?shù)字開頭的字符串轉(zhuǎn)為整數(shù)數(shù)字,如果字符串不是以數(shù)字開頭焙格,則轉(zhuǎn)為NaN
- Number(x) vs parseInt(str)
Number() 只認識純數(shù)字組成的字符串图毕,且Number可轉(zhuǎn)布爾值(true、false)
parseInt() 能轉(zhuǎn)包含非數(shù)字字符的字符串眷唉,前提是開頭位置是數(shù)字予颤,parseInt()轉(zhuǎn)不了布爾值
parseFloat()
能夠?qū)⒁詳?shù)字開頭的字符串轉(zhuǎn)為浮點數(shù),用法與parseInt()方法一樣
將數(shù)據(jù)轉(zhuǎn)換為 Boolean類型
Boolean()
能夠?qū)⑷我鈹?shù)據(jù)轉(zhuǎn)為Boolean類型冬阳,var bool = Boolean(x)
- false:
""
(空字符串蛤虐,不是空白字符串)、0
肝陪、NaN
驳庭、undefined
、null
- true: 除了以上幾個轉(zhuǎn)為
false
值以外氯窍,其他的數(shù)據(jù)都將轉(zhuǎn)為true
toString() 和 parseInt()的其他用法——進制轉(zhuǎn)換
-
十進制 轉(zhuǎn) n進制: x.toString(n)
var x = 5; //十進制數(shù) console.log(x.toString(2)); // "101"
注意饲常,值仍然是String類型
-
其他 n進制 轉(zhuǎn)為 十進制: parseInt(str, n)
parseInt('101a', 2); // 101 --> 5 parseInt('1012a', 2); // 101 --> 5 parseInt('2101a', 2); // NaN parseInt('02101a', 2); // 0 --> 0
注意,parseInt()的第一個參數(shù)必須是以數(shù)字開頭的字符串(如果不是字符串荞驴,parseInt會默認將其先轉(zhuǎn)為字符串),且開頭的數(shù)字必須符合 第二個參數(shù)所指定的n進制 的格式(如果僅部分數(shù)字符合贯城,則取符合的那部分數(shù)字)熊楼,否則將轉(zhuǎn)為NaN
5、運算符和表達式
程序:人的想法在計算機中的執(zhí)行步驟
運算符:程序中模擬人的思維運算或判斷的 符號
表達式: 由數(shù)據(jù)能犯、運算符 和 變量 組成的一個公式
返回值: 表達式最終會返回一個結(jié)果鲫骗,這個結(jié)果就是返回值
算術(shù)運算符
以數(shù)值(字面量或變量)作為其操作數(shù),并返回一個單個數(shù)值踩晶。
常用的算術(shù)運算符
+执泰、 -、 *渡蜻、 /术吝、 %、++茸苇、-- 排苍、**
模運算(取余數(shù))%
%
,例如学密,a / b = c 余 d淘衙,則 d = a % b
遞增、遞減運算 ++腻暮、--
++彤守、--
毯侦,一元運算符,也是賦值運算符具垫,只有一個操作數(shù)侈离,++ 和 -- 符號可以寫在變量的前面和后面,分為前置和后置做修,以 ++ 為例:
前置遞增: ++n霍狰,自加1,類似于 n += 1 或 n = n + 1饰及,但是可以看出蔗坯, ++n 更簡潔方便。 在使用變量n時燎含,先自加宾濒,后返回值
后置遞增: n++,意義同上屏箍,唯一區(qū)別在于绘梦, 在使用變量n時,先返回原值赴魁,后自加
冪運算符 **
**
卸奉,返回第一個操作數(shù)做底數(shù),第二個操作數(shù)做指數(shù)的乘方颖御。冪運算符是右結(jié)合的榄棵。a ** b ** c 等同于 a ** (b ** c)。 如: 2 ** 3 ** 2 ---> 結(jié)果為 512
ES2016中潘拱,禁止使用帶歧義的冪運算表達式疹鳄,比如,底數(shù)前不能緊跟一元運算符(+芦岂、 - 瘪弓、~、!禽最、delete腺怯、void、typeof
)川无。-2 ** 2
瓢喉,這在js中是會報錯的,因為這會有歧義
正常情況下舀透,一般是兩個數(shù)字進行算術(shù)運算栓票,例如,給定 y = 5,下表是經(jīng)過各種算術(shù)運算符的結(jié)果
運算符 | 描述 | 例子 | x 運算結(jié)果 | y 運算結(jié)果 |
---|---|---|---|---|
+ | 加法 | x = y + 2 | 7 | 5 |
- | 減法 | x = y - 2 | 3 | 5 |
* | 乘法 | x = y * 2 | 10 | 5 |
/ | 除法 | x = y / 2 | 2.5 | 5 |
% | 取模(取余數(shù)) | x = y % 2 | 1 | 5 |
++ | 自增 前置自增 | x = ++y | 6 | 6 |
自增 后置自增 | x = y ++ | 5 | 6 | |
-- | 自減 前置自減 | x = --y | 4 | 4 |
自減 后置自減 | x = y-- | 5 | 4 | |
** | 冪 | x = y ** 2 | 25 | 5 |
算術(shù)運算中存在的特殊情況
有特殊值參與運算(NaN走贪、Infinity)
NaN參與運算:返回值都為NaN
-
Infinity參與計算佛猛,視情況而定。
console.log(Infinity + 5); // Infinity console.log(Infinity - 5); // Infinity console.log(Infinity * 5); // Infinity console.log(Infinity / 5); // Infinity console.log(Infinity % 5); // NaN console.log(5 / Infinity); // 0 console.log(5 % Infinity); // 5 console.log(Infinity + Infinity); // Infinity console.log(Infinity - Infinity); // NaN console.log(Infinity * Infinity); // Infinity console.log(Infinity / Infinity); // NaN console.log(Infinity % Infinity); // NaN
總之坠狡,運算結(jié)果不確定的數(shù)继找,返回NaN
其他類型的數(shù)據(jù)參與運算
在算術(shù)運算中,會隱式調(diào)用Number()將數(shù)據(jù)轉(zhuǎn)為Number類型逃沿,再進行運算
特殊情況婴渡,在 +
法中,碰到字符串凯亮,都轉(zhuǎn)為字符串边臼,再進行字符串的拼接
console.log(1 + "2"); // "12"
console.log(1 - "2"); // -1
console.log(1 * "2"); // 2
console.log(1 / "2"); // 0.5
console.log(1 % "2"); // 1
console.log(1 - ""); // 1 - 0 --> 1
console.log(1 - " "); // 1 - 0 --> 1
console.log(1 - "12abc"); // 1 - NaN --> NaN
運算順序
先乘除取余,再加減假消,有小括號先算小括號
比較運算符
比較運算符(
>柠并、 <、 >=富拗、 <=臼予、 ==、!=啃沪、 ===粘拾、!==
),也稱關(guān)系運算符创千,指兩個操作數(shù)做比較缰雇,比大小,返回值是一個布爾值签餐,true
或false
==
表示等于,只判斷值大小是否相等寓涨,不判斷數(shù)據(jù)類型
!=
表示不等于盯串,與 == 相反
===
表示全等氯檐,首先數(shù)據(jù)類型必須相同,其次值相同(不進行隱式轉(zhuǎn)換)
!==
表示不全等体捏,與 === 相反
比較運算中的特殊情況
正常情況下冠摄,是兩個數(shù)字進行比較,然而几缭,也存在以下特殊情況
有特殊值參與運算(NaN河泳、Infinity)
-
NaN參與運算:只有
!=
和!==
的情況下,結(jié)果返回true
年栓,其他都返回false
拆挥。
isNaN(x):專門判斷一個數(shù)據(jù)是否為NaN,如果是NaN,則返回true纸兔,反之則為false
通過使用isNaN()惰瓜,來判斷一個數(shù)據(jù)是否為數(shù)字,或者是否能夠隱式轉(zhuǎn)換為數(shù)字使用總之汉矿,NaN不等于崎坊、不大于、不小于任何值洲拇,包括NaN自身
-
Infinity參與計算奈揍,視情況而定。
console.log(Infinity > 8); //true // console.log(Infinity < 8); //false console.log(Infinity >= 8); //true // console.log(Infinity <= 8); // console.log(Infinity == 8); console.log(Infinity != 8); //true // console.log(Infinity === 8); console.log(Infinity !== 8); //true // console.log(Infinity > Infinity); // console.log(Infinity < Infinity); console.log(Infinity >= Infinity); //true console.log(Infinity <= Infinity); //true console.log(Infinity == Infinity); //true // console.log(Infinity != Infinity); console.log(Infinity === Infinity); //true // console.log(Infinity !== Infinity);
總之赋续,Infinity === Infinity男翰,Infinity >= x(包括Infinity自身),且 Infinity蚕捉!= x(除了Infinity自身)
當其他類型的數(shù)據(jù)參與算術(shù)運算
在比較運算中奏篙,首先隱式調(diào)用Number()將數(shù)據(jù)轉(zhuǎn)為Number類型,再進行比較迫淹,其中秘通,存在特殊情況:
如果兩個數(shù)都是字符串,則會根據(jù)每個字符的Unicode號進行比較
-
null參與比較運算時: 雖然 null隱式轉(zhuǎn)換為0敛熬,但是肺稀,當null 與 0 進行比較時,相等 判斷 為
false
应民, !=话原、>= 和 <= 判斷為true
,而且诲锹,null == undefinedconsole.log(null == 0); //false console.log(null != 0); //true console.log(null >= 0); //true console.log(null <= 0); //true console.log(null == undefined); //true
運算順序
從前往后進行比較繁仁,前面的結(jié)果再與后面的進行比較
比如: 3 > 2 > 1 -----> 結(jié)果為 false
根據(jù)運算順序,先運算 3 > 2 归园,結(jié)果為 true(1)黄虱,之后再運算 true(1) > 1, 結(jié)果就為 false
"a" < "b" < "c" -----> 結(jié)果為false
根據(jù)運算順序庸诱,先運算 "a" < "b" 捻浦,結(jié)果為 true,之后再運算 true < "c"桥爽, 兩者進行隱式轉(zhuǎn)換朱灿, true(1) < "c"(NaN),結(jié)果就為 false
邏輯運算符
邏輯運算符(
&& 钠四、 ||盗扒、 !
),常用于布爾類型值之間進行運算侣灶,當操作數(shù)都是布爾值時习霹,返回值為 布爾值 (true / false)
&&
: 且,程序中稱為“邏輯與”
條件1 && 條件2 : 必須條件1 和 條件2 都為 true 時炫隶,返回結(jié)果才為 true淋叶,即,都 真 才 真伪阶,有 假 就 假||
:或煞檩,程序中稱為“邏輯或”
條件1 || 條件2 : 只要任意一個條件為true,結(jié)果為true栅贴,只有所有條件都為false斟湃,結(jié)果才為false,即檐薯,有 真 就 真凝赛,都 假 才 假!
:非,程序中稱為“邏輯非”
將條件的true/false結(jié)果進行取反顛倒坛缕,即墓猎,非 真 即 假,非 假 即 真
邏輯運算的特殊情況
在邏輯運算中赚楚,隱式調(diào)用Boolean()方法毙沾,將數(shù)據(jù)隱式轉(zhuǎn)換為布爾類型的值,再參與邏輯運算宠页。
當其他的數(shù)據(jù)類型的值參與邏輯運算時左胞,先隱式轉(zhuǎn)換為布爾值參與邏輯運算,最終的返回值不一定是布爾值举户,因為非布爾值參與運算完之后恢復該數(shù)據(jù)的初始數(shù)據(jù)類型烤宙。
短路邏輯
邏輯運算中,如果前一個條件已經(jīng)可以得出最終結(jié)論俭嘁,則后續(xù)所有條件不再執(zhí)行躺枕!
(邏輯與 a&&b ) 如果a能被轉(zhuǎn)換為false,那么返回a兄淫;否則屯远,返回b蔓姚。
(邏輯或 a ||b ) 如果a能被轉(zhuǎn)換為true捕虽,那么返回a;否則坡脐,返回b泄私。
console.log(null && "123"); // null
console.log(12 && "123"); // "123"
console.log(12 || "123"); // 12
console.log(undefined || null); // null
在利用短路邏輯的時候,不再返回布爾值,若參與運算的都是數(shù)值晌端,返回值則從兩個數(shù)值中選擇
- 利用短路邏輯捅暴,實現(xiàn)按條件執(zhí)行語句
- 利用 邏輯與 實現(xiàn)條件執(zhí)行語句
條件 && 操作語句 ---> 如果條件為true,才執(zhí)行操作語句咧纠,否則蓬痒,什么也不做 - 利用 邏輯或 實現(xiàn) 默認值效果(二選一取值) 值1 || 值2
- 利用 邏輯與 實現(xiàn)條件執(zhí)行語句
運算順序
同種邏輯運算符,從前往后運算
多種邏輯運算符:漆羔!梧奢、 && 、 ||
位運算(部分演痒,了解)
直接由二進制進行的運算亲轨,將數(shù)值的二進制左移或右移 n 位
左移 n 位:則將數(shù)據(jù) * 2 的n次方,如: 1<< 3 ,即 1 左移 3位鸟顺,值為8,惦蚊,m << n,m乘以2的n次方
右移n位: 則將數(shù)據(jù) / 2 的n次方讯嫂,如: 8 >> 3,即 8 右移3位蹦锋,值為1,m >> n欧芽,m除以2的n次方
固定套路: 取整數(shù)晕粪, n>>>0, n^0渐裸, n|0
賦值運算符
常用的賦值運算符
=巫湘、+=、-=昏鹃、*=尚氛、/=、%=洞渤、**=
=
:基本賦值運算阅嘶,將等號右邊的值保存在左邊的變量中。
+=载迄、-=讯柔、*=、/=护昧、%=魂迄、**=
:擴展賦值運算符,對變量內(nèi)部的值進行修改的簡寫方法惋耙,如:a+=5; ---> a=a+5;
運算符優(yōu)先級 (從高到底)
- () 優(yōu)先級最高
- 一元運算符 ++ -- !
- 算術(shù)運算符 先 **(冪) * / % 后 + -
- 關(guān)系運算符 > >= < <=
- 相等運算符 == != === !=
- 邏輯運算符 先&& 后||
- 賦值運算符
6捣炬、條件分支語句
根據(jù)不同的條件熊昌,執(zhí)行不同的代碼
if 語句
if (條件表達式){
//結(jié)構(gòu)體1
}else{
//結(jié)構(gòu)體2
}
如果條件表達式為 true , 執(zhí)行 結(jié)構(gòu)體1湿酸, 否則執(zhí)行結(jié)構(gòu)體2
if 語句可以實現(xiàn)選擇的功能婿屹,兩個分支可以選擇一個執(zhí)行,不會全都執(zhí)行推溃,其中昂利,如果只需實現(xiàn)一個結(jié)構(gòu)體,可以將else分支省略铁坎。
-
可以實現(xiàn)多分支的if語句页眯,形如:
if (條件1) { //滿足條件1, 執(zhí)行的結(jié)構(gòu)體 } else if (條件2) { //不滿足條件1厢呵, 滿足條件2窝撵, 執(zhí)行的結(jié)構(gòu)體 } else if (條件3) { //不滿足條件1 / 2, 滿足條件3襟铭, 執(zhí)行的結(jié)構(gòu)體 } else { //不滿足前面所有條件碌奉, 執(zhí)行的結(jié)構(gòu)體 }
-
if 語句的嵌套
if語句的結(jié)構(gòu)體中,可以嵌套另外一組if語句if (條件1) { if (條件2) { //滿足條件1寒砖, 同時滿足條件2赐劣, 執(zhí)行的結(jié)構(gòu)體 } else { // 滿足條件1, 但不滿足條件2哩都, 執(zhí)行的結(jié)構(gòu)體 } } else { //不滿足條件1魁兼, 執(zhí)行的結(jié)構(gòu)體 }
三元表達式
語法: 條件表達式 ? true_value : false_value;
根據(jù)條件表達式的結(jié)果,選擇執(zhí)行true_value的語句 或者 false_value的語句
switch語句
switch語句允許一個程序計算一個表達式的值漠嵌,并根據(jù)值匹配到某一個case 標簽咐汞,如果匹配成功,則執(zhí)行相關(guān)語句
switch (表達式) {
case 值1:
//結(jié)構(gòu)體1;
break;
case 值2:
//結(jié)構(gòu)體2;
break;
...
default:
//結(jié)構(gòu)體n;
}
switch:入口儒鹿,開關(guān)化撕,進入第一個匹配到的case中,開始依次向下執(zhí)行
break: 終止當前結(jié)構(gòu)的繼續(xù)執(zhí)行约炎。一般執(zhí)行一個case時植阴,結(jié)構(gòu)體中都應該加break;如果相鄰的多個case執(zhí)行相同的操作時圾浅,中間可以不寫break掠手,減少代碼量
當然,最后一個匹配項可以不加break狸捕,即default的結(jié)構(gòu)體中可以省略break喷鸽,甚至有時default可以不寫;
條件分支--總結(jié)
if語句: 最常用的語句府寒,所有判斷情況都能夠書寫
三元表達式:多用于給變量賦值時根據(jù)條件二選一
switch..case語句: 多用于給一個表達式魁衙,去匹配多個固定值可能性的情況,這種情況下株搔,使用switch比if else的效率高剖淀,因為不帶隱式類型轉(zhuǎn)換
7、循環(huán)語句
循環(huán)三要素:
1纤房、循環(huán)條件:保證循環(huán)可以繼續(xù)執(zhí)行的判斷條件(不是退出條件)
2纵隔、循環(huán)變量:循環(huán)條件中,用作判斷的變量
3炮姨、循環(huán)體:循環(huán)反復執(zhí)行的代碼捌刮,在循環(huán)體中,都需要迭代更新循環(huán)變量的值
for 循環(huán)
- 語法:
for (定義循環(huán)變量; 循環(huán)條件; 更新循環(huán)變量) { // 循環(huán)體 }
- for循環(huán)執(zhí)行過程
- 定義循環(huán)變量
- 判斷循環(huán)條件
- 若滿足循環(huán)條件舒岸,則進入循環(huán)體绅作,執(zhí)行循環(huán)體中的語句,更新循環(huán)變量蛾派,本次循環(huán)結(jié)束俄认。若不滿足循環(huán)條件,則直接結(jié)束循環(huán)洪乍。
- 重復步驟2眯杏、3,直到不滿足循環(huán)條件壳澳,則結(jié)束循環(huán)岂贩。
while 循環(huán)
-
語法:
var 循環(huán)變量 = 初始值; //聲明并初始化循環(huán)變量 while (循環(huán)條件) { // 循環(huán)體 // 更新循環(huán)變量 }
while循環(huán)執(zhí)行過程:與for循環(huán)類似
do-while循環(huán)
-
語法:
var 循環(huán)變量 = 初始值; //聲明并初始化循環(huán)變量 do { // 循環(huán)體 // 更新變量 } while (循環(huán)條件);
do-while循環(huán)執(zhí)行過程與while類似,唯一區(qū)別在于巷波,do-while先執(zhí)行一次循環(huán)萎津,再判斷循環(huán)條件,是否滿足繼續(xù)執(zhí)行循環(huán)
do-while vs while
只需要看開始執(zhí)行循環(huán)前抹镊,循環(huán)條件是否滿足:
1姜性、如果 滿足: 則兩者都能夠進入循環(huán)體,兩者完全一樣
2髓考、如果 不滿足: do-while至少可以執(zhí)行一次循環(huán)體部念,而while一次都無法執(zhí)行
循環(huán)語句--總結(jié)
- 遇到必須先執(zhí)行一次循環(huán)體的循環(huán),使用 do-while 循環(huán)
- 而 for循環(huán) 和 while 循環(huán)中:
1氨菇、如果循環(huán)變量在更新迭代時儡炼,有規(guī)律性,則選擇for循環(huán)
2查蓉、如果循環(huán)變量的變化沒有規(guī)律時乌询,則選擇while循環(huán),同時可以配合使用break來強行終止循環(huán)
break豌研、continue語句
break語句
能夠立即終止當前的循環(huán)結(jié)構(gòu)妹田,跳出循環(huán)體
break語句只能終止當前所在的那層循環(huán)唬党,如果嵌套多層循環(huán),外層循環(huán)是無法終止的
如果想停止外層循環(huán)鬼佣,則需要在外層添加一個自定義label標簽驶拱,在內(nèi)層循環(huán)的break
關(guān)鍵字后面 空格 加自定義的label標簽名
breakLoop: for (定義循環(huán)變量; 循環(huán)條件; 更新循環(huán)變量) {
for (定義循環(huán)變量; 循環(huán)條件; 更新循環(huán)變量) {
// 循環(huán)體
if (條件) {
// 結(jié)構(gòu)體
break breakLoop;
}
}
}
continue語句
立即結(jié)束當前次循環(huán),進入下一次循環(huán)
continue默認也只能進入自身循環(huán)結(jié)構(gòu)的下一次循環(huán)晶衷,不能結(jié)束外層循環(huán)的這一次循環(huán)而進入下一次
要實現(xiàn)外層循環(huán)的方式蓝纲,與 break 一樣,在外層添加自定義label標簽
break語句 和 continue語句晌纫,都是為了優(yōu)化性能税迷,減少計算機的計算次數(shù)
?
?