ES6变量与字符串新特性详解:Let、Const及模板字符串

作者:青柠

时间:2026-10-22

浏览:448

本文详解ES6核心新特性,重点解析Let与Const在变量声明中的作用域差异及常量限制。介绍箭头函数的简洁语法与this指向机制,以及String原型新增的startsWith、includes等方法。同时展示模板字符串在字符串插值与多行文本处理中的实际应用,帮助开发者提升代码可读性与维护效率。

文章目录

本文通过具体示例介绍ES6中变量声明与字符串处理的新特性,供读者参考学习。

变量声明机制:Let与Const

一、变量声明机制

1. Let关键字

传统开发中习惯使用var声明变量,而ES6引入了let。两者的核心区别在于作用域:var声明的变量作用域覆盖其所在的整个函数,而let声明的变量仅在其所在的代码块内有效(ES5中不存在块级作用域概念)。


if(true){
  let a=1;
}
console.log(a);//undifined

这种机制有助于保持代码整洁,避免变量污染。例如在数组遍历场景中:


for(let i=0;i<lists.length;i++){
  //do somthing with lists[i]
}
console.log(i)l//undifined

以往在同一作用域内进行嵌套遍历时,常需使用变量j来避免冲突;现在使用let可以安全地重新声明i变量,因为该变量仅在当前块中有效。

2. Const关键字

const同样用于声明块级作用域的变量,但它创建的是只读引用。使用const时必须立即赋值,若尝试修改该变量或未立即赋值,程序将报错:


const MY_CONSTENT=1;
MY_CONSTENT=2;//error
const MY_CONSTENT;//error

需要注意的是,若const声明的是对象或数组,其属性或成员内容仍可被修改。


const MY_OBJECT={some:1};
MY_OBJECT.some='body';

箭头函数语法与上下文继承

3. 箭头函数(Arrow Functions)

箭头函数使JavaScript代码更加精简。对比ES5的函数写法:


//箭头函数
let books=[{"title":"X","price":20},{"title":"Y","price":40}];
let titles=books.map(item=>item.title);
//ES5函数
var titles=books.map(function(item){
  return item.title;
});

观察箭头函数语法,可见其省略了function关键字,仅保留零个或多个参数、“胖箭头”(=>)及函数体,且若函数体仅含单一表达式,return语句会被隐式添加。当参数为零个或多个时,必须使用括号包裹:


//no arguments
books.map(()=>1);//[1,1]
//Mutiple arguments
[1,2].map((n,index)=>n*index);//[0,2]

若需执行更复杂的逻辑或多行代码,可将函数体置于大括号{}中:


let result=[1,2,3,4,5].map(n=>{
  n=n%3;
  retutn n;
})

箭头函数不仅是为了减少字符输入,其行为也与普通函数不同。它继承当前上下文的this和arguments,这意味着无需再使用var that=this来保存上下文,也无需手动绑定函数到特定上下文:


//ES6
let books={
  title'X',
  sellers:['A','B'],
  printSellers(){
    this.sellers.forEach(seller=>console.log(seller+'seller'+this.title))
  }
};
//ES5
var books={
  title='X',
  sellers:['A','B'],
  printSellers:function(){
   var that=this;
   this.sellers.forEach(function(seller){
     console.log(seller+'seller'+that.title)
   })
  }
};

字符串处理增强与模板字符串

二、字符串处理增强

1. 字符串新方法

String原型中新增了几个方法,旨在简化原本需通过indexOf()解决的复杂问题,并提供等效功能:


'my string'.startsWith('my');//true
'my string'.endsWith('my');//false
'my string'.includes('str');//true

此外还添加了用于生成重复字符串的方法:


'my'.repeat(3);//'my my my'

2. 模板字符串(Template Strings)

模板字符串提供了一种简洁的字符串插值方式,基于美元符号和花括号${...}语法,并将内容置于引号中:


//ES6
let name='json',
  apples=5,
  pears=7,
  bananas=function(){return 3};
console.log('this is${name}');
console.log('he carries ${apples} apples,${pears} pears,and ${bananas()} bananas');
//ES5
console.log('he carries'+ ${apples}+' apples,'+${pears}+' pears,and '+${bananas()}+' bananas');

上述形式相较于ES5仅简化了字符串拼接,实际上模板字符串还支持多行字符串(包含空格在内的所有字符均被视为字符串的一部分):


let x='1...
  2...
  3 lines long!';
//ES5
var x='1...'+
  '2...'+
  '3 lines long!';
var x="1...2...3 lines long!';

希望本文所述内容对大家理解ECMAScript程序设计有所帮助。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章