共计 2693 个字符,预计需要花费 7 分钟才能阅读完成。
咱们先来理解一些 ES6 语法。好多小伙伴就是不重视根底,感觉这有什么难的,多写点我的项目,记住写法就行了,前面天然就会了。其实这种想法是谬误的,要想代码写法标准,bug 少及排错能力强,必须把根底把握牢固。
1、let 与 const
ES2015(ES6) 新增 2 个 JavaScript 关键字: let 和 const
**
let 申明的变量只在所在的代码块中失效。举例说明如下:
function getShopList() {
let shopCount = 10;
console.log('shopCount1', shopCount); // 正确打印出 10
}
getShopList();
console.log('shopCount2', shopCount); // 报错,即 shopCount not defined
在控制台打印得:
所以,let 申明的变量只在所在的代码块中失效。
const 申明一个只读的常量,一旦申明,常量的值就不能扭转。举例说明如下:
function getShopList() {
const shopCount = 10;
shopCount = 20; // 从新赋值,就会报错
console.log('shopCount', shopCount);
}
getShopList();
在控制台打印得:
反思点:
爱动脑筋的小伙伴可能会问,如果用 const 申明初始化一个数组或者对象时,为何能扭转它的值?
function getShopList() {const shopCount = [10];
shopCount.push(30);
console.log('shopCount', shopCount);
}
getShopList();
在控制台打印得:
总结:
const 其实保障的不是变量的值不变,而是保障变量指向的内存地址所保留的数据不容许扭转。然而,简略类型和复合类型保留值的形式是不一样的。对于简略类型(数值 number、字符串 string、布尔值 boolean), 它的值就保留在变量指向的那个内存地址,因而 const 申明的简略类型变量等同于常量;而简单类型(对象 object,数组 array,函数 function),变量指向的内存地址其实是保留了一个指向理论数据的指针,指针是能够挪动的,所以变量的值也是能够扭转的。
其实下面原理不太了解的小伙伴,也不必太过纠结,咱们只须要记住,罕用的数值和字符串用 const 申明初始化后,是不能够从新赋值的;而数组和对象用 const 申明初始化后,容许扭转其值就 ok 了!
面试题问答:
咱们在面试口试过程中,有时候会遇到考查 const 与 let 关键字的其余知识点?你们遇到过吗,一起持续往下看
b() // 今天预报有大雨!console.log(a) // undefined
var a = '今天天气不错!'
function b() {console.log('今天预报有大雨!')
}
下面输入的后果想必大家都晓得了,之所以 变量 a 和 b 函数可能打印出后果,这就是变量和函数晋升的起因。通常状况下,能够了解为将申明的代码移动了顶部。然而更精确的说,js 在生成执行环境时,有两个阶段。第一个阶段是创立阶段,js 会将变量和函数晋升,并在存到开拓好的内存中。所以在第二代码执行阶段,咱们能够间接提前应用,而不会报错。
好了,理解完起因之后,咱们一起看上面的面试题:
function fn() {
const k = 1;
fn1();
function fn1() {console.log('k1', k); // k1 1
}
}
const k = 2;
fn();
console.log('k2', k); // k2 2
通过以上的解说,想必这道面试题对大家来说也是小菜一碟了。我也不多唠叨了!
2、解构赋值
咱们之前必定很常见上面赋值:
const girl = {name:"Tom" , age:18};
let boy = {name:"Jim" , age:24};
明天咱们聊的是:将他们反过来赋值
const {name:"Tom" , age:18} = girl;
let {name:"Jim" , age:24} = boy;
这样的就能够拿到相应的 name 与 age 值了。下面的用法仍然实用于数组。
解析赋值很多用于函数组件中,接下来,就让咱们一起看看吧
// 这是不应用解析赋值的写法
handlePersonInfo = (props) =>{return <div> 你好!{props.name}</div>
}
// 应用解析赋值
handlePersonInfo = ({name}) =>{return <div> 你好!{name}</div>
}
另外,
属性开展是 JSX 中的一个新个性
咱们尽量少写文字,多代码展现,这样大家能很快把握并正确应用。先举个例子:
let props = {};
props.userList = a;
props.roleList = b;
const component = <Component {...props} />
// 这里的属性开展就是传入对象的属性会被复制到组件内
// 相当于 const component = <Component userList ={a} roleList ={b}>
这样写是不是不便很多了呢。
一、笼罩个性
既然它应用起来如此不便,有哪些留神点呢?
它能被屡次应用,也能够和其它属性一起用。留神程序很重要,前面的会笼罩掉后面的。
let props = {name:"Tom"};
const component = <Component name={"Jim"} {...props} />
console.log(conponent.props.name); // "Tom"
二、合并个性
在一些场合下,咱们须要将两个对象数组合并成一个对象数组,如何应用属性开展来操作呢?
const a = {name:"Tome"};
const b = {age:18};
const userInfo = {...a, ...b}; // 合并之后: userInfo = {name:"Tom", age:18}
三、拆散个性
如果心愿将某个值从对象数组中分离出来,嘿嘿,拆散个性就能够帮到你了
const arrObject = {name:"Tom", age:18, school:"zhongshan"};
const {age, ...a} = arrObject;
// 此时,a = {name:"Tom", school:"zhongshan"}
3、Promise 对象
它是异步编程的一种解决方案。咱们在这不去过多的理解它的历史及刻板概念形容,比方 Promise 对象状态:pending、fulfilled、rejected 及它们之间如何互相转换的。
咱们终极目标是帮忙小伙伴们疾速把握并应用它,让学习不再有压力。