1-过去咱们是用var来声明变量的 var i=1;
或者直接i=1,
这两种方式有什么区别?
当咱们运行下面两段代码:
console.log(i)
var i=1;
console.log(i)
i=1;
输出的结果分别是undefined和not defined可见var有提高变量的做用
注意:虽然不会报错但尽可能不要用不加var的方式来声明变量
javascript
2-如今Es6又新增了let(变量)和const(常量)两种方式来声明变量,这两种方式声明的变量都是处于块级做用域中,并且let和const并不存在变量提高,因此必定要在定义后使用,不然报错。
所谓的块级做用域就是一个{},运行代码以下:
java
{
var a=110;
let b=666;
}
console.log(a)
console.log(b)
复制代码
输出结果是:110和 not defined数组
用途二可以实现多行输出,以下:
数据结构
var a='zk'
console.log(` my name i${a}`)
复制代码
直接就实现了多行输出的效果~函数
也就是函数的快捷写法
例如:ui
x=>x*x;
function f(x){
return x*x;
}
复制代码
这两种写法表达的函数是同样的。
用法:当你的函数有且仅有一个参数的时候,是能够省略掉括号的。当你函数返回有且仅有一个表达式的时候能够省略{} 和 return。
this
注意:箭头函数中是没有this的spa
IIFES即函数当即表达式,一般用途是建立一个内部的做用域,而在Es6中咱们一样能够用一个块级做用域来实现相同的功能:
以下列代码:
rest
{
let f=()=>console.log("zzzzz~")
}
(function f(){console.log("zzzzz~"})
复制代码
这两个函数做用是相同的code
Arguments是个相似数组但不是数组的伪数组,说他相似数组是由于其具有数组相同的访问性质及方式,可以由arguments[n]来访问对应的单个参数的值,并拥有数组长度属性length。还有就是arguments对象存储的是实际传递给函数的参数,而不局限于函数声明所定义的参数列表,并且不能显式建立 arguments 对象 用法以下:
function f(a,b,c){
for(var i=0;i<arguments.length;i++){
console.log(arguments[i])
}
}
f(1,2,3);
复制代码
在非严格模式下,arguments老是能反映出命名参数的变化。看下面的代码:
function foo(a, b) { //非严格模式
console.log(arguments[0] === a); //true
console.log(arguments[1] === b); //true
a = 10;
b = 20;
console.log(arguments[0] === a); //true
console.log(arguments[1] === b); //true
}
foo(1, 2);
复制代码
function foo(a, b) {
//严格模式
"use strict"
console.log(arguments[0] === a); //true
console.log(arguments[1] === b); //true
a = 10;
b = 20;
console.log(arguments[0] === a); //false。 修改a的值不会影响到arguments[0]的值
console.log(arguments[1] === b); //false
}
foo(1, 2);
复制代码
var arr=[1,2,3];
console.log(...arr);
//把数组展开后依次输出
var arr2=[...arr];
//把数组展开后再赋值给arr2
复制代码
function f(a,b,c){
console.log([...arguments])
}
f(1,2,3);
复制代码
let arr1=[1,2]
let arr2=[3,4]
console.log([...arr1,...arr2])
//输出合并后的数组
复制代码
let[a,b,c]=[1,2,3]
console.log(a)
console.log(b)
console.log(c)
复制代码
设置函数中形参的默认值 简而言之:
function f(a=1,b=3,c=4){
console.log(a)
console.log(b)
console.log(c)
}
f()
//输出结果是1,3,4
复制代码
class 类名{
constructor(参数){
this.属性=参数;
}
方法名(){}//不是箭头函数
}
复制代码
class 子类 extends 父类{
constructor(参数){
super(参数)
this.属性=值
}
}
复制代码
例如:
class A1{
constructor(a,b){
this.a=a;
this.b=b;
}
g(){console.log(this.a+this.b)}
}
class A2 extends A1{
constructor(a,b,c){
super(a,b)
this.c=c;
}
s(){console.log(this.c)}
}
复制代码
rest 参数(形式为...变量名),用于获取函数的多余参数,这样就不须要使用arguments对象了。rest参数搭配的变量是一个数组,该变量将多余的参数放入数组中。以下代码:
function add(...values){
var sum=0;
for(var val of values){
sum+=val;
}
console.log(sum);
}
add(1,2,3)//6
复制代码
set和数组差很少,也是一种集合,区别在于:它里面的值都是惟一的,没有重复的,是一个伪数组。
建立方式:
var s1=new Set();
Set s2=[1,2,3,"ad"];
s2.add(4);//使用add来添加元素
复制代码
s2.forEach(item=>console.log(item));
for(var p of s2){
console.log(p)
};
复制代码
小技巧:使用set为数组去重:
var s1=new Set([1,1,1,2,2,3,3,4,5,2,1])
console.log([...s1])
复制代码
它相似于对象,里面存放也是键值对,区别在于:对象中的键名只能是字符串,若是使用map,它里面的键能够是任意值。 建立Map,以下:
var m=new Map();//1
var n=new Map(["a","hello"],[1,"123"]);//2
复制代码
添加元素:
m.set(2,"asd")
m.set([1,2,3],{1:"asdd"})
复制代码
获取其中元素:
m.get("2")//能够取得数据
m.get([1,2,3])//因为get()时要比较栈区中的地址,而不是堆区中的数据,将没法获得数据
复制代码
注意:若是有重复的键,后面的要把前面的覆盖的