【EcmaScript6】笔记本

1.各种扩展方法

string

ES写法C#说明
for (let chr of 'foo')toArray遍历字符
let msg = "Hello, ${place}"$"hello,{place}"模板字符串
s.includes()contains是否包含
s.startWith()startWith
s.endWith()endWith
s.repeat(3)将s重复三遍输出
s.padStart/s.padEnd字符串补全
s.trim()/s.trimStart/s.trimEnd消除空格
s.matchAll()Regex正则匹配
s.replace()
s.search()
s.spilt()

数值

ESC#说明
Number.isFinite()Int.MaxValue…是否极数
Number.isNaN()。。
Number.parseInt()
Number.parseFloat()
Number.isInteger()
Math.trunc()除去小数部分,非四舍五入
Math.sign()判断大于0小于0等于0,会自动类型转换
Math.cbrt()立方根
Math.max()最大值
2 ** 3指数运算,结果是8
1234nbigint类型
BigInt(123) BigInt(‘123’)转为bigint

函数

ESC#说明
.length返回函数入参的个数,不包含有默认值的参数
rest参数params格式为:(…values)。values接收到的就是一个数组
.name获取函数名

数组扩展

https://es6.ruanyifeng.com/#docs/array

ESC#说明
扩展运算符(…)将一个数组(字符串)转为用逗号分隔的参数序列,相当于展开数组
arr.push()list.Add()
arr.contact()list.AddRange()合并数组
arr.find()/arr.findIndex()查找
arr.fill()填充数组
arr.keys()–arr.values()–arr.entries()用于遍历key,value,kv对
arr.includes()contains数组是否包含某个值
arr.flat(Infinity)拉平数组,例如原数组里有数组
arr.flatMap(action)先对数组每一项执行一个委托,然后再flat
arr.sort()OrderBy()
arr.forEach()ForEach()
arr.filter()Where()/Find()
arr.every()Every()
arr.some()Any()/Exist()
arr.join()Join
arr.reduce归纳函数,对每一项执行一个委托,并把委托的结果作为参数传给下一个委托
arr.mapSelect对每一项执行一个委托,然后返回一个新的数组
Array.from()将一个类似数组或可遍历的对象,转为真正的数组
Array.of(3, 11, 8)将一组值转为数组,替代Array()或new Array()

只要有Iterator接口的对象都可以使用扩展运算符。

返回一个同样的新数组Array.from([1, 2, 3])

对象的扩展

获取属性值:

// 方法一,通过点的方式
obj.foo = true;// 方法二,通过方括号内表达式的方式
obj['a' + 'bc'] = 123;
obj['foo']=true;

反射相关:

let obj = { foo: 123 };
Object.getOwnPropertyDescriptor(obj, 'foo')
//  {
//    value: 123,
//    writable: true,
//    enumerable: true,
//    configurable: true
//  }
  • 遍历属性
(1)for...infor...in循环遍历对象自身的和继承的可枚举属性(不含 Symbol 属性)。(2)Object.keys(obj)Object.keys返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含 Symbol 属性)的键名。(3)Object.getOwnPropertyNames(obj)Object.getOwnPropertyNames返回一个数组,包含对象自身的所有属性(不含 Symbol 属性,但是包括不可枚举属性)的键名。(4)Object.getOwnPropertySymbols(obj)Object.getOwnPropertySymbols返回一个数组,包含对象自身的所有 Symbol 属性的键名。(5)Reflect.ownKeys(obj)Reflect.ownKeys返回一个数组,包含对象自身的(不含继承的)所有键名,不管键名是 Symbol 或字符串,也不管是否可枚举。

解构赋值

https://es6.ruanyifeng.com/#docs/object#%E8%A7%A3%E6%9E%84%E8%B5%8B%E5%80%BC

Object.assign()等同于对象的扩展运算符:

let aClone = { ...a };
// 等同于
let aClone = Object.assign({}, a);

链判断运算符

  • 获取值:就是C#的 person?.Name?.Age
  • 执行方法:func?.()等于C#执行委托时的action?.Invoke();

Null判断运算符
获取值的时候有可能是个null或者undefined,需要指定默认值。与C#的??运算符一致。用来取代旧的js||运算符,此运算符为null、undefined、false、0时都会执行。

对象的扩展方法

https://es6.ruanyifeng.com/#docs/object-methods

判断是否相等

  1. ==:会进行类型转换
  2. ===:不进行类型转换,但+0和-0是相等的,NaN不等于Nan,即:
+0 === -0 //true
NaN === NaN // false
  1. Object.is(a,b):不进行类型转换,但+0和-0是不相等的,NaN等于NaN。
ESC#说明
Object.is(a,b)==判断a b是否相等
Object.assign(target,source1,source2)将source对象的所有可枚举属性(不包括继承属性),赋值到target上。是浅拷贝
Object.getOwnPropertyDescriptors()返回所有属性(非继承属性)的描述对象,为了解决assign无法拷贝get set的问题
Object.getOwnPropertyDescriptor()返回指定的某个属性的描述对象
Object.setPrototypeOf()
Object.getPrototypeOf()
Object.keys(),Object.values(),Object.entries()同arr的一致
Object.fromEntries()是entries的逆操作,用于将键值数组转为对象

Object.assign应用数组时:

Object.assign([1, 2, 3], [4, 5])
// [4, 5, 3]

Object.assgin用来:

  1. 为对象添加属性
  2. 为对象添加方法
  3. 克隆对象
  4. 合并多个对象
  5. 为属性指定默认值

2.Set和Map

Set

可以被new,就是array的不重复版本,里面的项都是不重复的。

Map

可以被new,相当于C#的Dictionary,有size,has,get,set,delete,clear等方法。

3.export和import

EXPORT:可以导出变量、方法和类。

下面两种写法一样

export var firstName = 'Michael';
export var lastName = 'Jackson';
export var year = 1958;
var firstName = 'Michael';
var lastName = 'Jackson';
var year = 1958;export { firstName, lastName, year };

export出去的是对变量或方法的引用,不能是变量或者方法的值:

//错误 export是一个具体的值
export 1;// 报错 export是一个具体的值
var m = 1;
export m;//以下正确
export var m = 1;
var m = 1;
export {m};
var n = 1;
export {n as m};

export default:本质上,就是输出一个叫做default的变量或方法。一个模块只能有export default,但可以有多个其他export。

export default也可以用来输出类

// MyClass.js
export default class { ... }// main.js
import MyClass from 'MyClass';
let o = new MyClass();

export导出组件的几种方式:

  1. 传统写法:
class ClickCounter extends Componment{constructor(props){super(props);this.onClickButton=this.onClickButton.bind(this);this.state={counter:0};}onClickButton(){this.setState({counter:this.state.counter+1);};render(){return()}
}
export defalut ClickCounter;
  1. 无状态组件(所有数据都来自props)的简写,React支持只用一个函数代表的无状态组件。
function Counter(props)
{const {a,b,c}=props;return({a}{b})
}
export default Counter;
  1. 无状态组件的解构写法:
function Counter({a,b,c})
{return(<div>{a}{b}</div>)
}
export default Counter;
  1. react-redux的无状态写法:
cosnt TodoList=({variableA,methodB,methodC})=>{return();
};
const mapState=state=>{return {variableA:state.AA,}
};
const mapMethod=dispatch=>{return{methodB:id=>dispatch(meA(id)),methodC:id=>dispatch(meB(id))}
}
export default connect(mapState,mapMethod)(TodoList);

IMPORT

import命令是编译时加载,所以没法做到动态加载(C#的Assembly.Load),所以就有了import()方法。

import { area, circumference } from './circle';//加载部分
import * as circle from './circle';//加载全部

import的时候的名字因为必须要和export的名字对应上才行,所以不是很方便,就产生了export default命令。可以随便起名字了,但是需要把大括号取消掉

export default function () {console.log('foo');
}
import customName from './export-default';//可以随便起名字,没有大括号
customName(); // '

3.编程风格

https://es6.ruanyifeng.com/#docs/style

  • 静态字符串一律使用单引号或反引号,不使用双引号。动态字符串使用反引号。
  • 优先使用解构赋值
  • 不要给对象追加属性,实在必要,使用Object.assign
  • 使用扩展运算符(…)拷贝数组
  • 简单的、单行的、不会复用的函数,建议采用箭头函数
  • 不要在函数体内使用 arguments 变量,使用 rest 运算符(…)代替


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部