1. let 和 const
1.1 let
用来声明变量,只在 let 命令所在的代码块内有效,即块级作用域。不存在变量提升,它所声明的变量一定要在声明后使用,不允许重复声明,否则报错。 举个例子:
function varTest() {
var a = 1;
if (true) {
var a = 2;
console.log(a); // 2
}
console.log(a); // 2
}
function letTest() {
console.log(b); // ReferenceError: b is not defined
let b = 1;
if (true) {
let b = 2;
console.log(b); // 2
}
console.log(b); // 1
}
1.2 const
const 声明一个只读的常量。一旦声明,常量的值就不能改变。这意味着,const 一旦声明变量,就必须立即初始化,不能留到后面赋值。
const a;
//SyntaxError: Missing initializer in const declaration
const 的作用域与 let 命令相同:只在声明所在的块级作用域内有效。也不存在变量提升,不允许重复声明。
const 本质并不是保证变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。如果 const 后面的变量是普通变量,改变值报错。如果后面存储的是数组或者对象,那么改变它的指向也会报错,但是如果改变数组或者对象的值是不会发生错误的。
<script>
const a = "123";
a = "234";
console.log(a);// TypeError: Assignment to constant variable.
const arr = [1,2,3];
arr.push(4);
console.log(arr);// [1,2,3,4]
arr = [];
console.log(arr);// 改变数组的指向会出错 Uncaught TypeError: Assignment to constant variable
</script>
2.模板字符串
模板字符串(templatestring)是增强版的字符串,用反引号(`),标识,嵌入的变量名写在${}之中。
第一个用途,基本的字符串格式化。
//ES5
var name = 'world'
console.log('hello' + name)
//ES6
var name = 'world'
console.log(`hello ${name}`)
第二个用途,做多行字符串或者字符串一行行拼接。
// ES5
var a = "Hi \
Girl!"
// ES6
const say = `<div>
<p>hello, world</p >
</div>`
ES6 还提供了一些字符串方法,如下:
// 1.includes:判断是否包含参数字符串,返回布尔值
const str = 'welcome'
console.log(str.includes('e')) // true
// 2.repeat: 获取字符串重复n次
const str = 'he'
console.log(str.repeat(3)) // 'hehehe'
//如果带入小数, Math.floor(num) 来处理
// s.repeat(3.1) 或者 s.repeat(3.9) 都当做 s.repeat(3) 来处理
// 3. startsWith 和 endsWith 判断是否以给定文本开始或者结束
const str = 'hello world!'
console.log(str.