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"