JS基礎(chǔ)(一)---基本數(shù)據(jù)類型呢撞、運算符及基本語句

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;

使用變量的特殊情況
  1. 當只聲明了變量喉脖,但沒賦值椰苟,在使用時,默認值為undefined
  2. 不能使用從未聲明的變量树叽,在使用時舆蝴,會報錯,ReferenceError:XXX is not defined
  3. 從未聲明的變量题诵,能夠賦值洁仗,此時變量為全局變量(與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驳庭、undefinednull
  • 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)
  1. NaN參與運算:返回值都為NaN

  2. 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ù)做比較缰雇,比大小,返回值是一個布爾值签餐,truefalse

== 表示等于,只判斷值大小是否相等寓涨,不判斷數(shù)據(jù)類型
!= 表示不等于盯串,與 == 相反
=== 表示全等氯檐,首先數(shù)據(jù)類型必須相同,其次值相同(不進行隱式轉(zhuǎn)換)
!== 表示不全等体捏,與 === 相反

比較運算中的特殊情況

正常情況下冠摄,是兩個數(shù)字進行比較,然而几缭,也存在以下特殊情況

有特殊值參與運算(NaN河泳、Infinity)
  1. NaN參與運算:只有 !=!==的情況下,結(jié)果返回true年栓,其他都返回 false拆挥。
    isNaN(x):專門判斷一個數(shù)據(jù)是否為NaN,如果是NaN,則返回true纸兔,反之則為false
    通過使用isNaN()惰瓜,來判斷一個數(shù)據(jù)是否為數(shù)字,或者是否能夠隱式轉(zhuǎn)換為數(shù)字使用

    總之汉矿,NaN不等于崎坊、不大于、不小于任何值洲拇,包括NaN自身

  2. 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 == undefined

    console.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
運算順序

同種邏輯運算符,從前往后運算
多種邏輯運算符:漆羔!梧奢、 && 、 ||


位運算(部分演痒,了解)

直接由二進制進行的運算亲轨,將數(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)先級 (從高到底)

  1. () 優(yōu)先級最高
  2. 一元運算符 ++ -- !
  3. 算術(shù)運算符 先 **(冪) * / % 后 + -
  4. 關(guān)系運算符 > >= < <=
  5. 相等運算符 == != === !=
  6. 邏輯運算符 先&& 后||
  7. 賦值運算符

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í)行過程
    1. 定義循環(huán)變量
    2. 判斷循環(huán)條件
    3. 若滿足循環(huán)條件舒岸,則進入循環(huán)體绅作,執(zhí)行循環(huán)體中的語句,更新循環(huán)變量蛾派,本次循環(huán)結(jié)束俄认。若不滿足循環(huán)條件,則直接結(jié)束循環(huán)洪乍。
    4. 重復步驟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ù)

?

?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市锹漱,隨后出現(xiàn)的幾起案子箭养,更是在濱河造成了極大的恐慌,老刑警劉巖哥牍,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件露懒,死亡現(xiàn)場離奇詭異,居然都是意外死亡砂心,警方通過查閱死者的電腦和手機懈词,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門停蕉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來迟郎,“玉大人,你說我怎么就攤上這事桦锄∫朐荩” “怎么了抠忘?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長外永。 經(jīng)常有香客問我崎脉,道長,這世上最難降的妖魔是什么伯顶? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任囚灼,我火速辦了婚禮,結(jié)果婚禮上祭衩,老公的妹妹穿的比我還像新娘灶体。我一直安慰自己,他們只是感情好掐暮,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布蝎抽。 她就那樣靜靜地躺著,像睡著了一般路克。 火紅的嫁衣襯著肌膚如雪樟结。 梳的紋絲不亂的頭發(fā)上养交,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音瓢宦,去河邊找鬼碎连。 笑死,一個胖子當著我的面吹牛刁笙,可吹牛的內(nèi)容都是我干的破花。 我是一名探鬼主播谦趣,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼疲吸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了前鹅?” 一聲冷哼從身側(cè)響起摘悴,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎舰绘,沒想到半個月后蹂喻,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡捂寿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年口四,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秦陋。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡蔓彩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出驳概,到底是詐尸還是另有隱情赤嚼,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布顺又,位于F島的核電站更卒,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏稚照。R本人自食惡果不足惜蹂空,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望果录。 院中可真熱鬧腌闯,春花似錦、人聲如沸雕憔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽斤彼。三九已至分瘦,卻和暖如春蘸泻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嘲玫。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工悦施, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人去团。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓抡诞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親土陪。 傳聞我的和親對象是個殘疾皇子昼汗,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容