JavaScript語法
字面量 也叫直接量,就是程式中直接使用的,是變數后面的值
變數就是宣告一個未知可變的量 變數宣告符合unicode編碼所有變數符合utf-8的編碼都可以
識別符號命名標準:
1.必須是字母,數字,_,¥開頭
2.以駝峰命名規則
3. 首單詞小寫 后面的單詞首字母大寫 -*/
變數的作用域
在函式之外宣告的變數,叫做全域變數,因為它可被當前檔案中的任何其他代碼所訪問,
在函式內部宣告的變數,叫做區域變數,因為它只能在當前函式的內部訪問,
變數提升
JavaScript 變數的另一個不同尋常的地方是,你可以先使用變數稍后再宣告變數而不會引發例外,這一概念稱為變數提升;JavaScript
變數感覺上是被“提升”或移到了函式或陳述句的最前面,但是,提升后的變數將回傳 undefined
值,因此在使用或參考某個變數之后進行宣告和初始化操作,這個被提升的變數仍將回傳 undefined 值,
例子1
console.log(x === undefined); // true
var x = 3;
例子2
//will return a value of undefined
var myvar = "my value";
(function() {
console.log(myvar); // undefined
var myvar = "local value";
})();
上面的例子,也可寫作:
例子1
var x;
console.log(x === undefined); // true
x = 3;
例子2
var myvar = "my value";
(function() {
var myvar;
console.log(myvar); // undefined
myvar = "local value";
})();
由于存在變數提升,一個函式中所有的var陳述句應盡可能地放在接近函式頂部的地方,這個習慣將大大提升代碼的清晰度,
常量(Constants)
你可以用關鍵字 const
創建一個只讀的常量,常量識別符號的命名規則和變數相同:必須以字母、下劃線(_)或美元符號($)開頭并可以包含有字母、數字或下劃線,
const PI = 3.14;
常量不可以通過重新賦值改變其值,也不可以在代碼運行時重新宣告,它必須被初始化為某個值, 常量的作用域規則與 let
塊級作用域變數相同,若省略const關鍵字,則該識別符號將被視為變數, 在同一作用域中,不能使用與變數名或函式名相同的名字來命名常量,
例如:
// 這會造成錯誤
function f() {};
const f = 5;
// 這也會造成錯誤
function f() {
const g = 5;
var g;
//陳述句
}
然而,物件屬性被賦值為常量是不受保護的,所以下面的陳述句執行時不會產生錯誤,
const MY_OBJECT = {"key": "value"};
MY_OBJECT.key = "otherValue";
同樣的,陣列的被定義為常量也是不受保護的,所以下面的陳述句執行時也不會產生錯誤,
const MY_ARRAY = ['HTML','CSS'];
MY_ARRAY.push('JAVASCRIPT');
console.log(MY_ARRAY); //logs ['HTML','CSS','JAVASCRIPT'];
資料型別
最新的 ECMAScript 標準定義了8種資料型別:
5種基本資料型別:
1 布林值(Boolean),有2個值分別是:true 和 false.
2 null , 一個表明 null 值的特殊關鍵字,JavaScript 是大小寫敏感的,故 null 與 Null、NUL完全不同,
3 undefined ,和 null 一樣是一個特殊的關鍵字,undefined 表示變數未定義時的屬性,
4 數字(Number),整數或浮點數,例如: 42 或者3.14159,
5 字串(String),字串是一串表示文本值的字符序列,例如:“Howdy” ,
3種參考資料型別:
1 以及物件(Object),
2 function 函式
3 array 陣列
雖然這些資料型別相對來說比較少,但是通過他們你可以在程式中開發有用的功能,物件(Objects)
和函式(functions)是這門語言的另外兩個基本元素,你可以把物件當作存放值的一個命名容器,然后將函式當作你的程式能夠執行的步驟,
字面量 (Literals)
布爾字面量 (Boolean literals)
不要混淆作為布爾物件的真和假與布爾型別的原始值true和false,布爾物件是原始布爾資料型別的一個包裝器,參見 布爾物件,
整數 (Integers)
整數可以用十進制(基數為10)、十六進制(基數為16)、八進制(基數為8)以及二進制(基數為2)表示,
十進制整數字面量由一串數字序列組成,且沒有前綴0, 八進制的整數以 0(或0O、0o)開頭,只能包括數字0-7,
十六進制整數以0x(或0X)開頭,可以包含數字(0-9)和字母 a~f 或 A~F, 二進制整數以0b(或0B)開頭,只能包含數字0和1,
嚴格模式下,八進制整數字面量必須以0o或0O開頭,而不能以0開頭,
整數字面量舉例:
0, 117 and -345 (十進制, 基數為10)
015, 0001 and -0o77 (八進制, 基數為8) 0x1123,
0x00111 and -0xF1A7 (十六進制, 基數為16或"hex")
0b11, 0b0011 and -0b11 (二進制,基數為2)
浮點數字面量 (Floating-point literals)
浮點數字面值可以有以下的組成部分:
一個十進制整數,可以帶正負號(即前綴“+”或“ - ”), 小數點(“.”),
小數部分(由一串十進制數表示),
指數部分 -指數部分以“e”或“E”開頭,后面跟著一個整數,可以有正負號(即前綴“+”或“-”),
浮點數字面量至少有一位數字,而且必須帶小數點或者“e”(大寫“E”也可),
簡言之,其語法是:
[(+|-)][digits][.digits][(E|e)[(+|-)]digits]
例如:
3.14
-.2345789 // -0.23456789
-3.12e+12 // -3.12*1012
.1e-23 // 0.1*10-23=10-24=1e-24
物件字面量 (Object literals)
物件字面值是封閉在花括號對({})中的一個物件的零個或多個"屬性名-值"對的(元素)串列,你不能在一條陳述句的開頭就使用物件字面值,這將導致錯誤或產生超出預料的行為,
因為此時左花括號({)會被認為是一個陳述句塊的起始符號,(譯者:這 里需要對陳述句statement、塊block等基本名詞的解釋)
以下是一個物件字面值的例子,物件car的第一個元素(譯注:即一個屬性/值對)定義了屬性myCar;第二個元素,屬性getCar,參考了一個函式(即CarTypes(“Honda”));第三個元素,屬性special,使用了一個已有的變數(即Sales),
var Sales = "Toyota";
function CarTypes(name) {
return (name === "Honda") ?
name :
"Sorry, we don't sell " + name + "." ;
}
var car = { myCar: "Saturn", getCar: CarTypes("Honda"), special: Sales };
console.log(car.myCar); // Saturn
console.log(car.getCar); // Honda
console.log(car.special); // Toyota
更進一步的,你可以使用數字或字串字面值作為屬性的名字,或者在另一個字面值內嵌套上一個字面值,如下的示例中使用了這些可選項,
var car = { manyCars: {a: "Saab", "b": "Jeep"}, 7: "Mazda" };
console.log(car.manyCars.b); // Jeep
console.log(car[7]); // Mazda
物件屬性名字可以是任意字串,包括空串,如果物件屬性名字不是合法的javascript識別符號,它必須用"“包裹,屬性的名字不合法,那么便不能用.訪問屬性值,而是通過類陣列標記(”[]")訪問和賦值,
var unusualPropertyNames = {
"": "An empty string",
"!": "Bang!"
}
console.log(unusualPropertyNames.""); // 語法錯誤: Unexpected string
console.log(unusualPropertyNames[""]); // An empty string
console.log(unusualPropertyNames.!); // 語法錯誤: Unexpected token !
console.log(unusualPropertyNames["!"]); // Bang!
字串字面量 (String literals)
字串字面量是由雙引號(")對或單引號(’)括起來的零個或多個字符,字串被限定在同種引號之間;也即,必須是成對單引號或成對雙引號,下面的例子都是字串字面值:
"foo"
'bar'
"1234"
"one line \n another line"
"John's cat"
運算子
運算子就是將一個數或多個數進行運算,并將結果回傳 運算子分為:算術運算子 邏輯運算子 一元運算子 比較運算子 算術運算子:+ - * / % ++ –
邏輯及運算子:與&& 或|| 非!
&&必須倆個條件都滿足才能成立
||滿足其中一條條件即可
!直接否定
一元運算子:a++ ++a
比較運算子:> 大于運算子 < 小于運算子 <= 小于或等于運算子 >= 大于或等于運算子 ==相等運算子 === 嚴格相等運算子 ! != 不相等運算子
一個等于號是賦值 倆個等于號是判斷值是否相等 三個等于號是判斷值跟資料型別是否相等、 加號左右倆測如果有字串就會進行拼串,若無字串則轉為number計算 加減乘除取模都轉為number計算
條件運算子也叫三元運算子
賦值運算子
*= += -= = /= %=
if陳述句
if(條件){執行代碼}
else{執行代碼1}
if執行流程
只要滿足第一個判斷條件就執行對應的陳述句,下面無論是否滿足都不執行
不滿足第一個條件,接著判斷下一個條件,如果下一個條件滿足就停止判斷,輸出對應陳述句,如果下一個陳述句還不滿足,就繼續往下判斷
所以如果要寫判斷條件把最大范圍寫在上面,小范圍寫在后面,或者分段寫判斷條件
回圈陳述句
for回圈
for回圈的關鍵字 ()里面是條件 var i=0;初始值 i<=10;回圈條件 i++;自增
for回圈句式/語法
for(1初始值;回圈條件;回圈方式){
執行陳述句
}
1 初始化變數可以放到小括號里面也可以放到回圈外面
2 判斷是否符合回圈條件,如果是true那就繼續往下執行 如果是false,直接不執行
3 執行回圈體中的陳述句 4 執行回圈方式(++/–等
5 判斷是否符合回圈條件,如果是true那就繼續往下執行 如果是false,直接不執行 初始值只能執行一次
while回圈
1 初始化變數:是在回圈外面初始化
2 判斷是否符合回圈條件 如果回傳值是true滿足條件則執行代碼
如果回傳值是false不滿足條件則跳出回圈
3 執行的代碼塊
4 回圈方式,如果放在回圈之前,會先按斬訓圈方式增加或減少,然后再輸出,如果放到輸出后會執行輸出,進行下一個回圈之前,按斬訓圈方式增加或減少
while(true){}
當while后面的條件一直是true的時候就是一個死回圈,為了避免問題,有需要情況下可以在回圈體內進行判斷,達到某個條件然后break(跳出回圈),
break跟continue可以處理死回圈中執行停止或跳過
do..while回圈
var a=0;//宣告變數
do{//執行塊
alert(a);//輸出
a++;//回圈方式
}
while(a<0)//回圈條件
for,while和do while的區別
For的初始值,條件,回圈方式可以寫到小括號里面,其他不可以使用初始值變數
while和do while初始值都是寫在外面的 條件寫在小括號內,回圈方式卸載回圈體內, do
while是先執行后判斷,無論條件是否為true他都會執行一遍
for和while是先判斷后執行,當條件為true時才會執行回圈體中的代碼,條件是false則不執行
switch條件分支陳述句
parseInt取整,將字串轉換成整型,回傳由字串轉換得到的整數, parseInt()取整是JavaScript當中的內置方法
相同點:倆者取整后都是number型別 不同點:輸入數字字串取整后得數字型別的值 輸入得漢字型別的字串取整后得NaNparseFloat()去浮點 parseFloat()把小數點后面的0去掉
case是switch中匹配的每個案例,必須用break中斷每一個陳述句(除了最后一個),如果不寫break只要符合條件包括后面的全部顯示,寫break只輸出符合條件的匹配項
default默認 在switch中放到最后一項,作為最后默認的選項
switch陳述句和if陳述句的區別
if陳述句可以對一些一切未知的條件進行判斷 switch陳述句只可以對有一些已知條件的事情進行判斷
強制型別轉換
String()將非字串型別轉換為字串
Number()將非數字型別的轉換為數字型別
Boolean()將非布爾型別的轉換為布爾型別
隱式型別轉換
+-*/%
parseInt()將字串型別的轉換為整數數字
跳轉陳述句
break是跳出回圈 break默認終止的是離他最近的回圈 如果倆個回圈嵌套,想終止外側回圈給外側回圈起名字,在外側回圈上直接寫名字
名字:for(){} 然后break 名字; 實作內外回圈同時終止
基本資料型別都是一個具體的值 值與值之間沒有任何聯系
物件則不同,除了基本型別都是物件
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/292195.html
標籤:其他
