JavaScript-ES6(1)

184 阅读3分钟

一、什么是ES?

总所周知一个页面是由三大部分javascript、HTML、css组成的,而javascript又是由三部分组成:ECMAScript(核心)、DOM(文档对象模型)、BOM(浏览器对象模型)。

其中的ECMAScript就是简称ES,而ES6就是ECMAScript的第六个版本。

那么ECMAScript和JavaScript的关系是什么呢?
ECMAScript和JavaScript的关系是,前者是后者的规格(标准),后者是前者的一种实现。
ECMAScript 实际上是一种脚本在语法和语义上的标准。

二、语法

最常用的ES6特性

  1. let,const
    这两个的用途与var类似,都是用来声明变量的,但在实际运用中他俩都有各自的特殊用途。 首先来看下面这个例子了解一下var:
var name = 'aaa'
 
while (true) {
    var name = 'bbb'
    console.log(name)  //bbb
    break
}
 
console.log(name)  //bbb

使用var 两次输出都是bbb,这是因为ES5只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景。第一种场景就是你现在看到的内层变量覆盖外层变量。而let则实际上为JavaScript新增了块级作用域。用它所声明的变量,只在let命令所在的代码块内有效。 那么我们试试let,就看出区别了,

var name = 'aaa'
 
while (true) {
    let name = 'bbb'
    console.log(name)  //bbb
    break
}
 
console.log(name)  //aaa

let生成了一个块级作用域,出了那个块是访问不到的。
再来看一个我们特常见的例子。

<body>
	<button>0</button>
	<button>1</button>
	<button>2</button>
	<button>3</button>
	<button>4</button>
	<button>5</button>
	<button>6</button>
	<button>7</button>
	<button>8</button>
	<button>9</button>
	<script>
            var buttons = document.getElementsByTagName("button");
		for(var i = 0;i < buttons.length;i++){
			buttons[i].onclick = function(){
				console.log(i);
			}
		}
		
	</script>
</body>

我们需要的是点击其中一个按钮,在控制台答应出相对应的123456789,可是事实是,我们不管点击哪一个,打印出来都是10。原因就是var它并不能给每一个button一个单独的域,这时候我们解决它就很简单,把var换成let就解决这个问题了。
const也用来声明变量,但是声明的是常量。一旦声明,常量的值就不能改变。

const a = 10;
a=8;
console.log(a)

当我们尝试去改变用const声明的常量时,浏览器就会报错。const有一个很好的应用场景,就是当我们引用第三方库的时声明的变量,用const来声明可以避免未来不小心重命名而导致出现bug:

  1. ...运算符
    ...为展开运算符
let a = [1,2,3];
let b = [0, ...a, 4]; // [0,1,2,3,4]
 
let obj = { a: 1, b: 2 };
let obj2 = { ...obj, c: 3 }; // { a:1, b:2, c:3 }
let obj3 = { ...obj, a: 3 }; // { a:3, b:2 }

...为剩余操作符

let a = [1,2,3];
let [b, ...c] = a;
b; // 1
c; // [2,3]
 
// 也可以
let a = [1,2,3];
let [b, ...[c,d,e]] = a;
b; // 1
c; // 2
d; // 3
e; // undefined
 
function test(a, ...rest){
  console.log(a); // 1
  console.log(rest); // [2,3]
}
 
test(1,2,3)
  1. ES6参数可以加默认值
function fun(a,b=10,c=20){
			return a+b+c;
	}
console.log( fun(1) )

4. 箭头函数
ES6新增了使用“箭头”(=>)定义函数

var f = v => v;

//上面的箭头函数等同于:

var f = function(v){

       return v;

};
//如果箭头函数不需要参数或者需要多个参数,就使用一个圆括号代表参数部分。

var f  = () => 5;
//等同于
var f  = function(){return 5};
var sum = (num1, num2) => num1 +num2;

//等同于
var sum = function(num1 , num2){

        return num1 + num2;

}

如果箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,并且使用return语句返回。

var sum = (num1, num2) => {return num1 + num2;}

注:1.箭头函数中没有this,argument,new.target,如果要强行使用,则指向函数外层对应的this,argument,new.target

重:this指向法则

  1. 对象调用函数,this指向对象
  2. 直接调用函数,this指向window
  3. 如果使用了new关键字,this指向新创建的对象
  4. 如果使用apply,call,bind this指向绑定的数据
  5. 如果是DOM事件函数,this指向事件源