065_const关键字
1. const定義的變量與let類似, 但不能重新賦值:
const PI = 3.141592653589793; PI = 3.14; // 會出錯 PI = PI + 10; // 也會出錯2. 在聲明時賦值
2.1. JavaScript const變量必須在聲明時賦值:
// 不正確 const PI; PI = 3.14159265359; // 正確 const PI = 3.14159265359;3. 常量對象可以更改
3.1. 您可以更改常量對象的屬性:
const mobile = {name: 'huawei', color: 'white'}; mobile.color = 'black'; // 更改屬性 mobile.id = 1001; // 添加屬性3.2. 但是您無法重新為常量對象賦值:
const mobile = {name: 'huawei', color: 'white'}; mobile = {}; // 報錯, 無法重新賦值4. 常量數(shù)組可以更改
4.1. 您可以更改常量數(shù)組的元素:
const books = ['java編程思想', 'java編程語言']; books[1] = 'java編程語言(第三版)'; // 更改元素 books.push('java核心技術(shù)'); // 添加元素4.2. 但是您無法重新為常量數(shù)組賦值:
const books = ['java編程思想', 'java編程語言']; // books = []; // 報錯, 無法重新賦值5. 塊作用域
5.1. 可以使用const關(guān)鍵字聲明擁有塊作用域的變量(和let關(guān)鍵字一樣)。
5.2. const?在塊{}內(nèi)聲明的變量無法從塊外訪問。
5.3. 實(shí)例
{var a = 5; // 給a初始化為5 } document.write('a = ' + a + "<br />"); // 輸出a = 5{let b = 10;// let在塊內(nèi)聲明的變量, 只能在塊內(nèi)訪問。document.write('b = ' + b + "<br />"); // 輸出b = 10 } // 塊外不能訪問b, 訪問b, 報錯{const c = 15;// const在塊內(nèi)聲明的變量, 只能在塊內(nèi)訪問。document.write('c = ' + c + "<br />"); // 輸出c = 15 } // 塊外不能訪問c, 訪問c, 報錯6. 循環(huán)作用域
6.1. 循環(huán)中使用const聲明的變量, 在循環(huán)外不能訪問(和let關(guān)鍵字一樣)。
for(var i = 1; i <= 3; i++){document.write('i = ' + i + "<br />"); } document.write('i = ' + i + "<br />"); // 輸出i = 4 document.write('i = ' + window.i + "<br />"); // 輸出i = 4var obj = {id: 1001, name: 'zs'}; for(var item in obj){document.write('item = ' + item + "<br />"); } document.write('item = ' + item + "<br />"); // 輸出item = name document.write('item = ' + window.item + "<br />"); // 輸出item = namefor(let j = 1; j <= 3; j++){document.write('j = ' + j + "<br />"); } // 不能訪問jfor(let key in obj){document.write('key = ' + key + "<br />"); } // 不能訪問key // 這里有k++, const定義的變量必須初始化, 而且不能改變, 因此并不適用于定義for循環(huán)的變量。但是for循環(huán)體外不能訪問const定義的變量。 // for(const k = 1; k <= 3; k++){ // document.write('k = ' + k + "<br />"); // } for(const k = 1; k <= 3;){document.write('k = ' + k + "<br />");break; }for(const key in obj){document.write('key = ' + key + "<br />"); } // 不能訪問key7. 函數(shù)作用域
7.1. 在函數(shù)內(nèi)聲明變量時, 使用var、let和const很相似。它們都有函數(shù)作用域:
function myFunction1() {var bookName = "Effective Java"; // 函數(shù)作用域document.write('bookName = ' + bookName + "<br />"); // bookName = Effective Java } myFunction1(); // document.write('bookName = ' + bookName + "<br />"); // 訪問bookName會報錯 function myFunction2() {let mobileName = "huawei"; // 函數(shù)作用域document.write('mobileName = ' + mobileName + "<br />"); // mobileName = huawei } myFunction2(); // document.write('mobileName = ' + mobileName + "<br />"); // 訪問mobileName會報錯 function myFunction3() {const computerName = "聯(lián)想"; // 函數(shù)作用域document.write('computerName = ' + computerName + "<br />"); // computerName = 聯(lián)想 } myFunction3(); // document.write('computerName = ' + computerName + "<br />"); // 訪問computerName會報錯8. 全局作用域
8.1. 如果在塊外聲明聲明, 那么var、let和const也很相似。它們都擁有全局作用域:
var d = 20; // 全局作用域 let e = 25; // 全局作用域 const f = 30; // 全局作用域9. html中的全局變量
9.1. 使用JavaScript的情況下, 全局作用域是JavaScript環(huán)境。
9.2. 在html中, 全局作用域是window對象。
9.3. 通過var關(guān)鍵詞定義的全局變量屬于window對象。
9.4. 通過const關(guān)鍵詞定義的全局變量不屬于window對象, 屬于JavaScript環(huán)境(和let關(guān)鍵字一樣):
var d = 20; document.write('d = ' + d + "<br />"); // d = 20 document.write('d = ' + window.d + "<br />"); // d = 20let e = 25; document.write('e = ' + e + "<br />"); // e = 25 document.write('e = ' + window.e + "<br />"); // e = undefinedconst f = 30; document.write('f = ' + f + "<br />"); // f = 30 document.write('f = ' + window.f + "<br />"); // f = undefined10. 重新聲明
10.1. 在相同的作用域, 通過const重新聲明一個var或let變量是不允許的:
var I = 'I_01'; // 允許 let I = 'I_02'; // 不允許 function myFn01(){var I = 'I_01'; // 允許let I = 'I_02'; // 不允許 }var II = 'II_01'; // 允許 const II = 'II_02'; // 不允許 function myFn02(){var II = 'II_01'; // 允許const II = 'II_02'; // 不允許 }let III = 'III_01'; // 允許 const III = 'III_02'; // 不允許 function myFn02(){let III = 'III_01'; // 允許const III = 'III_02'; // 不允許 } {let III = 'III_01'; // 允許const III = 'III_02'; // 不允許 }10.2. 在相同的作用域, 通過var、let、const重新聲明一個const變量是不允許的:
const IV = 'IV_01'; // 允許 var IV = 'IV_01'; // 不允許 function myFn03(){const IV = 'IV_01'; // 允許var IV = 'IV_01'; // 不允許 }const V = 'V_01'; // 允許 let V = 'V_02'; // 不允許 {const V = 'V_01'; // 允許let V = 'V_02'; // 不允許 } function myFn04(){const V = 'V_01'; // 允許let V = 'V_02'; // 不允許 }const VI = 'VI_01'; // 允許 const VI = 'VI_02'; // 不允許 {const VI = 'VI_01'; // 允許const VI = 'VI_02'; // 不允許 } function myFn05(){const VI = 'VI_01'; // 允許const VI = 'VI_02'; // 不允許 }11. 例子
11.1. 代碼
<!DOCTYPE html> <html><head><meta charset="utf-8" /><title>const關(guān)鍵字</title></head><body><script type="text/javascript">// 不能重新賦值const PI = 3.141592653589793;// PI = 3.14; // 會出錯// PI = PI + 10; // 也會出錯const mobile = {name: 'huawei', color: 'white'};mobile.color = 'black'; // 更改屬性mobile.id = 1001; // 添加屬性// mobile = {}; // 報錯, 無法重新賦值const books = ['java編程思想', 'java編程語言'];books[1] = 'java編程語言(第三版)'; // 更改元素books.push('java核心技術(shù)'); // 添加元素// books = []; // 報錯, 無法重新賦值{var a = 5; // 給a初始化為5}document.write('a = ' + a + "<br />"); // 輸出a = 5{let b = 10;// let在塊內(nèi)聲明的變量, 只能在塊內(nèi)訪問。document.write('b = ' + b + "<br />"); // 輸出b = 10}// 塊外不能訪問b, 訪問b, 報錯{const c = 15;// const在塊內(nèi)聲明的變量, 只能在塊內(nèi)訪問。document.write('c = ' + c + "<br />"); // 輸出c = 15}// 塊外不能訪問c, 訪問c, 報錯for(var i = 1; i <= 3; i++){document.write('i = ' + i + "<br />");}document.write('i = ' + i + "<br />"); // 輸出i = 4document.write('i = ' + window.i + "<br />"); // 輸出i = 4var obj = {id: 1001, name: 'zs'};for(var item in obj){document.write('item = ' + item + "<br />");}document.write('item = ' + item + "<br />"); // 輸出item = namedocument.write('item = ' + window.item + "<br />"); // 輸出item = namefor(let j = 1; j <= 3; j++){document.write('j = ' + j + "<br />");}// 不能訪問jfor(let key in obj){document.write('key = ' + key + "<br />");}// 不能訪問key // 這里有k++, const定義的變量必須初始化, 而且不能改變, 因此并不適用于定義for循環(huán)的變量。但是for循環(huán)體外不能訪問const定義的變量。// for(const k = 1; k <= 3; k++){// document.write('k = ' + k + "<br />");// }for(const k = 1; k <= 3;){document.write('k = ' + k + "<br />");break;}for(const key in obj){document.write('key = ' + key + "<br />");}// 不能訪問key function myFunction1() {var bookName = "Effective Java"; // 函數(shù)作用域document.write('bookName = ' + bookName + "<br />"); // bookName = Effective Java}myFunction1();// document.write('bookName = ' + bookName + "<br />"); // 訪問bookName會報錯function myFunction2() {let mobileName = "huawei"; // 函數(shù)作用域document.write('mobileName = ' + mobileName + "<br />"); // mobileName = huawei}myFunction2();// document.write('mobileName = ' + mobileName + "<br />"); // 訪問mobileName會報錯 function myFunction3() {const computerName = "聯(lián)想"; // 函數(shù)作用域document.write('computerName = ' + computerName + "<br />"); // computerName = 聯(lián)想}myFunction3();// document.write('computerName = ' + computerName + "<br />"); // 訪問computerName會報錯 var d = 20;document.write('d = ' + d + "<br />"); // d = 20document.write('d = ' + window.d + "<br />"); // d = 20let e = 25;document.write('e = ' + e + "<br />"); // e = 25document.write('e = ' + window.e + "<br />"); // e = undefinedconst f = 30;document.write('f = ' + f + "<br />"); // f = 30document.write('f = ' + window.f + "<br />"); // f = undefined</script></body> </html>11.2. 效果圖
總結(jié)
以上是生活随笔為你收集整理的065_const关键字的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 064_let关键字
- 下一篇: 066_严格模式