变量声明
1 变量不能重复命名
let star = '罗志祥';
let star = '小猪';
2 块级作用域
{
let girl = '周扬青';
//var girl = '周洋青';
}
console.log(girl)
//let报错 var打印出undifined
3 不存在变量提升
console.log(song)
let song = 'hhh'
//var song = 'hhh'
//用var打印出undifined 用let直接报错 不允许在变量声明之前使用变量
4 不影响作用域链
{
let school = 'gdcjdx'
function fn(){
console.log(school)
}
fn();
}
声明常量
1 常量一定要赋初值
const SCHOOL = 'gdcjdx';
2 常量名一般大写
3 常量值不可修改
4 块级作用域
{
const BOY = 'szj';
}
console.log(BOY)
会报错
5 对常量数组或对象的 元素 进行修改,不算做修改,不会报错
const ARRAY = ['uzi','ming','mxlg'];
ARRAY.push('meiko');
不报错
变量的解构赋值
允许按照一定模式在数组和对象中提取值,对变量进行赋值
此为解构赋值
数组的解构
const F3 = ['小沈阳','刘能','大张伟'];
let [xiao,liu,da] = F3;
console.log(xiao)
console.log(liu)
console.log(da)
对象的解构
const zhao = {
name:'zhao',
age:'unknown',
ability:function(){
console.log('我会演小品')
}
}
let {ability} = zhao;
ability();
新的字符串声明方式 ``
声明字符串
let str = `我是一个字符串`;
console.log(str,typeof str);
符号内容中可以出现换行符
let str = `<ul>
<li><li>
<ul>
`
换行拼接不用像原生JS一样 用 ’和+ 完成
变量拼接 一定要注意格式 ${}
let lovest = '彭于晏';
console.log(`${lovest}是我的男朋友`)
对象的简化写法
对象中属性和方法可直接写入,方便简洁
let name = '彭于晏';
let speak = function(){
console.log(name)
}
const obj = {
name,
speak,
improve(){
console.log("nothing")
}
//对象方法的省略
}
// speak();
console.log(obj)
obj.improve();
箭头函数
原来:
let fn = function(){
}
箭头:
let fn = (a,b) =>{
return a+b;
}
console.log(fn(1,2))
箭头函数的特性
1 this是静态的,this始终指向函数声明时所在作用域下的this的值
function getName(){
console.log(this.name)
}
let getName2 = () =>{
console.log(this.name)
}
window.name = 'gdcjdx';
let obj = {
name:'ggddcc'
}
//一般调用
// getName();
// getName2();
//call调用
getName.call(obj);//this 发生改变
getName2.call(obj);//this 不变
2 不能作为构造函数实例化对象
let Person = (name,age) =>{
this.name = name;
this.age = age;
}
let me = new Person(xiao,10);
console.log(me)
会报错 this无法实现构造
3 不能使用argument变量
4 还可简写
简写小括号:当且仅当只有一个形参时
let add = n =>{
return n+n;
}
add(9);
简写花括号: return 也要去掉
let pow = (n)=> n*n;
console.log(pow(9))
普通函数this指向分为4种情况:
1 obj.getName(); 对象方法指向obj,
2 getName(); 非严格模式下,指向window,严格模式下为undefined
3 var a = new A();
a(); 指向A本身 构造函数
4 getName().apply(obj); apply/call
箭头函数本身没有this和arguments的,在箭头函数中引用
this实际上是调用的是定义时的上一层作用域的this
这里强调的是上一层作用域,是因为对象是不能形成独立的作用域
var obj = {
say:function(){
var f1 = () => {
console.log('111',this);
}
f1();
}
}
var o = obj.say;
o(); f1执行时,say函数指向window,故f1中this指向window
obj.say(); f1执行时,say函数指向obj,故f1中this指向obj
var obj = {
pro:{
getPro:()=>{
console.log(this);
}
}
}
obj.pro.getPro();
this 指向window,因箭头函数定义时,getPro的上一级时pro,是一个对象,不能形成单独的作用域,故指向window
Es6学习笔记(第一篇)
最新推荐文章于 2024-08-14 18:59:47 发布