十大网页游戏推荐bt777游戏undefined(Javascript:ES6-ES11(2))

迭代器

为不同数据结构提供统一访问机制的接口。只要部署了inerator接口,任何数据结构都可以完成遍历操作。

工作原理

a)创建一个指针对象,指向当前数据结构的起始位置。

b)第一次调用对象的next方法时,指针自动指向数据结构的第一个成员。

c)接下来,重复调用next方法,指针向后移动,直到指向最后一个成员。

d)对下一个方法的每次调用都返回一个包含value和done属性的对象。

声明一个数组

const Xi you =[& # 39;唐僧& # 39;,'启蒙空& # 39;,'猪八戒& # 39;,'沙僧& # 39;];

使用 for...of 遍历数组

for(西游的let v){ console . log(v); }

使用 for...in遍历数组

for(西游中的var I){ console . log(I) }

使用 symbol.iterator 创建对象

let iterator = Xi you[symbol . iterator]();

调用对象的next方法

console . log(iterator . next()); console . log(iterator . next()); console . log(iterator . next()); console . log(iterator . next()); console . log(iterator . next());

自定义遍历数据

//声明一个对象 const banji = { name:& # 34;终极类& # 34;, stus:[ & # 39;小明& # 39;, & # 39;萧宁& # 39;, & # 39;小天& # 39;, & # 39;骑士& # 39; ], /添加一个迭代器,返回对象 [symbol。迭代器](){ //索引变量,做出判断,决定返回结果 让index = 0; //保存这个 let _ this = this; //创建指针对象 return { /next方法 next:function(){ if(index

//定义函数 function * gen(){ console . log(111); yield & # 39;一个人没有耳朵& # 39;; console . log(111); yield & # 39;一个没有尾巴& # 39;; console . log(111); return & # 39;奇怪& # 39;; console . log(111); } //调用函数 let iterator = gen(); //执行函数 console . log(iterator . next()); console . log(iterator . next()); console . log(iterator . next()); console . log(iterator . next());

//遍历 for(let v of gen()){ console . log(v); }

生成器函数参数yield 关键字
  • 生成器的函数执行被挂起,yield关键字后的表达式的值返回给生成器的调用方。
  • 返回一个具有两个属性(value,done)的iteratorreault (iterator)对象,这两个属性代表返回值以及是否完成。
  • 与发电机一起工作,如next。
  • function * gen(arg){ console . log(arg); 设一=产量111; console.log(一个);//BBB 设二=产量222; console.log(两个);//CCC 让三=收益率333; console.log(三个);//DDD } //获取迭代器对象 let iterator = gen(& # 39;AAA & # 39); console . log(iterator . next()); //next方法可以传入实际参数 // BBB值,yield后返回222 console . log(iterator . next(& # 39;BBB & # 39)); // CCC值传入,yield后返回333 console . log(iterator . next(& # 39;CCC & # 39)); // DDD值传入且未定义 console . log(iterator . next(& # 39;DDD & # 39;));

    实例

    1s背部控制台输出111 2s背部输出222 3s背部输出333

    function one(){ setTimeout(()= & gt;{ console . log(111); iterator . next(); },1000) } function two(){ setTimeout(()= & gt;{ console . log(222); iterator . next(); },2000) } 函数三(){ setTimeout(()= & gt;{ console . log(333); iterator . next(); },3000) } function * gen(){ yield one(); 产生两个(); 产量三(); } //调用生成器函数 let iterator = gen(); iterator . next();Promise实例化Promise对象const p = new Promise(function(resolve,reject){ settimeout(function(){ //成功 数据库中的用户数据& # 39;; resolve(数据); //失败 let err = & # 39;数据读取失败& # 39;; 拒绝(err); },1000); }); //调用promise对象的then方法[/h //解析成功 p . then(function(value){ console . log(value); //拒绝失败 },function(reason){ console . error(reason); })Promise使用node读取文件

  • fs模块简介
  • const fs = require(& # 39;fs & # 39);

  • 调用方法来读取文件(正常读取)
  • fs . readfile(& # 39;。/资源/用于学习。md & # 39,(err,data)= & gt;arrow函数使用fs模块下的readFile函数回调 //如果失败,则抛出错误 if(err)throw err; //如果没有错误,输出内容 console . log(data . tostring()); });承诺包裹

    //实例化Promise对象 const p = new Promise(function(resolve,reject){ fs . readfile(& # 34;。/资源/用于学习。mda & # 34,(err,data)= & gt;{ //判断是否失败 if(err)reject(err); //如果成功 解析(数据); }); }); p . then(function(value){ console . log(value . tostring()); },function(reason){ console . log(& # 34;阅读失败!!"); });Promise封装Ajax请求//接口地址:https://API.apiopen.top/getjoke const p = new Promise((resolve,reject) = >: { //1。create object const xhr = newxmlhttprequest(); //2。初始化 xhr . open(& # 34;获取& # 34;, & # 34;https://api.apiopen.top/getJ"); //3。send xhr . send(); /4。绑定事件并处理响应结果 xhr。onreadystatechange = function(){ /Judge If(xhr。ready state = = 4){[/h = 200 & & xhr . status & lt;00){ //表示成功 解析(xhr . response); } else { //如果失败 reject(xhr . status); } } } }] /指定回调 p . then(function(value){ console . log(value) },function(reason){ console . error(reason); });then方法调用then方法then方法的返回结果是Promise对象。

    对象的状态由回调函数的执行结果决定。

  • 如果回调函数返回的结果是非承诺类型的属性,则状态为成功,返回值为对象的成功值。

  • 是许诺对象。


  • 抛出一个错误

  • 连锁电话
  • p . then(value = & gt;{ })。然后(value = & gt{ });读取多个文件介绍fs模块

    const fs = require(& # 34;fs & # 34);

    正常方法

    fs . readfile(& # 39;。/资源/用于学习。md & # 39,(err,data1)= & gt;{ fs . readfile(& # 39;。/资源/插秧诗。md & # 39,(err,data 2)= & gt;{ fs . readfile(& # 39;。/资源/阅读。md & # 39,(err,data 3)= & gt;{ let result = data1+& # 39;rn & # 39+data 2+& # 39;rn & # 39+data 3; console.log(结果); }); }); });履行诺言

    const p = new Promise((resolve,reject)= & gt;{ fs . readfile(& # 34;。/资源/用于学习。md & # 34,(err,data)= & gt;{ resolve(数据); }); }); p . then(value = & gt;{ 返回新的承诺((resolve,reject)= & gt;{ fs . readfile(& # 34;。/资源/插秧诗。md & # 34,(err,data)= & gt;{ resolve([value,data]); }); }); })。然后(value = & gt{ 返回新的承诺((resolve,reject)= & gt;{ fs . readfile(& # 34;。/资源/阅读。md & # 34,(err,data)= & gt;{ //Press value . push(data); resolve(值); }); }) })。然后(value = & gt{ console . log(value . join(& # 39;rn & # 39)); });

    set (集合)

    新的数据结构类似于数组,具有唯一的成员值,并实现了迭代器接口,可以通过[扩展操作符]和[for...关于...].

    属性和方法

    1) size返回集合中元素的数量。

    2) add添加新元素以返回当前集合。

    3) delete删除元素并返回一个布尔值。

    4) has检测集合中是否有元素,并返回一个布尔值。

    5) clear 空 set并返回未定义。

    声明一个 set

    设s =新集合();设s2 =新集合([& # 39;大不了& # 39;,'小事& # 39;,'好事& # 39;,'坏事& # 39;,'小事& # 39;]);

    输出

  • 元素数量
  • console . log(S2 . size);

  • 添加新元素
  • s2 .添加(& # 39;喜事& # 39;);

  • 删除元素
  • s2 .删除(& # 39;坏事& # 39;);

  • 考试
  • console . log(S2 . has(& # 39;担心& # 39;));

  • Clear 空
  • S2 . clear();console . log(S2);

  • 横贯
  • for(let v of S2){ console . log(v);}

    实践

    设arr = [1,2,3,4,5,4,3,2,1];

  • 阵列重复数据消除
  • 假设结果= [...新集(arr)];console.log(结果);

  • 交集
  • //General let arr2 = [4,5,6,5,6]; let结果= [...新设置(arr)]。过滤器(item = & gt{ 设s2 =新集合(arr 2);//4 5 6 if(S2 . has(item)){ 返回true }else{ 返回false } }); //简化 Let result = [...新设置(arr)]。过滤器(item = >:新集合(arr2)。has(项)); console.log(结果);合计总数

    let union = [...新集合([...啊,...arr 2])];console . log(union);

  • 差集
  • let diff = [...新设置(arr)]。过滤器(item = & gt!(新设置(arr2)。has(item)));console . log(diff);


    Map

    与对象类似,它也是键值对的集合。

    但是“key”的范围并不局限于字符串,各种类型的值(包括对象)都可以作为键。Map还实现了迭代器接口,所以可以使用“扩展运算符”和“for … of …”进行遍历。

    属性和方法:

    1) size返回地图元素的数量

    2) set添加一个新元素来返回当前地图。

    3) get返回键名对象的键值

    4) has检测映射中是否有元素,并返回一个布尔值。

    5) clear 空 set并返回未定义。

    声明 Map

    设m = new Map();

    添加元素

    方法1:

    m . set(& # 39;姓名& # 39;,'尚硅谷& # 39;);m . set(& # 39;改变& # 39;,function(){ console . log(& # 34;我们可以改变你!!");});

    方法二:

    let key = { school:& # 39;阿特吉古& # 39;};m.set(key,[& # 39;北京& # 39;,'上海& # 39;,'深圳& # 39;]);

    数量

    console . log(m . size);

    删除

    m . delete(& # 39;姓名& # 39;);

    获取

    console . log(m . get(& # 39;改变& # 39;));console . log(m . get(key));

    清空

    m . clear();

    遍历

    for(let v of m){ console . log(v);//v=[ key: value]}

    class

    使用class关键字,您可以定义类。

    ES5 中 类

    //手机 功能手机(品牌,价格){ 这个。品牌=品牌; this . price = price; } /Add方法 phone . prototype . call = function(){ console . log(& # 34;我可以打电话!!"); } /实例化对象 让华为=新手机(& # 39;华为& # 39;, 5999); Huawei . call(); console.log(华为);类定义构造函数不能修改。当使用新的+类名时,它会自动执行。

    //class class shouji { //构造函数名不能修改 构造函数(brand,price) { this。品牌=品牌; this . price = price; } //方法必须使用此语法,不能使用完整形式的ES5 object call(){ console . log(& # 34;我可以打电话!!"); } } 让onePlus =新姬寿(& # 34;1+", 1999); console . log(onePlus);1)类声明类1)类声明类

    2)构造函数定义构造函数初始化。

    3)扩展继承父类。

    4)超级调用父构造方法。

    5)静态定义静态方法和属性。

    6)父方法可以被覆盖。

    静态成员

    使用static声明的属性实例化属于类但不属于类的对象。

    class { //静态属性 静态名称= & # 39;手机& # 39;; static change(){ console . log(& # 34;我可以改变世界& # 34;); } } 让诺基亚=新手机(); console . log(Nokia . name); console . log(phone . name);

    继承ES5

    焦点

    Phone.call(这个,品牌,价格);

    SmartPhone.prototype =新手机;smart phone . prototype . constructor =智能手机;

    //手机 功能手机(品牌,价格){ 这个。品牌=品牌; this . price = price; } phone . prototype . call = function(){ console . log(& # 34;我可以打电话& # 34;); } /smart phone 功能智能手机(品牌,价格,颜色,尺寸){ phone.call(这个,品牌,价格); this . color = color; this . size = size; } /设置子构造函数的原型 smart phone . prototype = new phone; smart phone . prototype . constructor = smart phone; //声明子类 smart phone . prototype . photo = function(){ console . log(& # 34;我可以拍照& # 34;) } smart phone . prototype . play game = function(){ console . log(& # 34;我可以玩游戏& # 34;); } const chuizi =新智能手机(& # 39;哈默& # 39;, 2499, '黑& # 39;, '5.5英寸& # 39;); console.log(垂子); 类继承扩展关键字。

    焦点

    超级(品牌、价格);

    class { //构造方法 构造器(品牌,价格){ this。品牌=品牌; this . price = price; } /父类的成员属性 call(){ console . log(& # 34;我可以打电话!!"); } } 类智能手机扩展phone { //构造方法 构造器(品牌,价格,颜色,尺寸){ super(品牌,价格// Phone.call(this,品牌,价格) this . color = color; this . size = size; } photo(){ console . log(& # 34;拍照& # 34;); } play game(){ console . log(& # 34;玩游戏& # 34;); } //子类对父类 call(){ console . log(& # 39;我可以打视频电话& # 39;); } } const小米=新智能手机(& # 39;小米& # 39;, 799, '黑& # 39;, '4.7英寸& # 39;); // console.log(小米); Xiaomi . call(); Xiaomi . photo(); 小米. play game();set get// get和set class phone { getprice(){ console . log(& # 34;价格已读& # 34;); return & # 39;我爱你& # 39;; } set price(new val){ console . log(& # 39;价格已经修改了& # 39;); } } /实例化对象 让s = new Phone(); //console . log(s . price); s . price = & # 39;免费& # 39;;

    十大网页游戏

    数值扩展
  • 号码。EPSILON是JavaScript表示的最小精度,EPSILON属性的值接近于2.2361816 e-16.200000000000005
  • //判断两个数是否相等 函数equal (a,b) { if (math。ABS (a-b)<数字。EPSILON){ 返回true } else { 返回false } } console . log(0.1+0.2 = = = 0.3);console.log(等于(0.1 + 0.2,0.3))

  • 二进制和八进制字母b = 0b1010设o = 0o777设d = 100设x = 0xffconsole . log(x);
  • 号码。Infinite检测一个数值是否是有限数控制台。日志(编号。无穷大(100));console . log(number . is finite(100/0));console . log(number . is finite(Infinity));
  • Number.isNaN检测一个数值是否为nanconsole . log(number . isnan(123));
  • 号码。ParseintNumber。将浮点字符串解析到整数控制台。日志(编号。parse int(& # 39;5211314爱& # 39;));console . log(number . parse float(& # 39;3.1415926魔术& # 39;));
  • Number.isInteger确定一个数字是否为整数console . log(number . is integer(5));console . log(number . is integer(2.5));
  • Math.trunc从console.log中删除数字的小数部分(math . trunc(3.5));
  • Math.sign判断一个数是正数还是负数还是零console . log(math . sign(100));console.log(Math.sign(0))。console . log(math . sign(-20000));
  • 对象方法扩展
  • Object .是判断这两个值是否完全相等。console.log(Object.is(120,120));// === console.log(Object.is(NaN,NaN));//= = = console . log(NaN = = = NaN);// ===
  • 合并对象。分配对象
  • const config 1 = { host:& # 39;本地主机& # 39;, 端口:3306, 名称:& # 39;根& # 39;, 通行证:& # 39;根& # 39;, 测试:& # 39;测试& # 39; }; const config 2 = { host:& # 39;http://at guigu . com & # 39;, 端口:33060, 名称:& # 39;atguigu.com & # 39, 通行证:& # 39;我爱你& # 39;, test 2:& # 39;测试2 & # 39; } console . log(object . assign(config 1,config 2));

  • Object.setPrototypeOf设置原型对象。
  • object . getprototypeof const school = { name:& # 39;尚硅谷& # 39; } const cities = { Xiaoqu:[& # 39;北京& # 39;, '上海& # 39;, '深圳& # 39;] } object . setprototypeof(学校,城市); console . log(object . getprototypeof(school)); console.log(学校);

    模块化

    一个大的程序文件,分割成许多小文件,然后把小记录组在一起。

    模块化的好处

    模块化的优势如下:

    1)防止命名冲突

    2)代码重用

    3)可维护性高

    模块化规格产品

    ES6之前的模块化规范包括:

    1)CommonJS = & gt;NodeJS、Browserify

    2)AMD = & gt;模块化开发

    3)CMD = & gt;框架

    ES6 模块化语法

    该功能模块主要由两个命令组成:导出和导入。

    export命令用于指定模块的外部接口。

    //单独曝光m1 . js 导出let school = & # 39尚硅谷& # 39;; 导出函数teach(){ console . log(& # 34;我们可以教你开发技能& # 34;); }/m2 . js的统一曝光 let school = & # 39;尚硅谷& # 39;; function find job(){ console . log(& # 34;我们可以帮你找工作!!"); } 导出{school,find job };//默认曝光m3.js 导出默认{ 学校:& # 39;阿特吉古& # 39;, change:function(){ console . log(& # 34;我们可以改变你!!"); } }

    导入命令用于输入其他模块提供的功能。

  • 的通用导入方法
  • 将*作为m1从& # 34;。/src/js/m1 . js & # 34;;


    将*作为m2从& # 34;。/src/js/m2 . js & # 34;;

    将*作为m3从& # 34;。/src/js/m3 . js & # 34;;

  • 将js文件的内容赋给前面的变量。
  • console . log(m1);

    console . log(m2);

    console . log(m3);

  • 解构赋值形式
  • 从& # 34;导入{学校,教师}。/src/js/m1 . js & # 34;;

    从& # 34;。/src/js/m2 . js & # 34;;

    从& # 34;导入{默认为m3};。/src/js/m3 . js & # 34;;

  • 为js文件中的内容分配相应的值
  • 违约风险敞口的简单形式
  • 从& # 34;导入m3;。/src/js/m3 . js & # 34;;

    js引入文件模块

    介绍jquery文件模块

    const $ = require(& # 34;jquery & # 34);

    等同于

    从& # 39;jquery & # 39;

    使用

    $('正文& # 39;).CSS(& # 39;背景& # 39;,'粉红& # 39;);

    babel对ES6模块化代码转换

    步骤

  • 安装工具NPM ibabel-clibabel-预置-环境浏览器if(网络包)-d
  • -D(发展依赖)
  • 编译npx babel src/js-ddist/js-presets = babel-preset-env
  • 打包npx浏览器ifydist/js/app . js-odist/bundle . js
  • ECMASript 7新特性

    array . prototype . includes

    Includes方法用于检测数组是否包含元素并返回布尔值。

    const明珠=[& # 39;西游记& # 39;,'红楼梦& # 39;,'三国演义& # 39;,'水浒传& # 39;];

    法官

    console.log(明珠. includes(& # 39;西游记& # 39;));

    指数运算符

    ES7引入了指数运算符“* *”来实现幂运算,其功能与Math.pow相同

    console . log(2 * * 10);

    等同于

    console.log(Math.pow(2,10));

    您可以还会对下面的文章感兴趣

    使用微信扫描二维码后

    点击右上角发送给好友