实例详解区别JS三种声明方式:var,let,const
作者:admin 时间:2022-5-9 17:42:57 浏览:JavaScript有三种声明方式:var
,let
,const
,在本文中,将介绍如何使用这三种声明方式,以及它们之间的区别。
声明
var
声明一个变量,可选初始化一个值。
let
声明一个块作用域的局部变量,可选初始化一个值。
const
声明一个块作用域的只读常量。
声明变量
你可以用以下三种方式声明变量:
- 使用关键词
var
。例如var x = 42
。这个语法可以用来声明局部变量和全局变量。 - 直接赋值。例如
x = 42
。在函数外使用这种形式赋值,会产生一个全局变量。在严格模式下会产生错误。因此你不应该使用这种方式来声明变量。 - 使用关键词
let
。例如let y = 13
。这个语法可以用来声明块作用域的局部变量。参考下面变量的作用域。
用 var
或 let
语句声明的变量,如果没有赋初始值,则其值为 undefined
。
注意:像x = 42
这种声明方式将会创建一个未声明全局变量,这样做还会产生JavaScript警告,因为未声明的全局变量常常导致预期之外的行为,所以不建议使用。
如果访问一个未声明的变量会导致抛出一个引用错误(ReferenceError)异常:
var a;
console.log("The value of a is " + a); // a 的值是 undefined
console.log("The value of b is " + b);// b 的值是 undefined
var b;
console.log("The value of c is " + c); // 未捕获的引用错误: c 未被定义
let x;
console.log("The value of x is " + x); // x 的值是 undefined
console.log("The value of y is " + y);// 未捕获的引用错误: y 未被定义
let y;
你可以使用 undefined
来判断一个变量是否已赋值。在以下的代码中,变量input
未被赋值,因此 if
条件语句的求值结果是 true
。
var input;
if(input === undefined){
doThis();
} else {
doThat();
}
undefined
值在布尔类型环境中会被当作 false
。例如,下面的代码将会执行函数 myFunction
,因为数组 myArray
中的元素未被赋值:
var myArray = [];
if (!myArray[0]) myFunction();
数值类型环境中 undefined
值会被转换为 NaN
。
var a;
a + 2; // 计算为 NaN
当你对一个 null
变量求值时,空值 null
在数值类型环境中会被当作0来对待,而布尔类型环境中会被当作 false
。例如:
var n = null;
console.log(n * 32); // 在控制台中会显示 0
变量的作用域
在函数之外声明的变量,叫做全局变量,因为它可被当前文档中的任何其他代码所访问。在函数内部声明的变量,叫做局部变量,因为它只能在当前函数的内部访问。
ECMAScript 6 之前的 JavaScript 没有语句块作用域;相反,语句块中声明的变量将成为语句块所在函数(或全局作用域)的局部变量。例如,如下的代码将在控制台输出 5,因为 x
的作用域是声明了 x
的那个函数(或全局范围),而不是 if
语句块。
if (true) {
var x = 5;
}
console.log(x); // 5
如果使用 ECMAScript 6 中的 let
声明,上述行为将发生变化。
if (true) {
let y = 5;
}
console.log(y); // ReferenceError: y 没有被声明
常量(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'];
总结
本文详细介绍了JavaScrip的三种声明方式,它们在使用上是有不同的。通过本文,你应该了解了JavaScript三种声明方式:var
,let
,const
它们之间的使用区别,在实际应用中不要混淆,以免出错。
相关文章
- 站长推荐