1. let和const
let和var的区别
- let不存在变量提示机制(变量不允许在声明之前使用)
- let不允许重读声明
- 在全局作用域中基于let声明的变量不是window的一个属性,和window没关系
- typeof 未被声明的变量 =>不是undefined而是报错(暂时性死区)
- let会形成块级作用域
let
let和var的域的探讨不同
var只有全局和局部(函数)
let只要遇到一个代码块就是一个域,比较能体现区别的就是for循环。let没有变量提升
for(var i=0,i<5,i++){
console.log(i);
}
console.log(i)
//得到的输出是1 2 3 4 5
//i没有被销毁
for(let i=0,i<5,i++){
console.log(i);
}
console.log(i);
//1 2 3 4 报错
//解决变量提升问题
console.log(a);
var a;
//输出是undefined 不会报错 变量提升但不严谨
//如果是let
conosole.log(a);
let a;
//报错,a is not defined
const
一旦想声明const一定给初始值
const不可被改变,可以是简单值也可以是对象
const指向对象,内容可以被改变,只不过指针不能被改变,给其重新赋值不行
和let一样,是块级作用域
2. 解构赋值
数组的解构赋值
var a=1,b=2,c=3;
var [a,[b,c]]=[1,[2,3]];
var [a,,c]=[1,2,3]//可以挑着赋值a,c
var[a,…c]=[1,2,3]//1赋值给a,其他赋值给c
var[a,b,c='default',d='default']=[1,2,3]//设默认值
//a=1,b=2,c=3,d='default'
对象的解构赋值
var obj={
a:1,
b:2
}
let {a,b}=obj;//a=1,b=2
let {c,b}=obj;//c=undefined,b=2
let {a:A,b}=obj;//赋值后重命名
//如果已经定义了一个a
let a;
let{a,b}=obj;
//会报错,a已经定义过了不会再定义
let a;
({a,b}=obj);//不能不加小括号,因为{}会被当成代码块
let {a=1,b=2}={a:10}//默认值指定方式
//在真实项目中,服务器传来一些数据
let res={
status:200,
id=12,
data:[{name:'Bob'},{name:'Shuan Dan'}]
}
let {status,id,data}=res;
if(status==200)
{
}
//也可以用来解构方法
let{floor,pow}=Math;
let a=1.1;
console.log("floor(a):",floor(a));
其他的解构赋值
let {length}='yo.';
console.log(length);//3
let [a,b,c]="Yo.";//解构字符串
//传参时使用
var arr=[1,2];
function test([a,b]){
console.log(a);
console.log(b);
}
test(arr);
//为了解决传参顺序问题,用对象
var obj={a:1,b:2}
function test({a,b}){
console.log(a);
console.log(b);
}
test(obj);
//用默认值
var obj={b:2}
function test({a=10,b}){
console.log(a);
console.log(b);
}
test(obj);
3. 字符串的拓展
模板字符串
模板字符串(template string)是增强版的字符串,用反引号(`)标识。它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量
let str=`
hello,
I am sorry to inform you that you falied.
`
console.log(str);
得到的结果是
断行可以实现,写html变量代码方便
如果想带变量
let name='wangyue';
let age='20';
let str=`
hello,${name}
Accroding to your passport, you are ${age} years old.
`;
console.log(str);
得到的结果
不需要加号,换行也可以实现,非常方便
大括号内部可以放入任意的 JavaScript 表达式,可以进行运算,以及引用对象属性。
4.字符串的新增方法
四个
includes,endsWith,startsWith,repeat
//之前查找字符串
console.log('Yo'.indexOf('Y')!==-1)
//新方法
console.log('Yo'.includes('Y'));
//返回的是布尔值
console.log('Yo'.startsWith('o'));//false
console.log('Yo'.endsWith('o'));//true
console.log('Yo'.repeat(3));//YoYoYo