实习12.5(es6)

扩展运算符(…)的用途

1.合并数组
一直以来,有很多方法合并数组,但是扩展运算符给了我们全新的方法去实现合并数组:

arr1.push(...arr2) // 把arr2合并到arr1的后面
arr1.unshift(...arr2) //把arr2合并到arr1的前面

如果你想在数组内合并数组,你可以像下面这样做:

var arr1 = ['two', 'three'];
var arr2 = ['one', ...arr1, 'four', 'five'];

2.复制数组
复制数组是我们常常要做的工作,在过去,我们会使用Array.prototype.slice去实现,但现在我们可以使用扩展运算符去得到一个复制后的数组:

var arr = [1,2,3];
var arr2 = [...arr]; // 就像 arr.slice()
arr2.push(4)

3.结构赋值
结构赋值是一个十分有趣的实践,我在自己的React项目中大量的使用了这种技巧。你可以使用扩展运算符配合其他运算符一起,从变量中提取有用的信息,就像这样:

let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
console.log(x); // 1
console.log(y); // 2
console.log(z); // { a: 3, b: 4 }

Array from()

作用: Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括ES6新增的数据结构Set和Map)。
参数: 一共有3个参数,
第一个参数:毕传参数,是需要转化为数组的类数组本身
第二个参数:可选参数,是一个回调函数,如果指定了这个参数,新数组中的每个元素都会执行这个函数
第三个参数,也是可选参数,指定回调函数中的this指向

扩展:
Array.from() 可以通过以下方式来创建数组对象

伪数组对象:拥有一个length属性,和若干个索引属性的任意对象
可迭代对象:可以获取对象中的元素,比如Map Set等

module(模块)语法

模块的功能主要由两个命令构成:export和import。export用于在模块中导出接口;import命令用于输入其他模块提供的功能。export和import是配套使用
一个模块就是一个js文件
外部能访问到模块内部的某个变量,就必须使用【export命令导出变量】。

//// profile.js
export var firstName = 'Michael';
export var lastName = 'Jackson';
export var year = 1958;

export除了上面的那样的写法,还有另外一种更常用的方式

// profile.js
var firstName = 'Michael';
var lastName = 'Jackson';
var year = 1958;

export {firstName, lastName, year};

export命令除了输出变量,还可以输出函数或类(class)

*//输出函数*
export function multiply(x, y) {
  return x * y;
};

*//输出类*
export class Person{

}

export输出的变量就是本来的名字,使用as关键字重命名

function v1() {
    //.....
}
export {
    v1 as streamV1,
    }

【注意】export命令规定的是对外的接口,必须与模块内部建立一一对应关系。

import命令

//导入模块
import { sayHi, Person, name } from ‘./model’

上面代码中,从model模块中导入了三个接口,分别是一个方法、一个类、和一个变量。
【import大括号中的名称必须和模块导出的名称一致,有别名的与别名一致】

【import是静态执行的,不能使用表达式】

// 报错
import { 'f' + 'oo' } from 'my_module';

// 报错
let module = 'my_module';
import { foo } from module;

// 报错
if (x === 1) {
  import { foo } from 'module1';
} else {
  import { foo } from 'module2';
}

上面三种写法都会报错,因为它们用到了表达式变量和**if结构。**在静态分析阶段,这些语法都是没法得到值的。

import语句会执行所加载的模块,因此可以有下面的写法。

import 'lodash';

模块的整体加载

除了指定加载某个输出值,还可以使用整体加载,
即用星号()指定一个对象,所有输出值都加载在这个对象上面。
import * as exportobj from ‘./model’
exportobj;
上面代码中用
整体加载了一个模块,在这个对象拥有所有模块导出的接口

【注意】模块的整体加载也是静态的,不允许导入模块之后再模块外部运行时对接口进行改变。

import * as circle from './circle';

// 下面两行都是不允许的
circle.foo = 'hello';
circle.area = function () {};

export default命令

为模块指定默认输出

//// export-default.js
export default function () {
  console.log('foo');
}

上面代码是一个模块文件export-default.js,它的默认输出是一个函数

其他模块加载该模块时,import命令可以为该匿名函数指定任意名字。

//// import-default.js
import customName from './export-default';
customName(); // 'foo'

export default还可以用于非匿名函数

export default function sayHi() {
  console.log('I am Blue');
}

//等同于

function sayHi() {
    console.log('I am Blue');
}
export default sayHi;

下面比较一下默认输出和正常输出

//第一组
export default function crc32() { // 输出
  // ...
}
import crc32 from 'crc32'; // 输入

// 第二组
export function crc32() { // 输出
  // ...
};
import {crc32} from 'crc32'; // 输入

上面代码的两组写法,第一组是使用export default时,对应的import语句不需要使用大括号;
第二组是不使用export default时,对应的import语句需要使用大括号。

一个模块只能有一个默认输出
,所以,import命令后面才不用加大括号,因为只可能对应一个方法。

本质上,export default就是输出的一个叫作default的变量或方法,然后系统允许你为它取别名。

// modules.js
function add(x, y) {
  return x * y;
}
export {add as default};
// 等同于
// export default add;

// app.js
import { default as xxx } from 'modules';
// 等同于
// import xxx from 'modules';

如果想在一条import语句中,同时输入默认方法和其他接口,可以写成下面这样。

import _, { each, each as forEach } from 'lodash';

对应上面代码的export语句如下。

export default function (obj) {
  // ···
}

export function each(obj, iterator, context) {
  // ···
}

export { each as forEach };
上面代码的最后一行的意思是,暴露出forEach接口,默认指向each接口,即forEach和each指向同一个方法。

export default也可以用来输出类。

const Person = class {
    constructor(name) {
        this.name = name
    }
    sayHi() {
        console.log('I am ', this.name);
    }
}
export default Person;


import Person from './model';
let p = new Person('Blue');
p.sayHi();  //I am  Blue

export 与import的复合写法

export { Person } from './model';

//等同于

import **Person** from './model';
export { **Person** }; 	

【改名输出】
export { Person as People } from ‘./model’;
【整体输出】
export * from ‘./model’;
【默认输出】
export { default } from ‘./model’;
【具名接口改成默认接口输出】
export { Person as default } from ‘./model’;
【默认接口改成具名接口输出】
export { default as Person } from ‘./model’;

跨模块常量

介绍const命令的时候说过,const声明的常量只在当前代码块有效。
如果想设置跨模块的常量(即跨多个文件),或者说一个值要被多个模块共享,可以采用下面的写法。

// constants.js 模块
export const A = 1;
export const B = 3;
export const C = 4;

// test1.js 模块
import * as constants from './constants';
console.log(constants.A); // 1
console.log(constants.B); // 3

// test2.js 模块
import {A, B} from './constants';
console.log(A); // 1
console.log(B); // 3

如果要使用的常量非常多,可以建一个专门的constants目录,将各种常量写在不同的文件里面,保存在该目录下。

// constants/db.js
export const db = {
  **url**: 'http://my.couchdbserver.local:5984',
  **admin_username**: 'admin',
  **admin_password**: 'admin password'
};

// constants/user.js
**export const users** = ['root', 'admin', 'staff', 'ceo', 'chief', 'moderator'];

然后,将这些文件输出的常量,合并在index.js里面。

// constants/index.js
export {db} from './db';
export {users} from './users';

用的时候,直接加载index.js就可以了。

// script.js
import {db, users} from './constants';
内容概要:本文档详细介绍了Analog Devices公司生产的AD8436真均方根-直流(RMS-to-DC)转换器的技术细节及其应用场景。AD8436由三个独立模块构成:轨到轨FET输入放大器、高动态范围均方根计算内核和精密轨到轨输出放大器。该器件不仅体积小巧、功耗低,而且具有广泛的输入电压范围和快速响应特性。文档涵盖了AD8436的工作原理、配置选项、外部组件选择(如电容)、增益调节、单电源供电、电流互感器配置、接地故障检测、三相电源监测等方面的内容。此外,还特别强调了PCB设计注意事项和误差源分析,旨在帮助工程师更好地理解和应用这款高性能的RMS-DC转换器。 适合人群:从事模拟电路设计的专业工程师和技术人员,尤其是那些需要精确测量交流电信号均方根值的应用开发者。 使用场景及目标:①用于工业自动化、医疗设备、电力监控等领域,实现对交流电压或电流的精准测量;②适用于手持式数字万用表及其他便携式仪器仪表,提供高效的单电源解决方案;③在电流互感器配置中,用于检测微小的电流变化,保障电气安全;④应用于三相电力系统监控,优化建立时间和转换精度。 其他说明:为了确保最佳性能,文档推荐使用高质量的电容器件,并给出了详细的PCB布局指导。同时提醒用户关注电介质吸收和泄漏电流等因素对测量准确性的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值