主頁 > 前端設計 > JavaScript 基礎知識

JavaScript 基礎知識

2021-07-23 08:16:34 前端設計

1. 變數及其命名規范

在 JavaScript 中,使用等號 = 對變數進行賦值,可以把任意資料型別賦值給變數,同一個變數可以反復賦值,而且可以是不同型別的變數,但是要注意只能用 var 申明一次,

這種變數本身型別不固定的語言稱之為動態語言,與之對應的是靜態語言,靜態語言在定義變數時必須指定變數型別,如果賦值的時候型別不匹配,就會報錯,

變數的命名:

  • 變數名只能由字母、數字、下劃線、$ 組成,且開頭不能是數字,
  • 變數區分大小寫,
  • 變數名要符合兩大法則之一:
  1. 小駝峰法則:變數首字母小寫,之后每個單詞的首字母大寫(常用);
  2. 匈牙利命名法:變數所有字母都小寫,單詞之間用下劃線分割,
var helloWorld;  // 小駝峰命名法
var hello_world; // 匈牙利命名法

strict 模式

ECMA 在后續規范中推出了 strict 模式,在 strict 模式下運行的 JavaScript 代碼,強制通過 var 申明變數,未使用 var 申明變數就使用的,將導致運行錯誤,使用方法如下:

'use strict';  // 在 JavaScript 代碼的第一行寫上

2. 6種變數資料型別

2.1. Undefined:未定義

在 JavaScript 中,使用 var 宣告變數,但沒有進行初始化賦值時,結果為 Undefined,如果變數沒有宣告直接使用,則會報錯,不屬于 Undefined

Undefined 僅僅在判斷函式引數是否傳遞的情況下有用,

<script type="text/javascript">
    var a;
    console.log(a); // 使用 var 宣告變數 a,但未賦值,a 為 Undefined
    console.log(b); // 沒有宣告直接使用的變數 b,會報錯
</script>

2.2. NULL:空參考

NULL 在 JavaScript 中是一種特殊的資料型別,表示一種空的參考,一個“空”的值,也就是這個變數中什么都沒有,它和 0 以及空字串 '' 不同,0 是一個數值,'' 表示長度為 0 的字串,而 NULL 表示“空”,同時,NULL 作為關鍵字不區分大小寫,形如 “NULL”、“Null”、“null” 均為合法資料型別,

2.3. Boolean:布爾型別

Boolean 值是一種非常常用的資料型別,表示真或者假,可選值只有兩個:truefalse

var a = true;
var b = 1>2;
console.log(a);  // true
console.log(b);  // false

2.4. Number:數值型別

在 JavaScript 中,沒有區分整數型別和小數型別,二十統一用數值型別代替,例如整數和小數型別都輸入 Number 型別,

Infinity 表示無限大,當數值超過了 JavaScript 的 Number 所能表示的最大值時,就表示為 Infinity

var a = 11;
var b = 11.2;

2.5. String:字串型別

使用雙引號 "" 或單引號 '' 包裹的內容,被稱為字串,兩種字串沒有任何區別,且可以互相包含,

2.6. Object:物件型別

Object 是一種物件型別,在 JavaScript 中有一句話“萬物皆物件”,包括函式、陣列、自定義物件等都屬于物件型別,

3. JavaScript 中的變數函式

3.1. Number() 函式:將變數轉為數值型別

  1. 字串型別轉數值
Number("111");     // 字串為純數值字串,會轉  為對應的數字,轉換之后結果為 111
Number("");        // 字串為空字串時,會轉為0
Number("111a");    // 字串中包換其他非數字字符時,不能轉換,轉換結果為 NaN
  1. 布爾 Boolean 型別轉數值
Number(true); // true 轉換為1
Number(false);// false 轉換為0
  1. NullUndefined 轉數值
Number(null);      // Null 轉換為0,將空參考 null 轉換為 0
Number(undefined); // Undefined 轉換為 NaN,
  1. Object 型別轉數值

先呼叫 ValueOf() 方法,確定函式是否有回傳值,再根據上述各種情況判斷,

3.2. isNaN():檢測變數是否為 NaN

// 1. 純數字字串,檢測結果為 false
isNaN("111"); // 先用 Number() 轉換為數值型別的 111,所以 isNaN 檢測結果為 false
// 2.空字串,檢測結果為 false
isNaN("");    // 先用 Number() 轉換為數值型別的 0,所以 isNaN 檢測結果為 false
// 3.包含其他字符,檢測結果為 true
isNaN("la");  // 先用 Number() 轉為 NaN,所以 isNaN 檢測結果為 true
// 4.布爾型別,檢測結果為 false
isNaN(false); // 先用 Number() 轉為數值型別的 0,所以 isNaN 檢測結果為 false

3.3. parseInt():將字串轉為整型

parseInt() 函式的作用是將字串型別轉為整數數值型別,即 parseInt() 函式可決議一個字串,并回傳一個整數,

// 1.純數字字串
document.write(parseInt("123"));        // 轉換為 123
document.write(parseInt("123.11"));     // 轉換為 123
// 2.包含其他字符的字串:截取第一個非數值字符前的數值部分進行輸出
document.write(parseInt("123.11a"));    // 轉化為小數時,會直接抹掉小數點,轉換為 123
document.write(parseInt("a123"));       // 轉換為 NaN

3.4. parseFloat():將字串轉換為浮點型

parseFloat() 函式的作用是將字串轉換為小數數值型別,使用方式同 ParseInt() 類似,唯一不用的是,在轉化整數字串時,保留整數,但是當轉化包含小數點的字串時,保留小數點,

document.write(parseFloat("123"));    // 轉化為 123
document.write(parseFloat("123a11")); // 轉化為 123
document.write(parseFloat("a123"));   // 轉化為 NaN
document.write(parseFloat("a123.12"));// 轉化為 123.12
document.write(parseFloat("123.12a"));// 轉化為 NaN

Notice:parseInt()parseFloat() 函式只能轉換 String 型別,對 BoolennullUndefined 進行轉換結果均為 NaN

3.5. typeof():變數型別檢測

typeof() 是 JavaScript 中非常常用的一個函式,它的主要作用是用來檢測一個變數的資料型別,傳入一個變數,回傳變數所屬的資料型別,一般分為以下幾種情況:

  1. 未定義:資料型別為Undefined
  2. 數值:資料型別為 Number
  3. 字串:資料型別為 String
  4. True/False:資料型別為 Boolean
  5. Null/物件:資料型別為 Object
  6. 函式:資料型別為 function

為了方便使用,JavaScript 在語法上為 typeof 函式提供了兩中常用寫法,分別是函式寫法和指令寫法:

var a;
// 1.函式寫法:需要保留 (),變數通過()傳入,基本語法如下:
typeof(a);     // 函式呼叫法師需要將變數通過函式后面的()傳入
// 2.指令寫法:可以省略 (),直接將變數緊跟 typeof,基本語法如下:
typeof a;      // 指令呼叫方式可以省略(),直接將變數緊跟 typeof

4. 運算子

4.1. 相等比較運算子

1.===== 的區別以及代碼展示

  1. == 會自動轉換資料型別再比較,很多時候會得到意想不到的結果;
  2. === 不會轉換資料型別,如果資料型別不一致,回傳 false,如果一致,再比較,
false == 0;    // true
false === 0;   // false

2.NaN 特殊的 Number 比較

NaN 這個特殊的 Number 與所有其他的值都不相等,包括他自己:

NaN === NaN;   // false

唯一能夠判斷 NaN 的方法是通過 isNaN() 函式:

isNaN(NaN);    // true

3.浮點數的相等比較

1/2 === (1-2/3);  // false

這是由于浮點數在運算程序中會產生誤差,因為計算機無法精確表示無限回圈小數,要比較兩個浮點數是否相等,只能計算它們之差的絕對值,看是否小于某個閾值:

Math.abs(1/3 - (1-2/3)) < 0.0000001;  // true

4.2. 逗號運算子

var a = 2;
var b = 0;
var c;
c = (++a, a *=2, b = a*5);
document.write(c); // c = 30,整個逗號運算式的值是最后一個運算式的值

5. 陣列

陣列是一組按順序排列的集合,結合中的每個值成為元素,JavaScript 的陣列可以包括任意資料型別:

// 陣列的元素可以通過索引來訪問
var arr = [1, 2, 3.14, 'Hello', null, true];
// 上述陣列包含六個元素,陣列用 `[]` 表示,元素之間用 `,` 隔開,

arr.length;  // 獲取陣列的長度,結果為 6
arr[0]; // 回傳索引為0的元素,即1
arr[5]; // 回傳索引為5的元素,即true
arr[6]; // 索引超出了范圍,回傳undefined

// 另一種創建陣列的方法是通過 `Array()` 函式實作:
var arr1 = new Array(1, 2, 3);  // 創建了陣列 [1, 2, 3]

如果直接給 Arraylength 賦一個新的值會導致 Array 大小發生變化:

var arr = [1, 2, 3];
arr.length;        // 3
arr.length = 6;    // arr變為[1, 2, 3, undefined, undefined, undefined]
arr.length 2;      // arr變為[1, 2]

Array 可以通過索引把對應的元素修改為新的值,因此,對 Array 的索引進行賦值會直接修改這個 Array

ar arr = ['A', 'B', 'C'];
arr[1] = 99;            // arr現在變為['A', 99, 'C']
// 如果通過索引賦值時,索引超過了范圍,同樣會引起 Array 大小的變化:
arr[5] = 'x';           // arr變為[1, 2, 3, undefined, undefined, 'x']

Notice: 大多數其他編程語言不允許直接改變陣列的大小,越界訪問索引會報錯,然而,JavaScript 的 Array 卻不會有任何錯誤,在撰寫代碼時,不建議直接修改 Array 的大小,訪問索引時要確保索引不會越界,

5.1. indexOf()

String 類似,Array 也可以通過 indexOf() 來搜索一個指定的元素的位置:

var arr = [10, 20, '30', 'xyz'];
arr.indexOf(10);                 // 元素10的索引為0
arr.indexOf(20);                 // 元素20的索引為1
arr.indexOf(30);                 // 元素30沒有找到,回傳-1
arr.indexOf('30');               // 元素'30'的索引為2

5.2. slice()

slice() 就是對應 Stringsubstring() 版本,它截取 Array 的部分元素,然后回傳一個新的 Array

var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
document.write(table.slice(0, 3)); // 從索引0開始,到索引3結束,但不包括索引3: ['A', 'B', 'C']
document.write(table.slice(3));    // 從索引3開始到結束: ['D', 'E', 'F', 'G']

注意到 slice() 的起止引數包括開始索引,不包括結束索引,
如果不給 slice() 傳遞任何引數,它就會從頭到尾截取所有元素,利用這一點,我們可以很容易地復制一個 Array

var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
var aCopy = arr.slice();
aCopy; // ['A', 'B', 'C', 'D', 'E', 'F', 'G']
aCopy === arr; // false

5.3. push()pop()

push()Array 的末尾添加若干元素,pop() 則把Array 的最后一個元素洗掉掉:

var arr = [1, 2];
arr.push('A', 'B'); // 回傳Array新的長度: 4
arr; // [1, 2, 'A', 'B']
arr.pop(); // pop()回傳'B'
arr; // [1, 2, 'A']
arr.pop(); arr.pop(); arr.pop(); // 連續pop 3次
arr; // []
arr.pop(); // 空陣列繼續pop不會報錯,而是回傳undefined
arr; // []

5.4. unshift()shift()

如果要往 Array 的頭部添加若干元素,使用 unshift() 方法,shift() 方法則把 Array 的第一個元素刪掉:

var arr = [1, 2];
arr.unshift('A', 'B'); // 回傳Array新的長度: 4
arr; // ['A', 'B', 1, 2]
arr.shift(); // 'A'
arr; // ['B', 1, 2]
arr.shift(); arr.shift(); arr.shift(); // 連續shift 3次
arr; // []
arr.shift(); // 空陣列繼續shift不會報錯,而是回傳undefined
arr; // []

5.5. sort()

sort() 可以對當前 Array 進行排序,它會直接修改當前 Array 的元素位置,直接呼叫時,按照默認順序排序:

var arr = ['B', 'C', 'A'];
arr.sort(); // arr = ['A', 'B', 'C']

5.6. reverse()

// 反轉陣列
var arr = ['one', 'two', 'three'];
arr.reverse(); // arr = ['three', 'two', 'one']

5.7. splice()

splice() 方法是修改 Array 的“萬能方法”,它可以從指定的索引開始洗掉若干元素,然后再從該位置添加若干元素:

var arr = ['Microsoft', 'Apple', 'Yahoo', 'AOL', 'Excite', 'Oracle'];
// 從索引2開始洗掉3個元素,然后再添加兩個元素:
arr.splice(2, 3, 'Google', 'Facebook'); // 回傳洗掉的元素 ['Yahoo', 'AOL', 'Excite']
arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']

// 只洗掉,不添加:
arr.splice(2, 2); // ['Google', 'Facebook']
arr; // ['Microsoft', 'Apple', 'Oracle']

// 只添加,不洗掉:
arr.splice(2, 0, 'Google', 'Facebook'); // 回傳[],因為沒有洗掉任何元素
arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']

5.8. concat()

concat() 方法把當前的 Array 和另一個 Array 連接起來,并回傳一個新的 Array

var arr = ['A', 'B', 'C'];
var added = arr.concat([1, 2, 3]);
added; // ['A', 'B', 'C', 1, 2, 3]
arr; // ['A', 'B', 'C']

請注意,concat() 方法并沒有修改當前 Array ,而是回傳了一個新的 Array

實際上,concat() 方法可以接收任意個元素和 Array,并且自動把 Array 拆開,然后全部添加到新的 Array 里:

var arr = ['A', 'B', 'C'];
arr.concat(1, 2, [3, 4]); // ['A', 'B', 'C', 1, 2, 3, 4]

5.9. join()

join() 方法是一個非常實用的方法,它把當前 Array 的每個元素都用指定的字串連接起來,然后回傳連接后的字串:

var arr = ['A', 'B', 'C', 1, 2, 3];
arr.join('-'); // 'A-B-C-1-2-3'
// 如果Array的元素不是字串,將自動轉換為字串后再連接,

5.10. 多維陣列

如果陣列的某個元素又是一個 Array,則可以形成多維陣列,例如:

var arr = [[1, 2, 3], [400, 500, 600], '-'];
// 上述Array包含3個元素,其中頭兩個元素本身也是Array,

6. 物件

JavaScript 的物件是一組由鍵-值組成的無序集合,例如:

var person = {
    name: 'Bob',
    age: 20,
    tags: ['js', 'web', 'mobile'],
    city: 'Beijing',
    hasCar: true,
    zipcode: null
};

JavaScript 物件的鍵都是字串型別,值可以是任意資料型別,上述 person 物件一共定義了 6 個鍵值對,其中每個鍵又稱為物件的屬性,例如,personname 屬性為 'Bob'zipcode 屬性為 null

訪問屬性是通過 . 運算子完成的,但這要求屬性名必須是一個有效的變數名,如果屬性名包含特殊字符,就必須用 '' 括起來:

var xiaohong = {
    name: '小紅',
    'middle-school': 'No.1 Middle School'
};
// xiaohong的屬性名middle-school不是一個有效的變數,就需要用''括起來,訪問這個屬性也無法使用.運算子,必須用['xxx']來訪問:
xiaohong['middle-school']; // 'No.1 Middle School'
xiaohong['name'];          // '小紅'
xiaohong.name;             // '小紅'

實際上 JavaScript 物件的所有屬性都是字串,不過屬性對應的值可以是任意資料型別,如果訪問一個不存在的屬性會回傳 undefined

由于 JavaScript 的物件是動態型別,可以自由地給一個物件添加或洗掉屬性:

var xiaoming = {
    name: '小明'
};
xiaoming.age;              // undefined
xiaoming.age = 18;         // 新增一個age屬性
xiaoming.age;              // 18
delete xiaoming.age;       // 洗掉age屬性
xiaoming.age;              // undefined
delete xiaoming['name'];   // 洗掉name屬性
xiaoming.name;             // undefined
delete xiaoming.school;    // 洗掉一個不存在的school屬性也不會報錯

如果我們要檢測 xiaoming 是否擁有某一屬性,可以用 in 運算子:

var xiaoming = {
    name: '小明',
    birth: 1990,
    school: 'No.1 Middle School',
    height: 1.70,
    weight: 65,
    score: null
};
'name' in xiaoming;    // true
'grade' in xiaoming;   // false

不過要小心,如果 in 判斷一個屬性存在,這個屬性不一定是 xiaoming 的,它可能是 xiaoming 繼承得到的:

'toString' in xiaoming; // true

因為 toString 定義在 object 物件中,而所有物件最終都會在原型鏈上指向 object,所以 xiaoming 也擁有 toString 屬性,

要判斷一個屬性是否是 xiaoming 自身擁有的,而不是繼承得到的,可以用 hasOwnProperty() 方法:

var xiaoming = {
    name: '小明'
};
xiaoming.hasOwnProperty('name');     // true
xiaoming.hasOwnProperty('toString'); // false

7. 字串

JavaScript 的字串就是用 ''"" 括起來的字符表示,如果 ' 本身也是一個字符,那就可以用 "" 括起來,比如 “I’m OK” 包含的字符是I,’,m,空格,O,K 這 6 個字符,如果字串內部既包含 ' 又包含 " 怎么辦?可以用轉義字符 \ 來標識:

'I\'m \"OK\"!';  // 表示的字串內容是:I'm "OK"!

轉義字符 \ 可以轉義很多字符,比如 \n 表示換行,\t 表示制表符,字符 \ 本身也要轉義,所以 \\ 表示的字符就是 \

// ASCII 字符可以以 `\x##` 形式的十六進制表示,例如:
'\x41';          // 完全等同于 'A'

// 還可以用\u####表示一個Unicode字符:
'\u4e2d\u6587';  // 完全等同于 '中文'

多行字串

由于多行字串用 \n 寫起來比較費事,所以最新的ES6標準新增了一種多行字串的表示方法,用反引號 ... 表示:

`這是一個
多行
字串`;

模板字串

要把多個字串連接起來,可以用 + 號連接:

var name = '小明';
var age = 20;
var message = '你好, ' + name + ', 你今年' + age + '歲了!';
alert(message);

// 如果有很多變數需要連接,用 + 號就比較麻煩,ES6 新增了一種模板字串,
// 表示方法和上面的多行字串一樣,但是它會自動替換字串中的變數:
var name = '小明';
var age = 20;
var message = `你好, ${name}, 你今年${age}歲了!`;
alert(message);

操作字串

var s = 'Hello, world!';
s.length; // 13
// 要獲取字串某個指定位置的字符,使用類似Array的下標操作,
// 索引號從0開始:
s[0];     // 'H'
s[6];     // ' '
s[7];     // 'w'
s[12];    // '!'
s[13];    // undefined 超出范圍的索引不會報錯,但一律回傳undefined

**Notice:**字串是不可變的,如果對字串的某個索引賦值,不會有任何錯誤,但是,也沒有任何效果:

var s = 'Test';
s[0] = 'X';
alert(s); // s仍然為'Test'

8. Map 和 Set

JavaScript 的默認物件表示方式 {} 可以視為其他語言中的 MapDictionary 的資料結構,即一組鍵值對,但是 JavaScript 的物件有個小問題,就是鍵必須是字串,但實際上 Number 或者其他資料型別作為鍵也是非常合理的,為了解決這個問題,最新的 ES6 規范引入了新的資料型別 Map

8.1. Map

Map 是一組鍵值對的結構,具有極快的查找速度,假設要根據同學的名字查找對應的成績,用 Map 實作,只需要一個“名字”-“成績”的對照表,直接根據名字查找成績,無論這個表有多大,查找速度都不會變慢:

var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
m.get('Michael'); // 95

初始化 Map 需要一個二維陣列,或者直接初始化一個空 MapMap 具有以下方法:

var m = new Map(); // 空Map
m.set('Adam', 67); // 添加新的key-value
m.set('Bob', 59);
m.has('Adam');     // 是否存在key 'Adam': true
m.get('Adam');     // 67
m.delete('Adam');  // 洗掉key 'Adam'
m.get('Adam');     // undefined

由于一個 key 只能對應一個 value,所以,多次對一個 key 放入 value,后面的值會把前面的值沖掉:

var map = new Map();
map.set('Jason', 88);
map.set('Jason', 78);
map.get('Jason');     // 78

8.2. Set

SetMap 類似,也是一組 key 的集合,但不存盤 value,由于 key 不能重復,所以,在 Set 中,沒有重復的 key,要創建一個 Set,需要提供一個 Array 作為輸入,或者直接創建一個空 Set

var s1 = new Set();             // 空Set
var s2 = new Set([1, 2, 3]);    // 含1, 2, 3

// 重復元素在Set中自動被過濾:
var s = new Set([1, 2, 3, 3, '3']); // s = Set {1, 2, 3, "3"}

// 通過 add(key) 方法可以添加元素到 Set 中,可以重復添加,但不會有效果:
s.add(4); // s = Set {1, 2, 3, 4}
s.add(4); // 仍然是 s = Set {1, 2, 3, 4}

// 通過 delete(key) 方法可以洗掉元素:
var s = new Set([1, 2, 3]); // s = Set {1, 2, 3}
s.delete(3);                // s = Set {1, 2}

9. iterable

遍歷 Array 可以采用下標回圈,遍歷 MapSet 就無法使用下標,為了統一集合型別,ES6 標準引入了新的 iterable 型別,ArrayMapSet 都屬于 iterable 型別,具有 iterable 型別的集合可以通過新的 for ... of 回圈來遍歷,

var a = ['A', 'B', 'C'];
var s = new Set(['A', 'B', 'C']);
var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
for (var x of a) { // 遍歷Array
    console.log(x);
}
for (var x of s) { // 遍歷Set
    console.log(x);
}
for (var x of m) { // 遍歷Map
    console.log(x[0] + '=' + x[1]);
}

9.1. for...in 回圈

for 回圈的一個變體是 for ... in 回圈,它可以把一個物件的所有屬性依次回圈出來:

var o = {
    name: 'Jack',
    age: 20,
    city: 'Beijing'
};
for (var key in o) {
    console.log(key); // 'name', 'age', 'city'
}

// 要過濾掉物件繼承的屬性,用 hasOwnProperty() 來實作:
for (var key in o) {
    if (o.hasOwnProperty(key)) {
        console.log(key); // 'name', 'age', 'city'
    }
}

由于 Array 也是物件,而它的每個元素的索引被視為物件的屬性,因此,for ... in 回圈可以直接回圈出 Array 的索引:

var a = ['A', 'B', 'C'];
for (var i in a) {
    console.log(i);     // '0', '1', '2'
    console.log(a[i]);  // 'A', 'B', 'C'
}
// 注意,for ... in 對 Arra y的回圈得到的是 String 而不是 Number,

for ... in 回圈由于歷史遺留問題,它遍歷的實際上是物件的屬性名稱,一個 Array 陣列實際上也是一個物件,它的每個元素的索引被視為一個屬性,當我們手動給 Array 物件添加了額外的屬性后,for ... in 回圈將帶來意想不到的意外效果:

var a = ['A', 'B', 'C'];
a.name = 'Hello';
for (var x in a) {
    console.log(x); // '0', '1', '2', 'name'
}

9.2. for ... of 回圈

for ... in 回圈將把 name 包括在內,但 Arraylength 屬性卻不包括在內,for ... of 回圈則完全修復了這些問題,它只回圈集合本身的元素:

var a = ['A', 'B', 'C'];
a.name = 'Hello';
for (var x of a) {
    console.log(x); // 'A', 'B', 'C'
}

然而,更好的方式是直接使用 iterable 內置的 forEach 方法,它接收一個函式,每次迭代就自動回呼該函式,以 Array 為例:

'use strict';
var a = ['A', 'B', 'C'];
a.forEach(function (element, index, array) {
    // element: 指向當前元素的值
    // index: 指向當前索引
    // array: 指向Array物件本身
    console.log(element + ', index = ' + index);
});

SetArray 類似,但 Set 沒有索引,因此回呼函式的前兩個引數都是元素本身:

var s = new Set(['A', 'B', 'C']);
s.forEach(function (element, sameElement, set) {
    console.log(element);
});

Map 的回呼函式引數依次為 valuekeymap 本身:

var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
m.forEach(function (value, key, map) {
    console.log(value);
});

// 如果對某些引數不感興趣,由于 JavaScript 的函式呼叫不要求引數必須一致,
// 因此可以忽略它們,例如,只需要獲得 Array 的 element:
var a = ['A', 'B', 'C'];
a.forEach(function (element) {
    console.log(element);
});

10. JavaScript 中的輸入與輸出

  1. document.write() 檔案中列印輸出
var name = 'Jason';
document.write(name + '<br />'); // <br /> 表示輸出換行
  1. alert() 瀏覽器彈窗輸出
alert('彈窗警告內容'); // 帶有一個“確定”按鈕
  1. prompt() 瀏覽器彈窗輸入
// 彈窗默認接受的輸入的內容,為字串 String 格式
var name = prompt('請輸入您的姓名', 'Jason'); // 第二個欄位是可選欄位
document.write(name);  // 輸出在彈窗中輸入的名字,如果點取消,則輸出 null
  1. confirm() 瀏覽器彈窗確認
var hello = confirm('你好嗎?');
if(hello) {
    alert('我很好!');
}else {
    alert('馬馬虎虎吧!');
}
  1. console.log() 瀏覽器控制臺輸出

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/289617.html

標籤:其他

上一篇:Web前端開發工程師知識體系_3_JavaScript基礎(一)

下一篇:jQuery 樣式、屬性、元素操作、影片效果、尺寸位置操作

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • vue移動端上拉加載

    可能做得過于簡單或者比較low,請各位大佬留情,一起探討技術 ......

    uj5u.com 2020-09-10 04:38:07 more
  • 優美網站首頁,頂部多層導航

    一個個人用的瀏覽器首頁,可以把一下常用的網站放在這里,平常打開會比較方便。 第一步,HTML代碼 <script src=https://www.cnblogs.com/szharf/p/"js/jquery-3.4.1.min.js"></script> <div id="navigate"> <ul> <li class="labels labels_1"> ......

    uj5u.com 2020-09-10 04:38:47 more
  • 頁面為要加<!DOCTYPE html>

    最近因為寫一個js函式,需要用到$(window).height(); 由于手寫demo的時候,過于自信,其實對前端方面的認識也不夠體系,用文本檔案直接敲出來的html代碼,第一行沒有加上<!DOCTYPE html> 導致了$(window).height();的結果直接是整個document的高 ......

    uj5u.com 2020-09-10 04:38:52 more
  • WordPress網站程式手動升級要做好資料備份

    WordPress博客網站程式在進行升級前,必須要做好網站資料的備份,這個問題良家佐言是遇見過的;在剛開始接觸WordPress博客程式的時候,因為升級問題和博客網站的修改的一些嘗試,良家佐言是吃盡了苦頭。因為購買的是西部數碼的空間和域名,每當佐言把自己的WordPress博客網站搞到一塌糊涂的時候 ......

    uj5u.com 2020-09-10 04:39:30 more
  • WordPress程式不能升級為5.4.2版本的原因

    WordPress是一款個人博客系統,受到英文博客愛好者和中文博客愛好者的追捧,并逐步演化成一款內容管理系統軟體;它是使用PHP語言和MySQL資料庫開發的,用戶可以在支持PHP和MySQL資料庫的服務器上使用自己的博客。每一次WordPress程式的更新,就會牽動無數WordPress愛好者的心, ......

    uj5u.com 2020-09-10 04:39:49 more
  • 使用CSS3的偽元素進行首字母下沉和首行改變樣式

    網頁中常見的一種效果,首字改變樣式或者首行改變樣式,效果如下圖。 代碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, ......

    uj5u.com 2020-09-10 04:40:09 more
  • 關于a標簽的講解

    什么是a標簽? <a> 標簽定義超鏈接,用于從一個頁面鏈接到另一個頁面。 <a> 元素最重要的屬性是 href 屬性,它指定鏈接的目標。 a標簽的語法格式:<a href=https://www.cnblogs.com/summerxbc/p/"指定要跳轉的目標界面的鏈接">需要展示給用戶看見的內容</a> a標簽 在所有瀏覽器中,鏈接的默認外觀如下: 未被訪問的鏈接帶 ......

    uj5u.com 2020-09-10 04:40:11 more
  • 前端輪播圖

    在需要輪播的頁面是引入swiper.min.js和swiper.min.css swiper.min.js地址: 鏈接:https://pan.baidu.com/s/15Uh516YHa4CV3X-RyjEIWw 提取碼:4aks swiper.min.css地址 鏈接:https://pan.b ......

    uj5u.com 2020-09-10 04:40:13 more
  • 如何設定html中的背景圖片(全屏顯示,且不拉伸)

    1 <style>2 body{background-image:url(https://uploadbeta.com/api/pictures/random/?key=BingEverydayWallpaperPicture); 3 background-size:cover;background ......

    uj5u.com 2020-09-10 04:40:16 more
  • Java學習——HTML詳解(上)

    HTML詳解 初識HTML Hyper Text Markup Language(超文本標記語言) 1 <!--DOCTYPE:告訴瀏覽器我們要使用什么規范--> 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <!--meta 描述性的標簽,描述一些 ......

    uj5u.com 2020-09-10 04:40:33 more
最新发布
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 07:59:23 more
  • 生產事故-走近科學之消失的JWT

    入職多年,面對生產環境,盡管都是小心翼翼,慎之又慎,還是難免捅出簍子。輕則滿頭大汗,面紅耳赤。重則系統停擺,損失資金。每一個生產事故的背后,都是寶貴的經驗和教訓,都是專案成員的血淚史。為了更好地防范和遏制今后的各類事故,特開此專題,長期更新和記錄大大小小的各類事故。有些是親身經歷,有些是經人耳傳口授 ......

    uj5u.com 2023-04-18 07:55:04 more
  • 記錄--Canvas實作打飛字游戲

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 打開游戲界面,看到一個畫面簡潔、卻又富有挑戰性的游戲。螢屏上,有一個白色的矩形框,里面不斷下落著各種單詞,而我需要迅速地輸入這些單詞。如果我輸入的單詞與螢屏上的單詞匹配,那么我就可以獲得得分;如果我輸入的單詞錯誤或者時間過長,那么我就會輸 ......

    uj5u.com 2023-04-04 08:35:30 more
  • 了解 HTTP 看這一篇就夠

    在學習網路之前,了解它的歷史能夠幫助我們明白為何它會發展為如今這個樣子,引發探究網路的興趣。下面的這張圖片就展示了“互聯網”誕生至今的發展歷程。 ......

    uj5u.com 2023-03-16 11:00:15 more
  • 藍牙-低功耗中心設備

    //11.開啟藍牙配接器 openBluetoothAdapter //21.開始搜索藍牙設備 startBluetoothDevicesDiscovery //31.開啟監聽搜索藍牙設備 onBluetoothDeviceFound //30.停止監聽搜索藍牙設備 offBluetoothDevi ......

    uj5u.com 2023-03-15 09:06:45 more
  • canvas畫板(滑鼠和觸摸)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>canves</title> <style> #canvas { cursor:url(../images/pen.png),crosshair; } #canvasdiv{ bo ......

    uj5u.com 2023-02-15 08:56:31 more
  • 手機端H5 實作自定義拍照界面

    手機端 H5 實作自定義拍照界面也可以使用 MediaDevices API 和 <video> 標簽來實作,和在桌面端做法基本一致。 首先,使用 MediaDevices.getUserMedia() 方法獲取攝像頭媒體流,并將其傳遞給 <video> 標簽進行渲染。 接著,使用 HTML 的 < ......

    uj5u.com 2023-01-12 07:58:22 more
  • 記錄--短視頻滑動播放在 H5 下的實作

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 短視頻已經無數不在了,但是主體還是使用 app 來承載的。本文講述 H5 如何實作 app 的視頻滑動體驗。 無聲勝有聲,一圖頂百辯,且看下圖: 網址鏈接(需在微信或者手Q中瀏覽) 從上圖可以看到,我們主要實作的功能也是本文要講解的有: ......

    uj5u.com 2023-01-04 07:29:05 more
  • 一文讀懂 HTTP/1 HTTP/2 HTTP/3

    從 1989 年萬維網(www)誕生,HTTP(HyperText Transfer Protocol)經歷了眾多版本迭代,WebSocket 也在期間萌芽。1991 年 HTTP0.9 被發明。1996 年出現了 HTTP1.0。2015 年 HTTP2 正式發布。2020 年 HTTP3 或能正... ......

    uj5u.com 2022-12-24 06:56:02 more
  • 【HTML基礎篇002】HTML之form表單超詳解

    ??一、form表單是什么

    ??二、form表單的屬性

    ??三、input中的各種Type屬性值

    ??四、標簽 ......

    uj5u.com 2022-12-18 07:17:06 more