javascript 学习
Let
类似var但let只在它所在的代码块有效
{
leta=10;
varb=1;}
a//ReferenceError:aisnotdefined.b//1
不存在变量提升(声明写在调用之后,也能执行,就是预解析机制)
typeofx;//ReferenceErrorletx;
暂时性死区:
vartmp=123;
if(true){
tmp='abc';//ReferenceErrorlettmp;}
不能重复声明同一个变量
作用域不包含子级
functionf1(){
letn=5;
if(true){
letn=10;
}
console.log(n);//5}
所谓的块级作用域就是被“{...}”包括的代码
立即执行匿名函数
(function(){//dosomethinghere;})();
[这里写“!~+-”]function(){//dosomething}();
Newfunction(){}();
函数本身的作用域,在其所在的块级作用域之内。不存在函数提升(预解析)
functionf(){console.log('Iamoutside!');}(function(){
if(false){
//重复声明一次函数ffunctionf(){console.log('Iaminside!');}
}
f();}());
Const
用于声明常量,只在声明所在的块级作用域内有效
不提升,不会被预解析
对于复合类型的变量,变量名不指向数据,而是指向数据所在的地址。const命令只是保证变量名指向的地址不变,并不保证该地址的数据不变,所以将一个对象声明为常量必须非常小心。
consta=[];//声明一个数组
a.push("Hello");//可执行
a.length=0;//可执行
a.length=3;//可执行
a=["Dave"];//报错
对象冻结不管是声明对象,都将无法做任何变更
Object.freeze()
跨模块常量
上面说过,const声明的常量只在当前代码块有效。如果想设置跨模块的常量,可以采用下面的写法。
//constants.js模块exportconstA=1;
exportconstB=3;
exportconstC=4;
//test1.js模块import*asconstantsfrom'./constants';
console.log(constants.A);//1console.log(constants.B);//3
//test2.js模块import{A,B}from'./constants';
console.log(A);//1console.log(B);//3
全局对象是最顶层的对象,在浏览器环境指的是window象,在Node.js指的是global对象。ES5之中,全局对象的属性与全局变量是等价的。
window.a=1;
a//1
a=2;
window.a//2
Es5声明变量:
vara=1;varb=2;varc=3;
ES6允许写成下面这样。
var[a,b,c]=[1,2,3];
衍生:
let[foo,[[bar],baz]]=[1,[[2],3]];
foo//1
bar//2
baz//3
let[,,third]=["foo","bar","baz"];
third//"baz"
let[x,,y]=[1,2,3];
x//1
y//3
let[head,...tail]=[1,2,3,4];
head//1
tail//[2,3,4]l
et[x,y,...z]=['a'];
x//"a"
y//undefined
z//[]
、
字符串的遍历器
for(letcodePointof'foo'){
console.log(codePoint)}
includes():返回布尔值,表示是否找到了参数字符串。
startsWith():返回布尔值,表示参数字符串是否在源字符串的头部。
endsWith():返回布尔值,表示参数字符串是否在源字符串的尾部
repeat方法返回一个新字符串,表示将原字符串重复n次。
'x'.repeat(3)//"xxx"'hello'.repeat(2)//"hellohello"'na'.repeat(0)//""
模板字符串-->${}{}内可写任意表达式或调用函数
$("#result").append(`
Thereare<b>${basket.count}</b>items
inyourbasket,<em>${basket.onSale}</em>
areonsale!
`);
Number.isInteger()用来判断一个值是否为整数
Math.trunc方法用于去除一个数的小数部分,返回整数部分
ES6允许为函数的参数设置默认值
unctionfetch(url,{method='GET'}={}){
console.log(method);}
fetch('http://example.com')
//"GET"