ふざけ:
新しいES jsの進捗状況、および進行が、プログラムされているES6 5年を経過しており、90%、または携帯電話の10%の割合との互換性は、最終的にまたは追いついていないこと、それらの世話をすべきでないことを、互換性がありません。人々は私が古い書き込み50行を使用する理由、私はそれが起こるべきではないと思いますが、新しいESは、機能の5行を書くことができ、また、そう、理解することは困難維持することは困難で、私はまだ互換性、軒下の人ではありませんない弓
==ラベル== ESは、このノードの分類に言及したツールとの下位互換性があり、ここでは言っていません
以下からのすべてのコンテンツ の神のブログルアンYifengのパワー
11月9日、2019年の12:00で、0から31までのブログの序文の内容[リンク]参照
頻繁に使用されるAPIを持っています
- そして、のconstましょう
- 代入演算子を脱構築し、展開します
- 文字列を展開
- デジタル拡大
- 機能拡張と拡張演算子
- そして、アレイを拡張するIterator
- オブジェクトを展開
- 新しいタイプセットとイテレータ
- 新規マップとタイプイテレータ
- リフレクト
- プロキシオブザーバー
- 約束する
- 非同期
- クラス
- モジュール
そして、のconstましょう
- varが代わりに、何の可変リフトをさせなかっせ、JSコードの解析プロセスとして理解することができ、遭遇してみましょう自動的に識別するために、実行時にスキップ
- CONST変数ではなく、点灯して固定されて、データ・タイプである場合、基礎となるデータ型は最初の代入値を変更することができない場合、内部の内容を変更することができるが、データ型を変更することができず、範囲が唯一の機能であります文句を言うだろう、つまり、二回AAを宣言することはできません、一度に宣言することができ、この値を保護することができますを容易に変更することがされていないか、別のプログラマを再宣言した
書き込み==次のいくつかの詳細==
割り当て解体の
配列とオブジェクト解体する解体に解体割り当て
解体アレイは順序に従って、及び解体のアレイが残されている、それが正しい配列でなければなりません
// 基础应用
// 可以理解为右边的数组是ajax请求来的res
let [a, b, c] = [1, 2, 3];
console.log(a,b,c)
// 跳过使用
let [ , , c] = ["foo", "bar", "baz"];
console.log(c) // "baz"
// 二级数组
let [a, b, d] = [1, [2, 3], 4];
console.log(b) //[2,3]
// 拓展运算符
// 拓展运算符一次赋值只能用一次,而且只能用在最后一位
let [head, ...tail] = [1, 2, 3, 4];
head // 1
tail // [2, 3, 4]
オブジェクトの解体は
のないオーダーが存在しない、解体キーが割り当てられているオブジェクト
は、はるかに解体と解体配列よりもオブジェクトが
// 基础应用
// 可以理解为右边的数组是ajax请求来的res
let { bar,foo,ceshi} = { foo: 'aaa', bar: 'bbb' };
console.log(bar,foo,ceshi) // 'bbb','aaa',undefined
// 上面的写法其实是对象的省略写法,因为key-value同名所以缩写
// 如果不缩写是 let { bar:bar,foo:foo,ceshi:ceshi} = { foo: 'aaa', bar: 'bbb' };
// 所以不缩写可以重命名
let { bar:newBar,foo:newFoo,ceshi:newCeshi} = { foo: 'aaa', bar: 'bbb' };
console.log(newBar,newFoo,newCeshi) // 'bbb','aaa',undefined
// 默认值
var {x = 1} = {};
console.log(x) //1
// 上面的默认值也是省略写法
var {x:newX = 1} = {x: 5};
console.log(newX) //5
//清除对象里不要的key
let {_internal, tooBig, ...cleanObject} = {el1: '1', _internal:"secret", tooBig:{}, el2: '2', el3: '3'};
console.log(cleanObject); // {el1: '1', el2: '2', el3: '3'}
文字列は、拡張
コードの理解に
var basket = {
count: 10,
onSale: "aa"
}
// 原先的字符串拼接
$('#result').append(
'There are <b>' + basket.count + '</b> ' +
'items in your basket, ' +
'<em>' + basket.onSale +
'</em> are on sale!'
);
// 新版的字符串拼接,两端是``斜点
// 数据是${...},
// 可以用默认值 ${ name || "pdt" }
// 可以用简单的方法${ time2date(time) }
$('#result').append(`
There are <b>${basket.count}</b> items
in your basket, <em>${basket.onSale}</em>
are on sale!
`);
デジタル拡張
前のデジタル文字列にはによってゼロに低減され
Number("123")
// 转不了的就是NaN
Number("123a") //NaN
機能を展開すると
、パラメータのデフォルト値は、パラメータの解体、拡張パラメータのオペレータは、機能を持っている矢印します
// 参数默认值
// 以往的参数默认值是这样的
function init(name){
var name = name || "pdt"
}
// es6可以
function init(name = "pdt"){ ... }
// 参数解构
// 老版本
function init(arr,obj){ ... }
init([1,2],{name:"pdt",age:18})
// 新写法
function init([,b],{name="无名"}){
//比如我只需要数组的第二个和name属性
console.log(a,b,name)
}
init([1,2],{name:"pdt",age:18})
//参数必填
const required = () => {throw new Error('Missing parameter')};
const add = (a = required(), b = required()) => a + b;
add(1, 2) //3
// 箭头函数,是function的缩写
// 但是不能作为对象的value,不能作为数组的值,不能作为构造函数
// 箭头函数没有自己的this
// 箭头函数没有三个改变this的方法
// 箭头函数没有arguments
// 声明
var init = () => { ... }
// 作为参数
function init(cb){
cb(111)
}
// 旧版
init(function(num){ console.log(num )})
// 箭头函数
init((num)=>{ console.log(num })
==この機能は、特に次を見るために、使用される保持矢印==
配列拡大
コールに配列を高めるために、新たなESのIterator
事、このビュー「トラバースの要約は」
このビューを通過する多くの方法を追加した「トラバースの要約」
ではなくオペレータが拡大するメソッド関数は、(参照するにはどう適用適用されます「コンテキストとスコープ」)
// ES5取数组的最大值
Math.max.apply(null, [14, 3, 77])
// ES6取数组的最大值
Math.max(...[14, 3, 77])
// ES5合并数组
arr1.concat(arr2, arr3);
// [ 'a', 'b', 'c', 'd', 'e' ]
// ES6合并数组
[...arr1, ...arr2, ...arr3]
// ES5把伪数组转成数组
Array.prototype.slice.apply(null,ArrayLike)
// ES6把伪数组转成数组
[...ArrayLike]
// 或者新api
Array.from(ArrayLike)
// ES5查看是否含有,返回第一个出现的位置,没有是-1
arr.indexOf("xx")
// ES6查看是否含有,返回true/false
arr.include("xx")
拡張オブジェクト
// 最后一个key-value可以加逗号了
var obj = {
name: "name",
age: 18, //以前这里结束加逗号是不行的
}
// key-value同名可以省略
// 比如要ajax传个参数
var name = "name",age = 18;
ajax({
// 以前
// data:{ name: name, age: gae }
// 现在可以
data:{name,age}
})
// 对象的value是function的写法优化
// 老写法
var obj = {
say: function(){ ... }
}
// 新写法
var obj = {
say(){ ... }
}
// 对象的遍历,查看《遍历的总结》
// 增加可Obj.vaules() 和 Object.entries()
// 对象的合并assign,这个api是浅拷贝
const target = { a: 1 };
const source1 = { b: 2 };
const source2 = { c: 3 };
Object.assign(target, source1, source2);
target // {a:1, b:2, c:3}
// 也可以
let target = {...target, ...source1}
新しいタイプセット[コレクション]
ほぼ同じオブジェクトの配列とのセットが奇形である
彼は、自動的に重いが、唯一の再基本データ型になります
// 需要通过new去创建,参数是一个数组或者伪数组
let set = new Set([undefined,undefined,NaN,NaN,"",""]); // set{"undefined",NaN,""}
// set的长度属性
set.size //3
// 添加某个值,返回set本身,所以可以无限add()
set.add(value)
// 删除某个值,返回一个布尔值,表示删除是否成功
set.delete(value)
// 返回一个布尔值,表示该值是否为Set的成员
set.has(value)
// 清除所有成员,没有返回值
set.clear()
// Set没有办法取值,只能转数组再取值
[...set]
// 或者
Array.from(set)
// Set的遍历,set.keys(),set.values(),set.entries()
// 具体查看《遍历总结》
// 还有一个WeakSet,不重要
// 他跟Set一样,只是他只能存对象,并且带有垃圾回收功能,面试题来着
const ws = new WeakSet();
コレクションのいくつかの機能
let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);
// 并集
let union = new Set([...a, ...b]);
// Set {1, 2, 3, 4}
// 交集
let intersect = new Set([...a].filter(x => b.has(x)));//ES6
var intersect = new Set([...a].filter(function(x){
return b.has(x);
}))
// set {2, 3}
// 差集
let difference = new Set([...a].filter(x => !b.has(x)));
// Set {1}
新しいタイプマップ[辞書]
マップ構造は、オブジェクトに比べて相当する値値を提供し、彼のキーは、任意のタイプとすることができます
// 通过new创建,参数是一个数组,数组里的值必须都是两个长度的数组
const map = new Map([
['name', '张三'],
['title', 'Author']
]);
// map的长度属性
map.size // 2
// 添加某个值,返回set本身,所以可以无限add()
map.set(key, value)
// 返回一个布尔值,表示该值是否为Set的成员
set.has(key)
//
map.get(key)
// 删除某个值,返回一个布尔值,表示删除是否成功
map.delete(key)
// 清除所有成员,没有返回值
map.clear()
// Map的遍历,map.keys(),map.values(),map.entries()
// 具体查看《遍历总结》
// Map转数组,其实map挺好用的,没必要转,除非是要传给后端
[...map]
// 还有一个WeakMap,不重要
// 只接受对象作为键名(null除外),不接受其他类型的值作为键名
const wm = new WeakMap();
==実際には、設定や地図は配列やオブジェクトがよく使われてきたが、また互換性があるため、また、非常にまれですが、また、フォーマットやターンを回すために==
リフレクト
単に完璧ですES6は、プロキシデータ操作で、新しいAPIを操作するためにオブジェクトである反映
Reflect.get(target, name, receiver)
Reflect.set(target,name,value,receiver)
Reflect.apply(target,thisArg,args)
Reflect.construct(target,args[, newTarget])
Reflect.defineProperty(target,name,desc)
Reflect.deleteProperty(target,name)
Reflect.has(target,name)
Reflect.ownKeys(target)
Reflect.preventExtensions(target)
Reflect.isExtensible(target)
Reflect.getOwnPropertyDescriptor(target, name)
Reflect.getPrototypeOf(target)
Reflect.setPrototypeOf(target, prototype)
プロキシオブザーバー
これは、一般的に未満である、とアーキテクチャレベルAPIに属し、Vue3.0はObject.defineProperty、この場所のように、インフラとしてこれを使用することで、「VUE設計原理、」言いました
// 贴个基础代码
var obj = new Proxy({}, {
get: function (target, key, receiver) {
console.log(`getting ${key}!`);
return Reflect.get(target, key, receiver);
},
set: function (target, key, value, receiver) {
console.log(`setting ${key}!`);
return Reflect.set(target, key, value, receiver);
}
});
約束
ビュー「約束の記事」
約束は、それが同期されている場合は、非同期関数で満たされる必要があるが、BUGが生成されます
// 贴个基础代码
new Promise(function(resolve, reject) {
if (/* 异步操作成功 */){
resolve(value);
} else {
reject(error);
}
}).then((value)=>{ ... },(error)=>{ ... })
非同期
ビュー「約束の記事」
のawait約束の背後にフォローは、それが同期されている場合は、非同期関数であるが、BUGが生成されます
// 贴个基础代码
async function main() {
try {
const val1 = await firstStep();
const val2 = await secondStep(val1);
const val3 = await thirdStep(val1, val2);
console.log('Final: ', val3);
}
catch (err) {
console.error(err);
}
}
クラス
ビュー「クラス」の章の
クラスは、新しいタイプのコンストラクタです
// 贴个基础代码
class A {
constructor(name) {
// 静态属性/方法
this.name = name;
}
// 相当于原型方法,class不支持原型属性
print() {
console.log(this.name);
}
// 带有static是私有方法/属性,通过A.myMethod()执行
static myMethod() {
console.log('static');
}
}
class B extends A {
constructor(name,age) {
//继承的
super();
this.name = name;
this.age= age;
}
m() {
console.log(this.age);
}
}
let b = new B("pdt",18);
b.m() // 18
b.print() // "pdt"
モジュール
ビュー「モジュラー」の章
新しいAPIのjsファイルを導入しますが、サポートされていません、でもサポートしていませんでしたブラウザがサポートしてnodejs
// 开放多个,只能全是export,不能有export default
// fs.js
export function A(){ ... }
export B = { ... }
export C = []
export D = "D"
// 引入并且解构赋值
import { A, B, C, D } from 'fs';
// 只能出现一个export default,并且不能有其他export
// default就不需要名字了
// fs.js
export default function(){ ... }
// 或者对象,其他格式都行
export default {}
// 引入并且解构赋值
import fs from 'fs';
上記共通に加え
ならびにシンボル、デコレータデコレータ[]
- メソッドのデコレータ関数デコレータ
- プロパティデコレータおなじみのデコレータ
- クラスデコレータークラスデコレータ
- パラメータパラメータデコレーターデコレータ
将来のデコレータが新たな枠組みになるだろう、それは、このようにして製造されSpring
たフレーム
いくつか言っていない
、彼はもはや鶏料理を征服しようとしているフロントエンドJQされ、その結果、これらのAPI JSのは、遊びやフレームワークの多くを生産する難しさのアップグレード、より多くの彼は、APIのロットから、これらの高い模倣を学ぶために必要以上のもの言語、特にJavaの
オペレータを拡大する例イテレータ歩行器、セット、地図、のawaitネイティブがyeild、これがあるだけでなく、クラス、インポートするJavaのモデルであり、デコレーターがなど、ストリームの流れのJavaとNodeJsを注釈されています待機