小知识:
1、 下载指定版本的包
npm install --save-dev react-router@2.8.1
2、dependencies
与devDependencies
的区别
devDependencies
:开发环境使用
dependencies
:生产环境使用
npm install在安装node模块时,有两种命令参数可以把它们的信息写入package.json文件:
–save
–save-dev
–save 会把依赖包名称添加到package.json文件dependencies键下
–save-dev 则添加到package.json文件devDependencies键下
如果将包下载下来在包的根目录里运行,执行如下命令,默认会安装两种依赖
npm install
3、var 与 let
var arr: any = [];
for ( var i = 0; i < 2; i++) {
arr[i] = function() {
console.log(i);
};
}
arr[0]();
arr[1]();
结果为:
let arr: any = [];
for ( let i = 0; i < 2; i++) {
arr[i] = function() {
console.log(i);
};
}
arr[0]();
arr[1]();
结果为:
我对这两个结果的产生有点小迷。
我的理解是:var没有块级限制,let有块级限制。function()会产生一个块级作用域,也就是说每个arr[i]都会产生一个块级作用域。
1、在var例子里,输出i时,function里没有i,var又没有块级限制,他就要去全局下找i,这时的i已经经过了for循环,i=2了(也因此跳出循环了),故输出结果为2。(提示:for循环里面逻辑还没开始时,for里的i就完成循环赋值了)
2、在let例子里,输出i时,function里没有i,let有块级限制,他就要去let下的作用域里找i,也就是for循环里。每次在for循环里找,结果就是每次i的赋值。
虽然是这样解释,但感觉还是思路不清晰,有些说不过去。期待指点……
4、解构
从数组/对象里提取值,并按照对应位置赋值
1、数组解构
const [ a, b, c]: any = [1, 2, 3];
console.log(a, b, c);
这个要求对应性。
当 解构数量 > 数组 结果是undefinded
当 解构数量 < 数组 结果是所取的的值
即
const [ a, b, c, d]: any = [1, 2, 3];
console.log(a, b, c, d);
const [ a, b]: any = [1, 2, 3];
console.log(a, b);
2、对象解构
// 纯解构
const {name, age}: any = { name: '张三', age: 18 };
console.log(name, age);
// 解构并赋值
const {name: res1, age: res2}: any = { name: '张三', age: 18 };
console.log(res1, res2);
当 解构数量 > 对象属性 结果是undefinded
当 解构数量 < 对象属性 结果是所取的的值
const {name: res1, age: res2, sex: res3}: any = { name: '张三', age: 18 };
console.log(res1, res2, res3);
5、箭头函数
()=> { }
注意几点:
1、当函数体内只有一句话,且为console.log()时,则{ } 可以省略
const sum = function(a1 , a2) {
console.log(a1 + a2);
}
const sum = (a1 , a2) => {
console.log(a1 + a2);
}
const sum = (a1, a2) => console.log(a1 + a2);
2、当形参只有一个时,( )可以省略
const aaa = b => { console.log(b) }
但我一般会加上typescript语法,比如
const aaa = ( b: any ) => { console.log(b) }
3、箭头函数并且没有自己的this,arguments,super或new.target。箭头函数表达式更适用于那些本来需要匿名函数的地方,并且它不能用作构造函数。
里面的this指向的是函数定义位置的上下文的this。
6、剩余参数
…args
这里有好的解释
https://www.cnblogs.com/snandy/p/4482463.html
补充一点,剩余函数可以与解构一起使用
const [ a, ...res]: any = [1, 2, 3];
console.log(a, res);
7、简单数据类型、复杂数据类型、内置对象
1、简单数据类型
Number、String、Boolean、null、undefined
2、复杂数据类型
对象、数组
简单数据类型是放在栈上的。复杂数据类型是放在堆上的,并在栈上存放地址
but: js没有栈和堆的概念,通过栈和堆的方式让我们容易理解代码的一些执行方式
3、内置对象
学习内置对象,就是学习内置对象所提供的属性和方法
javaScript的组成:ECMAScript BOM DOM
ECMAScript:有变量,数据类型,操作符,流程控制语句(判断和循环),数组,对象,构造函数,内置对象。
javascript中有三种对象:
自定义对象:这个对象的属性和方法我们自己定义。
内置对象:系统自带的,已经提供好了的对象。
浏览器对象:不属于ECMAScript
Math对象、Date对象、Array(数组)对象、String对象等
4、基本包装类型
在javascript中有三种基本包装类型:String Number Boolean