新增命令
1. 新增了let命令,用来声明变量。它的用法类似于var
let a = 10;
var b = 10;
console.log(a,b);//10 10
上面代码中,分别用let、var声明了变量,然后调用这两个变量,都能得到正确的值,但是两者之间还有区别的,如下例所示:
{
let c = 10;
var d = 10;
}
console.log(c); //c is not defined
console.log(d); //10
上面代码中分别用let、var声明了变量,在代码块外面调用,结果let声明的变量报错,var声明的变量返回了正确的值。这表明,let声明的变量只在它所在的代码块有效。
注意:变量名命名规则
● 见名知义
● 不能使用关键字与保留字
● 遵循驼峰标识
● 变量名不能重(会报错)
循环中使用let
循环操作非常适合let命令,
for(let i = 0; i < 10;i++){
console.log(i);
}
console.log(i); // i is not defined
上面代码中,计数器i只在for循环体内有效,在循环体外引用就会报错。
不存在变量提升
var命令会发生”变量提升“现象,即变量可以在声明之前使用,值为undefined。这种现象多多少少是有些奇怪的,按照一般的逻辑,变量应该在声明语句之后才可以使用。为了纠正这种现象,let命令改变了语法行为,它所声明的变量一定要在声明后使用,否则报错。
//var
console.log(a); //undefined
var a = 10;
//let
console.log(b); // b is not defined
let b = 10;
上面代码中,变量a用var命令声明,会发生变量提升,即脚本开始运行时,变量a已经存在了,但是没有值,所以会输出undefined。变量b用let命令声明,不会发生变量提升。这表示在声明它之前,变量b是不存在的,这时如果用到它,就会抛出一个错误
块级作用域
let实际上为 JavaScript 新增了块级作用域。
function f1() {
let n = 5;
if (true) {
let n = 10;
}
console.log(n); // 5
}
f1();
上面的两个代码块中都声明了变量变量n,最后调用函数输出的结果为5,这表示外层代码块不受内层代码块的影响,如果使用var声明变量,则结果为10。
块级作用域允许任意嵌套,外层作用域无法读取内层作用域的变量,而且内外层作用域可以声明同名变量。
function f2(){
let a = 'admin'
console.log(a,1111);
{
let a = 'ujiuye'
console.log(a,222);
}
}
// console.log(a)//a is not defined
2.const
const声明的常量,后期不能修改常量的值,并且在声明的同时要立刻初始化,不能后面赋值,其声明常量的作用域与let相同,在代码块内有效,在声明前调用变量报错,即const声明的常量不存在变量提升。
//1.常量 const声明的常量,不能修改该常量的值
const PI = 3.1414;
console.log(PI);
PI = 3; //Assignment to constant variable
console.log(PI);
//2.用const声明的常量,需要立即初始化,不能留到后面赋值
const a; //Missing initializer in const declaration
//3.作用域与let相同,在代码块内有效
if(true){
const block = 10;
}
console.log(block); //block is not defined
//4.const声明的常量也不存在常量提升
console.log(up); // up is not defined
const up = 10;
模板字符串
传统JavaScript输出模板通常是:
var n = 10;
$("p").append("there are <b>"+n+"</b>"+
"ujiuye IT"+
"<em>"+n+"</em>");
这种写法相当繁琐不方便,如果字符串特别长的时候也许还会弄错+和“”的位置,es6引入了模板字符串来解决这个问题。模板字符串是增强版字符串,用反引号`表示,里面的变量用${}包起来就可以实现
var n = 10;
$("div").append(`there are <b>${n}</b>`);
它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。在模板中嵌入变量需要将变量名写在${}中。
var str = `string text line 1
string text line 2`;
console.log(str);
console.log(`${n}`);
关于${}中的值:
1.变量
2.任意javascript表达式
3.获取对象的属性
4.调用函数