1、变量和常量
使用let和const声明变量和常量
let声明变量可以被修改
const声明常量不可修改,建议大写命名,使用下划线_做分割(例如:const BASE_URL = 'http://xxx.xx.com')
PS:建议声明使用常量const,当发现需要修改时再改为变量let。
//1、变量和常量
{
let count = 0;
const BASE_URL = 'https://xxx.xxx.com';
}
块级作用域
let和const声明的变量,会生成块级作用域。
可以使用大括号{}对代码块进行分割,只有在当前作用域才可以访问变量。
避免一个变量名在多个地方使用,导致变量名冲突的情况。
如下所示:
{
let count = 0;
count++;
}
console.log(count);
上述代码以及运行结果可以看出,在大括号以外是无法访问块级作用域中声明的变量。
2、模板字符串
模板字符串使用反引号`对字符串进行拼接,解决了大量字符串拼接使用加号+比较麻烦的情况
在模板字符串中可以使用标记${}引入变量,比如引入name变量${name}
在模板字符串中换行生效,效果如下:
//2、模板字符串
const str1 = 'hello world!';
const str2 = `hello everyone! ${str1}
这是换行的内容`;
console.log(str2)
3、解构赋值
数组解构赋值
const [a, b, c] = [1, 2, 3];
console.log(a, b, c); // 1 2 3
上述代码是最基本的解构赋值写法
对象解构赋值
const { username, age: userAge, ...otherInfo} = {
username: '李华',
age: 18,
gender: 'Male',
category: 'user'
}
console.log(username, userAge, otherInfo)
//李华 18 {gender: 'Male', category: 'user'}
上述代码我们对username进行解构赋值,获取到了名称,通过对解构变量重命名,把age取值重命名为userAge,通过使用...获取剩余对象属性(注意:要获取剩余属性值,必须把...放在解构赋值最后获取)
4、数组和对象的扩展
4.1 扩展运算符
const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];
const arr3 = [100, ...arr1, ...arr2, 10, 20];
console.log(arr3); //[100, 1, 2, 3, 4, 5, 6, 10, 20]
上述代码,可以看出扩展运算符的作用是展开数组,展开后可以拼接在其他数组中。
const obj1 = {
a: 1
}
const obj2 = {
b: 2
}
const obj3 = {
name: '李华',
...obj1,
...obj2
}
console.log(obj3); //{name: '李华', a: 1, b: 2}
上述代码可以看出,对象拼接和数组拼接也是类似的。
当我们需要对对象的值进行重复使用,可以使用扩展运算符,把需要扩展的属性放在属性后。
注意:对象拼接不考虑顺序问题。
4.2 数组方法 Array.from()
该方法适用于,将伪数组转为真实数组。
伪数组
(1)伪数组是一个对象(Object)
(2)伪数组拥有length属性,可以获取长度。当我们改变伪数组长度时,length不会改变。
(3)伪数组可以通过下标获取对应的值
(4)伪数组无法使用数组的内置方法(如map、filter、push、forEach等),可以使用Object的方法,使用for in遍历
function fn(){
Array.from(arguments).forEach(function (item){
console.log(item);
})
}
fn(1,2,3,4,5,6) //1 2 3 4 5 6
4.3 对象方法 Object.assign()
Object.assign()方法用于对象浅拷贝。基于旧对象生成新对象。
对象浅拷贝
const objA = {
name: '李华',
age: 18
}
const objB = Object.assign({}, objA);
objB.name = 'a';
console.log(objA, o