技术频道导航
HTML/CSS
.NET技术
IIS技术
PHP技术
Js/JQuery
Photoshop
Fireworks
服务器技术
操作系统
网站运营

赞助商

分类目录

赞助商

最新文章

搜索

实例详解区别JS三种声明方式:var,let,const

作者:admin    时间:2022-5-9 17:42:57    浏览:

JavaScript有三种声明方式:varletconst,在本文中,将介绍如何使用这三种声明方式,以及它们之间的区别。

 区别JavaScript三种声明方式:var,let,const

声明

var

声明一个变量,可选初始化一个值。

let

声明一个块作用域的局部变量,可选初始化一个值。

const

声明一个块作用域的只读常量。

声明变量

你可以用以下三种方式声明变量:

  • 使用关键词 var 。例如 var x = 42。这个语法可以用来声明局部变量和全局变量。
  • 直接赋值。例如x = 42。在函数外使用这种形式赋值,会产生一个全局变量。在严格模式下会产生错误。因此你不应该使用这种方式来声明变量。
  • 使用关键词 let 。例如 let y = 13。这个语法可以用来声明块作用域的局部变量。参考下面变量的作用域

varlet 语句声明的变量,如果没有赋初始值,则其值为 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三种声明方式:varletconst 它们之间的使用区别,在实际应用中不要混淆,以免出错。

相关文章

标签: var  let  const  js声明  
x
x
  • 站长推荐