第三阶段 企业级开发

第一章 环境搭建

一、Node介绍

    Node也叫NodeJS,Node.js,由Ryan-Dahl于2009年5月在GitHub发布了第一版。Node是一个JavaScript运行环境(runtime)。实际上他是对Google V8引擎进行了封装。官网介绍:一个搭建在ChromJavaScript运行时上的平台,用于构建高速、可伸缩的网络程序。Node采用的事件驱动、非阻塞I/O模型,使它既轻量又高效,并成为构建运行在分布式设备上的数据密集型实时程序的完美选择。目前Node在实际开发中主要作为开发基础环境存在,用于进行模块管理,编译es6代码,编译sass文件,运行各种Js脚本。

二、Node安装

1、下载

进入官网http://nodejs.org/en/,选取合适的版本进行下载

2、安装

Linux:先解将安装包压,然后 进行环境变量的配置即可。
windows:直接点击安装即可。

三、Node使用

1、基本使用

1)执行js脚本

 $ node demo.js

2)REPL环境

在命令行键入node命令,后面没有文件名,就进入一个Node.js的REPL环境(Read-eval-print loop,"读取-求值-输出循环"),可以直接运行各种JavaScript命令。$ node> 1+12>

四、模块化结构

1)模块化

  Node.js采用模块化结构,按照CommonJS规范定义和使用模块。在Node中,以模块为单位划分所有功能,并且提供一个完整的模块加载机制,使得我们可以将应用程序划分为各个不同的部分,并且对这些部分进行很好的协同管理。通过将各种可重用的代码编写在各种模块中的方法,我们可以大大减少应用程序的代码量,提高应用程序开发效率以及应用程序的可读性。通过模块加载机制,我们也可以将各种第三方模块引入到我们的应用程序中。

2)CommonJS

   JavaScript是一种功能强大的面向对象语言,具有一些最快速的动态语言解释器。官方JavaScript规范定义了一些用于构建基于浏览器应用程序的对象的API。但是,规范并没有定义一个用于对构建更广泛的应用程序的标准库。CommonJS API将通过定义处理许多常见应用程序需求的API来填补这一空白,最终提供与Python、Ruby和Java一样丰富的标准库。其意图是应用程序开发人员能够使用CommonJS API编写应用程序,然后在不同的JavaScript解释器和主机环境中运行该程序。在兼容CommonJS的系统中,可以使用JavaScript程序开发:服务器端JavaScript应用程序命令行工具图形界面应用程序混合应用程序(如Titanium或Adobe AIR)Node应用由模块组成,采用CommonJS模块规范。

3)模块作用域

    每一个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。私有属性://example.jsvar x = 5;var addX = function(value){return value+x;};上面代码中,变量x和函数addX,是当前文件example.js私有的,其他文件不可见。全局属性:如果想在多个文件分享变量,必须定义为global对象的属性。global.warning = true;

4)模块交互

     CommonJS规范规定,每个模块内部,module变量代表当前模块。这个变量是一个对象,它的export属性(即module.exports)是对外的接口。加载某个模块,其实是加载该模块的module.exports属性。定义模块:var x = 5;var addX = function(value){return value+x;};module.export.x = x;module.export.addX = addX;模块加载:require方法用于加载模块。var example = require('./example.js');console.log(example.x); //5console.log(example.addX(1)); //6

5)模块对象

   Node内部提供一个Module构建函数。所有模块都是Module的实例。每个模块内部都有一个module对象,代表当前模块。它有以下属性:module.id 模块的识别符,通常是带有绝对路径的模块文件名。module.filename 模块的文件名,带有绝对路径。module.loaded 返回一个布尔值,表示模块是否已经加载完成。module.parent 返回一个对象,表示调用该模块的模块。module.children 返回一个数组,表示该模块要用到的其他模块。module.exports 表示模块对外输出的值。

6)exports变量

   为了方便,Node为每个模块提供一个exports变量,指向module.exports。这等同于在每个模块头部,有这样一行命令:var export = module.exports;

五、核心模块

1)path模块

  path模块提供了一些工具函数,用于处理文件与目录的路径,使用如下方法引用: var path = require('path');path.basename() 该方法返回一个参数路径的最后一个部分path.dirname() 该方法返回一个path的目录名path.extname() 该方法返回path的扩展名,即从path的最后一部分中的最后一个。(句号)字符到字符串结束。path.isAbsolute() 该方法判定path是否为一个绝对路径。path.join() 该方法使用平台特定的分隔符把全部给定的path片段连接到一起,并规范化生成的路径。path.nomalize() 该方法会规范化给定的path,并解析'..'和'.'片段。path.delimiter  该属性提供平台特定的路径分隔符。另外:__filename:指向当前运行的脚本文件名__dirname:指向当前运行的脚本所在目录

2)querystring模块

   querystring模块提供了一些实用函数,用于解析与格式化URL查询字符串。使用如下方法引用:var querystring = require('querystring');querystring.stringify(obj[,sep[,eq]])  将对象转换为查询字符串obj 要序列化成URL查询字符串的对象。sep 用于界定查询字符串中的键值对的子字符串。默认为'&'。eq 用于界定查询字符串中的键与值的子字符串。默认为'='。querystring.parse(str[,sep[,eq]])  将查询字符串转换为对象。      

3)url模块

   提供了一些实用函数,用于URL处理与解析。可以通过以下方式使用:var url = require('url');url.parse() 将一个url地址转换为一个对象url.resolve() 该方法会以一种Web浏览器解析超链接的方式把一个目标URL解析成相对于一个基础URLurl.resolve('/one/two/three','four'); // '/one/two/four'url.resolve('http://example.com/','/one'); //'http://example.com/one'url.resolve('http://example.com/one','/two'); //'http://example.com/two'(替换最后一个)

六、npm

1)介绍

npm是Js开发者能够更方便的分享和服用以及更新代码,被复用的代码被称为包或者模块,一个模块中包含了一到多个js文件。
在模块中一般还会包含一个package.json的文件,该文件中包含了该模块的配置信息。一个完整的项目需要依赖多个模块,一个完整的npm包含三部分:npm网站---用于预览npm管理的包注册机制---用于上传包,使用数据库来维护包与上传者的信息客户端---用于安装包

2)创建一个模块

    Node.js的模块是一种能够被发布到npm上的包。创建模块从创建package.json文件开始,package.json是模块的配置文件。可以使用npm init命令来初始化package.json文件。$ npm initname 模块名称           version  模块版本description 描述信息    main   指定模块入口文件Dependencies 依赖关系   engines  指定node版本devDependencies 环境依赖或测试依赖optionalDependencies 可选择依赖script 定义当前模块脚本,使用npm run来运行所定义的脚本  使用-y参数创建默认package.json文件。$ npm init -y  

3)安装npm

  npm会随着Node一起被安装到本地。可以使用以下命令来更新npm:$ npm install npm@latest -g安装淘宝镜像:由于默认npm的仓库在国外,下载起来很慢,可以使用淘宝镜像来加快下载速度。$ npm install -g cnpm --register=https://register.npm.taobao.orgRegistry注册中心:官方:https://registry.npmjs.org淘宝:https://registry.npm.taobao.org私有:http://localIP:port  修改npm权限:执行npm的时候有时会遇到权限不足的情况,可以通过以下方式进行修正:$ npm config get prefix$ sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}

4)模块安装

   如果想要仅在当前模块中使用某个第三方模块,就可以使用npm install的默认安装,默认安装即是本地安装;如果想要在命令行中使用模块,就需要进行全局安装。安装时,如果当前目录中没有node_modules目录,npm就会创建一个该目录。$ npm install <package_name>$ npm install 安装所有项目依赖的模块,依赖的模块定义在package.json中$ npm install安装模块时,默认会将所安装的模块写入到package.json中的dependencies属性,通过添加一些参数改变这个特性。 -S,--save-D,--save-dev:Package will appear in your devDenpendencies.-O,--save-optional:Package will appear in your optionalDependencies.--no--save:Prevents saving to dependencies.-E,--save-exact:Saved dependencies will be configured with an exact version rather than using npm's default semver range operator.   

5)模块更新

   全局更新以来的模块。$ npm update <modules_name>

6)模块删除

    从node_modules中删除不需要的模块。$ npm uninstall -g <package_name>不仅删除node_modules中的依赖,还需要删除package.json中的信息,可以使用--save参数。$ npm uninstal --save -g <package_name>

7)搭建本地npm仓库(sinopia)

   安装  $ npm install -g sinopia配置  $ npm set registry http://localhost:4873/添加用户  $ npm adduser --registry http://localhost:4873/发布模块  $ npm publish <module_name>启动  $ sinopia

七、Babel

1、命令行转码babel-cli

全局环境下进行Babel转码。这意味着,如果项目要运行,全局环境必须有Babel,也就是说项目产生了对环境的依赖。1)安装$ npm install --global babel-cli2)安装预设并且添加配置文件配置.babelrc 在当前项目的根目录下创建该文件。$ npm install --save-dev babel-preset-es2015{"presets":["es2015"]}3)使用转码结果输出到标准输出$ babel example.js转码结果写入一个文件,--out-file或-o参数指定输出文件$ babel example.js --out-file compiled.js整个目录转码--out-dir或-d参数指定输出目录$ babel src --out-dir lib   

2、配置文件

Babel的配置文件是.babelrc,存放在项目的根目录下。
使用Babel的第一步,就是配置这个文件。该文件用来设置转码规则和插件,基本格式如下:
{"presets":[],"plugins":[]}1)presets字段设定转码规则,官方提供以下的规则集,你可以根据需要安装。ES2015转码规则$ npm install --save-dev babel-preset-es2015  =>es2015最新转码规则$ npm install --save-dev babel-preset-latest  =>latest不会过时的转码规则$ npm install --save-dev babel-preset-nev  =>env2)然后,将这些规则加入.babelrc。{"presets":["es2015"],"plugins":[],"ignore":[]}

3、将babel-cli安装到项目中

1)安装babel-cli及预设$ npm install --save-dev babel-cli$ npm install --save-dev babel-preset-env2)配置文件.babelrc$ vim .babelrc{"presets":["env"]}    3)在package.json中添加脚本{//..."script":{"build":"babel src -d lib"}}          4)运行脚本,执行转码操作$ npm run build

八、babel-polyfill

 Babel默认只转换新的JavaScript句法(syntax),而不转换新的API,比如Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise等全局对象,以及一些定义在全局对象上的方法(Object.assign)都不会转码。举例来说,ES6在Array对象上新增了Array.from方法。Babel就不会转码这个方法。如果想让这个方法运行,必须使用babel-polyfill,为当前环境提供一个垫片。

1、安装

  $ npm install -save babel-polyfill

2、在js文件中引用并且使用

  import "babel-polyfill";//或者require("babel-polyfill");

第二章 基础知识

一、let命令

1.基本用法

ES6新增了let命令,用来声明变量。用法类似于var,但是也存在新特性:1)let所声明的变量,只在let命令所在的代码块有效。适用于for循环。{let a = 10;var b = 1;}//a  a is not defined//b  12)不存在变量提升。console.log{bar};let bar = 2;//报错ReferenceError:bar is not defined3)暂时性死区。在代码块内,使用let命令变量之前,该变量都是不可用的。var tmp = 123;if(true){tmp = 'abc'; //ReferenceErrorlet tmp;}     4)不允许重复声明。function(){let a =10;let a = 1;} //报错

2.块级作用域

 let实际上为JavaScript新增了块级作用域。外层作用域无法读取内层作用域的变量,内层作用域可以定义外层作用域的同名变量。let foo = 1;{let foo = 2; //定义同名变量let bar = "one";}      console.log{foo}; //1console.log(bar); //报错块级作用域的出现,实际上使得广泛应用的立即执行函数表达式(IIFE)不再必要了。    

二、const命令

1. 基本用法

const声明一个只读的变量。一旦声明,常量的值就不能改变。contst PI = 3.1415; PI = 3; //TypeError:Assignment to constant variable.

1)const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值。

 const foo; //SyntaxErroe:Missing initializer in const declaration

2)块级作用域

  只在声明所在的块级作用域内有效。

3)暂时性死区

  在代码块内,使用let命令声明变量之前,该变量是不可用。if(true){console.log(MAX); //ReferenceError const MAX = 5;}

4)不允许重复声明

   var message = 'Hello!';let age = 25;//以下两行都会报错const message = 'Goodbye!';const age = 30;

三、解构赋值

1.解构

 ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructing)。例如:let [a,b,c] = [1,2,3];本质上,这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。如果结构不成功,变量的值就等于undefined。另一种情况是不完全解构,即等号左边的模式只匹配一部分的等号右边的数组。这种情况下,解构依然可以成功。

2.数组的解构赋值

let [a,b,c] = [1,2,3];1)不完全解构:let [a,[b],d] = [1,[2,3],4]; //a=1;b=2;d=42)集合解构:let[head,...tail] = [1,2,3,4]; //head=1;tail=[2,3,4]3)默认值(当匹配值严格等于undefined时,默认值生效):let [x,y='b'] = ['a']; //x = 'a',y = 'b'4)默认值也可以为函数:function f(){ console.log('aaa'); }let [x=f()] = [1];

3.对象的解构赋值

 1)对象的属性没有次序,变量必须与属性同名,才能取到正确的值let {foo,bar} = {foo:'aaa',bar:'bbb'}; //foo='aaa';bar='bbb'2)如果变量名与属性名不一致,必须写成下面这样。var {foo:baz} = {foo:'aaa',bar:'bbb'}; // baz='aaa'    3)这实际上说明,对象的解构赋值是下面形式的简写。let {foo:foo,bar:bar} = {foo:'aaa',bar:'bbb'};4)嵌套结构let obj = {p:['Hello',{y:'World'}]};let {p:[x,{y}]} = obj;  // x='Hello';y='World'  5)默认值(默认值生效的条件是,对象的属性值严格等于undefined)var {x:y=3} = {}; // y=3

4.字符串的解构赋值

 1)解构时,字符串被转换成了一个类似数组的对象。const [a,b,c,d,e] = 'hello'; //a=h;b=e;c=l;d=l;e=o2)也可以对数组的属性解构let {length:len} = 'hello'; // len=5 

5.数值和布尔值的解构赋值

  解构时,如果等号右边是数值和布尔值,则会先转为对象。let {toString:s} = 123; // s===Number.prototype.toString truelet {toString:s} = true; // s===Boolean.prototype.toString true

6.函数参数的解构赋值

 1)基本语法function add([x,y]){return x+y;}add([1,2]);2)默认值function move({x=0,y=0}){return [x,y];}  move({x:3,y:8}); //[3,8]move({x:3}); //[3,0]move({}); //[0,0]move(); //[0,0]

7.常见用途

 1)交换变量的值let x = 1; let y = 2; [x,y] = [y,x];2)从函数返回多个值function example(){return [1,2,3];}let [a,b,c] = example();   3)函数参数的定义function f([x,y,z]){...}f([1,2,3]);4)提取JSON数据let jsonData = {id:42,status:'OK',data:[867,5309]};let {id,status,data:number} = jsonData;   5)输入模块的指定方法const {SourceMapConsumer,SourceNode} = require("source-map");6)函数参数的默认值         jQuery.ajax = function(url,{async = true,cache = true,global = true,beforeSend = function(){},complete = function(){},//...more config}){//...do stuff};指定参数的默认值,就避免了在函数体内部再写var foo = config.foo||'default foo';这样的语句。7)遍历map结构var map = new Map();map.set('first','hello');map.set('second','world');for(let [key,value] of map){console.log(key + "is" + value);}

第三章 对象、函数、数组的扩展

学习目标:
1)属性简写方式
2)方法简写方式
3)Object方法的扩展
4)函数默认值
5)箭头函数
6)扩展运算符
7)Array.from()
8)Arra.of()
9)数组实例的find(),findIndex()
10)数组实例的fill()
11)数组实例的entries(),keys(),values()
12)数组实例的includes()

一、对象扩展

1.属性简写

ES6允许直接写入变量和函数,作为对象的属性和方法。这时,属性名为变量名,属性值为变量的值。var foo = 'bar';var baz = {foo};=>var baz = {foo:foo}; 

2.方法简写

   var o = {method(){return "hello!";}};=>var o = {method:function(){return "hello!";}};   

3.属性名表达式

 ES6允许字面量定义对象时,可以把表达式放在方括号内。let propKey = 'foo';let obj = {[propKey]:true,['a'+'bc']:123};

4.方法的name属性

 函数的name属性,返回函数名。const person = {sayName(){console.log('hello!');}};person.sayName.name; //"sayName" 

5.Object.is(value1,value2)

 同值相等,与===类似,不同之处在于:+0不等于-0;NaN等于自身Object.is('foo','foo'); //trueObject.is({},{}); //false            

二、函数的扩展

1.函数参数的默认值

 ES6允许为函数的参数设置默认值,即直接写在参数定义的后面。function log(x,y='World'){console.log(x,y);}通常情况下,定义了默认值的参数,应该是函数的尾参数。函数的length属性,将返回没有指定默认值的参数个数。

2.与解构赋值默认值结合使用

 参数默认值可以与解构赋值的默认值结合起来使用。function foo({x,y=5}){console.log(x,y);}foo({}); // undefined 5foo({x:1}); //1  5foo({x:1,y:2}); // 1 2

3.rest参数

 ES6引入rest参数(形式为"...变量名"),用于获取函数的多余参数,这样就不需要使用arguments对象了。rest参数搭配的变量是一个数组,该变量将多余的参数放入数组中。function add(...values){let sum = 0;for(var val of values){sum += val;}return sum;}add(2,3,5); //10

4.箭头函数

 ES6允许使用“箭头”(=>)定义函数1)基本用法:var f = v => v;等价于var f = function(v){return v;}如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分。如果箭头函数的代码块部分多于一条语句,就要使用大括号将他们括起来,并且使用return语句返回。2)this箭头函数里面没有自己的this,而是引用外层的this。//ES6function foo(){setTimeout(()=>{console.log('id:',this.id);},1000);}//ES5function foo(){var _this = this;setTimeout(function(){console.log('id:',_this.id);},1000);}不能作为构造函数,没有内部属性arguments。

5.扩展运算符

 扩展运算符(spread)是三个点(...)。它好比rest参数的逆运算,将一个数组转为用逗号分隔的参数序列。console.log(...[1,2,3]); // 1,2,31) 函数的调用function add(x,y){return x+y;}add(...[1,3]);Math.max(...[14,3,77]);2) 将字符串转换为数组[...'hello']   // ['h','e','l','l','o']  

三、数组的扩展

1. Array.from

用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iteratble)的对象(包括ES6新增的数据结构Set和Map)。let arrayLike = {'0':'a','1':'b','2':'c',length:3};//ES6的写法let arr2 = Array.from(arrayLike); //['a','b','c']只要是部署了Iterator接口的数据结构,Array.from都能将其转为数组。Array.from('hello');  //将字符串转换为数组['h','e','l','l','o'] 
let namesSet = new Set(['a','b']);
Array.from(namesSet);  //['a','b']

2. Array.of()

 用于将一组值转换为数组。这个发的主要目的是弥补数组构造函数Array()的不足。Array.of(3,18,8); //[3,18,8]

3.数组实例的find()和findIndex()

 find()方法用于找出第一个符合条件的数组成员。它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员。如果没有符合条件的成员,则返回undefined。find()方法的回调函数可以接受三个参数,依次为当前的值、当前的位置和原数组。[1,4,-5,10].find((n)=>n<0); //-5findIndex()方法与find()方法非常类似,更换第一个符合条件的数组成员的位置。如果所有成员都不符合条件,则返回-1.[1,5,10,15].findIndex(function(value,index,arr){return value > 9;}); // 2

4.数组实例的fill()

 fill()方法使用给定的值填充一个数组。['a','b','c'].fill(7); // [7,7,7]new Array(3).fill(7); //[7,7,7]

5.数组实例的entries(),keys()

  这两个方法用于遍历数组。它们都返回一个遍历器对象,可以用for...of循环进行遍历,唯一的区别是:keys()是对键名的遍历,entries()是对键值对的遍历。for(let index of ['a','b'].keys()){console.log(index);}for(let [index,elem] of ['a','b'].entries()){console.log(index,elem);}

6.数组实例的includes()

  该方法返回一个布尔值,表示某个数组是否包含给定的值,与字符串的includes方法类似。ES6引入了该方法。[1,2,3].includes(2);  // true[1,2,3].includes(4);  // false[1,2,NaN].includes(NaN);  // true

第四章 Set和Map数据结构及Promise

一、Set

1.set实例的创建

 它类似于数组,但是成员的值都是唯一的,没有重复的值。set本身是一个构造函数,用来生成set数据结构。const s = new Set();[2,3,5,4,5,2,2].forEach(x => s.add(x));console.log(s);  //2 3 5 4Set函数可以接收一个数组(具有iterable接口的其他数据结构)作为参数,用来初始化。[...new Set(array)]  //去除数组的重复成员

2.set实例的属性和方法

 Set结构的实例有以下属性:1) Set.prototype.constructor:构造函数,默认就是Set函数。2) Set.prototype.size:返回Set实例的成员总数。  Set结构的实例有以下方法:1) add(value):添加某个值,返回Set结果本身。2) delete(value):删除某个值,返回一个布尔值,表示删除是否成功。3) has(value):返回一个布尔值,表示该值是否为Set的成员。4) clear():清除所有成员,没有返回值。5) keys():返回键名的遍历器。6) values():返回键值的遍历器。7) entries():返回键值对的遍历器。8) forEach():使用回调函数遍历每个成员

二、Map

1.Map实例的属性和方法

 Map类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各类型的值(包括对象)都可以当做键。也就是说,Object结构提供了“字符串--值”的对应,Map结构提供了“值--值”的对应,是一种更完善的Hash结构的实现。如果你需要“键值对”的数据结构,Map比Object更合适。Map可以接受一个数组作为参数。该数组的成员是一个个表示键值对的数组。const map = new Map([[name,'张三'],['title','Author']]);Map结构的实例有以下属性:Set.prototype.size:返回Map实例的成员总数。 Map结构的实例有以下方法:1) set(key,value):set方法设置键名key对应的键值为value,然后返回整个Map结构。如果key已经有值,则键值会被更新,否则就新生成该键。 2) get(key):get方法读取对应的键值,如果找不到key,返回false。3) has(key):has方法返回一个布尔值,表示某个键是否在当前Map对象之中。4) delete(key):delete方法删除某个键,返回true。如果删除失败,返回false。5) clear():清除所有成员,没有返回值。6) keys():返回键名的遍历器。 7) values():返回键值的遍历器。8) entries():返回键值对的遍历器。9) forEach():使用回调函数遍历每个成员   

三、Interator

1.Interator(遍历器)的概念

 遍历器(Iterator)就是这样一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署Iterator接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)。Iterator的作用有三个:1)为各种数据结构提供一个统一的、简便的访问接口。2)使得数据结构的成员能够按某种次序排列。3)ES6创造了一种新的遍历命令for...of循环,Iterator接口主要供for...of消费。Iterator的遍历过程是这样的:1)创建一个指针对象,指向当前数据结构的起始位置。也就是说,遍历器对象本质上就是一个指针对象。2)第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员。2)第二次调用指针对象的next方法,指针就指向数据结构的第二个成员。3)不断调用指针对象的next方法,直到它指向数据结构的结束位置。

2.默认Interator接口

 Iterator接口的目的,就是为所有数据结构提供了一种统一的访问机制,即for...of循环。当使用for...of循环遍历某种数据结构时,该循环会自动去寻找Iterator接口。一种数据结构只要部署了Iterator接口,我们就称这种数据结构是“可遍历的”。可以通过如下方法访问Iterator对象:var iterator = iterObj[Symbol.iterator]();原生具备Iterator接口的数据结构如下:ArrayMapSetStringTypedArray函数的arguments对象NodeList对象

四、Promise

1.promise介绍

 Promise是异步编程的一种解决方案,比传统的解决方案(回调函数和事件)更合理更强大。它由社区最早提出和实现,ES6将其写进了语言标准,统一了用法,原生提供了Promise对象。所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise是一个对象,它可以获取异步操作的消息。Promise提供统一的API,各种异步操作都可以用同样的方法进行处理。有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。此外,Promise对象提供统一的接口,使得控制异步操作更加容易。

2.基本用法

 Promise构造函数接收一个函数作为参数,该函数的两个参数分别是reolve和reject。它们是两个函数,有JavaScript引擎提供,不用自己部署。resolve函数的作用是,将Promise对象的状态从“未完成”变为“成功”(即从Pending变为Resolved),在异步操作成功时调用,并将异步操作的结果作为参数传递出去。reject函数的作用是,将Promise对象的状态从“未完成”变为“失败”(即从Pending变为Rejected),在异步操作失败时调用,并将异步操作的结果作为参数传递出去。如果调用resolve和reject函数时带有参数,那么它们的参数会被传递给回调函数。Promise实例生成以后,可以调用then方法分别指定Resolved状态和Rejected状态的回调函数。.then(function(){//success},function(){//error});

3. promise.prototype.then()

 Promise实例具有then方法,也就是说,then方法是定义在原型对象Promise.prototype上的。它的作用是为Promise实例添加状态改变时的回调函数。then方法的第一个参数是Resolved状态的回调函数,第二个参数(可选)是Rejected状态的回调函数。then方法返回的是一个新的Promise实例(注意:不是原来的Promise实例)。因此可以采用链式写法,即then方法后面再调用另一个then方法。如果使用两个then方法,第一个回调函数完成以后,会将返回结果作为参数,传入第二个回调函数。

4. promise.prototype.catch()

 Promise.prototype.catch方法是.then(null,rejection)的别名,用于指定发生错误时的回调函数。一般来说,不要在then方法里面定义Reject状态的回调函数(即then的第二个参数),总是使用catch方法。Promise对象的错误具有“冒泡”性质,会一直向后传递,直到被捕获为止。也就是说,错误总是会被下一个catch语句捕获。

5. promise.all()

 Promise.all方法用于将多个Promise实例包装成一个新的Promise实例。var p = Promise.all([p1,p2,p3]);上面代码中,Promise.all方法接收一个数组作为参数,p1,p2,p3都是Promise实例,p的状态由p1,p2,p3决定,分成两种情况:1)只有p1,p2,p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1,p2,p3的返回值组成一个数组,传递给p的回调函数。2)只要p1,p2,p3之中有一个被rejected,p的状态就会变成rejectedd,此时第一个被rejected的实例的返回值,会传递给p的回调函数。

6. promise.race()

 promise.race方法同样是将多个Promise实例包装成一个新的Promise。下面代码中,只要p1,p2,p3之中有一个实例率先改变状态,p的状态就跟着改变。那个率先改变的Promise实例的返回值,就传递给p的回调函数。var p = Promise.race([p1,p2,p3]);

7. promise.resolve()

 promise.resolve方法将现有对象转为Promise对象,例如:var jsPromise = promise.resolve($.ajax('/whatever.json'));1) 参数是一个Promise实例promise.resolve将不做任何修改、原封不动地返回这个实例。2) 参数是一个thenable对象thenable对象指的是具有then方法的对象,promise.resolve方法会将这个对象转为Promise对象,然后立即执行thenable对象的then方法。3) 参数不是具有then方法的对象,或根本就不是对象如果参数是一个原始值,或者是一个不具有then方法的对象,则promise.resolve方法返回一个新的Promise对象,状态为resolved。4) 不带有任何参数直接返回一个resolve状态的Promise对象。需要注意的是,立即resolve的Promise对象,是在本轮“事件循环”(event loop)的结束时,而不是在下一轮的“事件循环”的开始时。  

8. promise.reject()

 promise.reject方法也会返回一个新的Promise实例,该实例的状态为rejected。var p = promise.reject("出错了");=>var p = new Promise((resolve,reject)=>reject('出错了'));

9. finally()

 finally方法用于指定不管Promise对象最后状态如何都会执行的操作。它接收一个普通的回调函数作为参数,该函数不管怎样都必须执行。下面是一个例子,服务器使用Promise处理请求,然后使用finally方法关掉服务器。server.listen(0).then(function(){// run test}).finallly(server.stop);

第五章 ES6模块

1、介绍
历史上,JavaScript一直没有模块(modules)体系,无法将一个大程序拆分成互相依赖上午小文件,再用简单的方法拼接装起来。
在ES6之前,社区制定了一些模块加载方案,最主要的有CommonJS和AMD两种。前者用于服务器,后者用于浏览器。
ES6在语言标准的层面上,实现了模块功能,而且实现的相当简单,完全可以取代CommonJS和AMD规范,成为浏览器和服务器通用的模块解决方案。

2、export命令

模块功能主要由两个命令构成:export和import。export命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能。
一个模块就是一个独立的文件。该文件内部的所有变量,外部无法获取。
如果你希望外部能够读取模块内部的某个变量,就必须适应使用export关键字输出该变量。下面是一个JS文件。里面使用export命令输出变量。var firstName = 'Michael';
var lastName = 'Jackson';
var year = 1958;
function multiply(x,y){return x * y;};
export{firstName,lastName,year,multiply};需要特别注意的是,export命令规定的是对外的接口,必须与模块内部的变量建立一一对应关系,不能直接导出一个值。export var m = 1;
或 var m = 1; export{m};
或 var n = 1; export{n as m};
在一个模块中,export可以调用多次。

3、import命令

使用export命令定义了模块的对外接口以后,其他JS文件就可以通过import命令加载这个模块。1)解构导入import {firstName,lastName,year} from './profile';2)重命名变量import {lastName as surname} from './profile';3)重复导入import {name} from './module1';import {age} from './module1';如果多次重复执行同一import语句,那么只会执行一次模块代码。4)模块的整体加载import * as persom from './module1';    

4、export default命令

使用import命令的时候,用户需要知道所要加载的变量名或函数名,否则无法加载。
但是,用户肯定希望快速上手,未必愿意阅读文档,去了解模块有哪些属性和方法。
为了给用户提供方便,让他们不用阅读文档就能加载模块,就要用到export default命令为模块指定默认输出。export default function(){console,log('foo');
}其他模块加载该模块时,import命令可以为该匿名函数指定任意名字。import customName from './export-default';
customName(); //'foo'export default命令用于指定模块的默认输出。显然,一个模块只能有一个默认输出,因此export default命令只能使用一次。所以,import命令后面才不用加大括号,因为只可能对应一个方法或者对象。

5、export与import的复合写法

如果在一个模块之中,先输入后输出同一个模块,import语句可以与export语句写在一起。export {foo,bar} from './my_module';
=>
import {foo,bar} from 'my_module';
export {foo,bar};

第六章 Class

1、介绍

JavaScript语言中,生成实例对象的传统方法是通过构造函数ES6提供了更接近传统语言的写法,引入了class(类)概念,作为对象的模板。通过class关键字,可以定义类。
基本上,ES6的class可以看作只是一个语法糖,它的绝大部分功能,ES5都可以做到,新的class写法只是让对象原型的写法更加清晰更像面向对象编程的语法而已。所以ES6的类,完全可以看作构造函数的另一种写法。

class Point{
constructor(x,y){
this.x = x;
this.y = y;
}
toString(){
return ‘(’ + this.x + ‘,’ + this.y + ‘)’;
}
}

2、方法

在类中可以直接定义方法,实际上类的所有方法都定义在类的prototype属性上面。在类的实例上面调用方法,其实就是调用原型上的方法。class Point{constructor(){//...}toString(){//...}toValue(){//...}
}由于类的方法都定义在prototype对象上面,所以类的新方法可以添加在prototype对象上面。Object.assign方法可以很方便地向类添加多个方法。class Point{constructor(){//...}
}
Object.assign(Point.prototype,{toString(){},toValue(){}
});

3、constructor方法

constructor方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法。一个类必须有constructor方法,如果没有显示定义,一个空的constructor方法会被默认添加。class Point{}
=>
class Point {costructor(){}}类必须使用new调用,否则会报错。这是它跟普通构造函数的一个主要区别,后者不用new也可以执行。

4、静态方法

类相当于实例的原型,所有在类中定义的方法,都会被实例继承。如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来直接调用,这就称为“静态方法”。class Foo{static classMethod(){return 'hello';}
}
Foo.classMethod(); //'hello'如果静态方法包含this关键字,这个this值得是类,而不是实例。

5、实例属性

类的实例属性可以定义在构造函数中。class Person{constructor(id,name,age){this.id = id;this.name = name;this.age = age;}
}

6、静态属性

直接在类上定义的属性是静态属性。class Foo{//...
}
Foo.prop = 1;
Foo.prop; //1目前,只有这种写法可行,因为ES6明确规定,class内部只有静态方法,没有静态属性。

7、继承

class可以通过extends关键字实现继承,这比ES5的通过修改原型链实现继承要清晰和方便很多。class Animal{constructor(name){this.name = name;}sayName(){console.log("my name is",this.name);}
}
class Dog extends Animal{//...
}子类必须在constructor方法中调用super方法,否则新建实例时会报错。
这是因为子类没有自己的this对象,而是继承父类的this对象,然后对其进行加工。
如果不调用super方法,子类就得不到this对象。子类构造函数可以省略。
在子类构造函数中,只有调用super之后,才可以使用this关键字,否则会报错。

8、super

super这个关键字,既可以当做函数使用,也可以当做对象使用。在这两种情况下,它的用法完全不同。1)函数子类B的构造函数之中的super(),代表调用父类的构造函数。super虽然代表了父类A的构造函数,但是返回的是子类B的实例,即super内部的this指的是B,因此super()在这里相当于A.prototype.constructor.call(this)。2)对象在普通方法中,指向弗雷德原型对象;在静态方法中,指向父类。由于super指向父类的原型对象,所以定义在父类实例上上午方法或属性,是无法通过super调用的。ES6规定,通过super调用父类的方法时,super会绑定子类的this。super.print();=>super.print.call(this);不能直接打印super,因为无法得知super到底是函数还是对象。

9、类的prototype属性和__proto__属性

 class作为构造函数的语法糖,同时有prototype属性和__proto__属性,因此同时存在两条继承链:1)子类的__proto__属性,表示构造函数的继承,总是指向父类。2)子类prototype属性的__proto__属性,表示方法的继承,总是指向父类的prototype属性。class A {}class B extends A {}B.__proto__ === A; //trueB.prototype.__proto__ === A.prototype; //true类的继承是按照下面的模式实现的。class A {}class B {}//B的实例继承A的实例Object.setPrototypeOf(B.prototype,A.prototype);//B的实例继承A的静态属性Object.setPrototypeOf(B,A);const b = new B();
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 用最少的代码来,美化你的J2ME程序!

    以下代码出自http://blog.csdn.net/hellogv/,引用请注明出处! 在开始本文之前,请确定你自己,是否想把你的J2ME程序界面改为以下这样:如果你已经想好了,想把你J2ME程序改成这样,那么,请继续往下看.......在动手美化你的J2ME程序之前,请准备以下:1。请到http://www.enoug…...

    2024/4/27 14:36:52
  2. html网页好看字体,css设置各种中文字体样式

    网页字体样式华文黑体:STHeiti网页字体样式华文楷体:STKaiti网页字体样式华文宋体:STSong网页字体样式华文仿宋:STFangsong网页字体样式黑体:SimHei网页字体样式宋体:SimSun网页字体样式新宋体:NSimSun网页字体样式仿宋:FangSong网页字体样式楷体:KaiTi网页字体样式仿…...

    2024/4/27 19:43:05
  3. android学习计划

    最近两周看了android应用开发的一些资料,主要是官方的网站,另外有一本android内核的书。因为android的市场商机还没稳定下来,是有不少机会的,不过需要尽快学习和适应。官方的资料很丰富也很权威,我不打算另外买android应用的书了,如果是内核方面,觉得还是需要先有linux的…...

    2024/4/27 20:53:39
  4. heritrix的web应用

    第一步启动heritrix的web应用第二步结合eclipse的应用Lucene很强大,这点在前面的章节中,已经作了详细介绍。但是,无论多么强大的搜索引擎工具,在其后台,都需要一样东西来支援它,那就是网络爬虫Spider。网络爬虫,又被称为蜘蛛Spider,或是网络机器人、BOT等,这些都无关紧…...

    2024/4/27 19:05:21
  5. CSS美化上传按钮并获取上传文件路径

    先来看效果图上传功能很常见了,就是一个 input file 功能。但是默认的上传很丑啊有没有,所以网上也有很多美化的 css 文章,但是很多也只是美化以下按钮而已,今天遇到一个问题就是还要显示上传文件的路径,一般默认的都会在后面显示上传文件名,但是按照网上的教程美化之后,…...

    2024/4/27 19:57:33
  6. 【实验楼】python简明教程

    ①终端输入python进入 欣赏完自己的杰作后,按 Ctrl + D 输入一个 EOF 字符来退出解释器,你也可以键入 exit() 来退出解释器。 ②vim键盘快捷功能分布③这里需要注意如果程序中没有 #!/usr/bin/env python3 的话,应该使用 python3 helloworld.py 来执行,否则使用 ./hellowor…...

    2024/4/27 17:16:51
  7. ES6 -- 修饰器

    decorator是ES7引入的功能,它是一个函数,用来修改类甚至于是方法的行为。类的修饰一个简单的栗子:@testable class MyTestableClass {// ... }function testable(target) {target.isTestable = true; }MyTestableClass.isTestable // true上面的栗子中,@testable就是一个修…...

    2024/4/27 16:14:21
  8. Delphi+MapX5中使用自定义字体符号

    MapX5中使用自定义字体符号觉得现在使用自定义字体作为点符号的应用是越来越少了,近段时间在开发GPS车辆管理的GIS系统的时候要用到动态显示车辆位置,觉得用其他方式在地图上显示车辆可能会对性能有一定的影响,所以就使用的自定义字体。<?xml:namespace prefix = o ns =…...

    2024/4/27 15:15:30
  9. 看我是如何快速学习android开发的(一)

    原文地址为:看我是如何快速学习android开发的(一) 因为项目需要,8月中旬开始决定做安卓的程序,所以马上就开始学习安卓方面的开发知识,把最近的学习实践经历和大家分享分享。不要一开始就下载一大堆资料,视频,然后就不知道做什么了,要给自己定个目标,我要做什…...

    2024/4/27 15:59:12
  10. ES6 核心特性

    ES6 核心特性 前言 ES6 虽提供了许多新特性,但我们实际工作中用到频率较高并不多,根据二八法则,我们应该用百分之八十的精力和时间,好好专研这百分之二十核心特性,将会收到事半功倍的奇效一、开发环境配置 这部分着重介绍:babel 编译 ES6 语法,如何用 webpack 实现模块化…...

    2024/4/27 16:03:11
  11. CSS笔记(美化表格)

    一、表格的基本结构 表格由行、列、单元格三部分组成,单元格是行与列交叉的部分,可以拆分和合并。 表格<table>,行<tr>,单元格<td> 单元格可以包含文本、图片、列表、段落、表单、水平线、表格等。 1、标准化的表格结构 *<table>定义表格 *&…...

    2024/4/27 14:58:14
  12. 用哪种字体写博客比较好尼?

    一、宋体:为适应印刷术而生,因互联网半死。宋体的特点是:“横平竖直,横细竖粗,起落笔有棱有角。”“横平竖直”是为美观;“横细竖粗”是为坚固,为何坚固?度娘说:木板具有木纹,一般都是横向,刻制字的横向线条和木纹一致,比较结实;但刻制字的竖向线条时和木纹交叉,…...

    2024/4/27 15:12:10
  13. Python 简明教程 ---11,Python 元组

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io软件工程的目标是控制复杂度,而不是增加复杂性。 —— Dr. Pamela Zave目录我们在上一节介绍了Python 列表list 数据结构,本节来介绍一下元组tuple。 1,Python 元组 元组与列表有些相似,它们之间最显著的…...

    2024/4/27 14:12:16
  14. 网络爬虫之Windows环境Heritrix3.0配置指南

    一、引言:最近在忙某个商业银行的项目,需要引入外部互联网数据作为参考,作为技术选型阶段的工作,之前已经确定了中文分词工具,下一个话题就是网络爬虫的选择,目标很明确,需要下载一些财经网站的新闻信息,然后进行文本计算。记得上一次碰爬虫还是5年前,时过境迁,不知道…...

    2024/4/27 20:56:29
  15. 最全Android学习路线总结,绝对干货

    一、前言不知不觉自己已经做了几年开发了,由记得刚出来工作的时候感觉自己能牛逼,现在回想起来感觉好无知。懂的越多的时候你才会发现懂的越少。如果你的知识是一个圆,当你的圆越大时,圆外面的世界也就越大。最近看到很多Android新手问Android学习路线,学习方法啊,如何入…...

    2024/4/18 9:50:54
  16. python之一(简明python教程新旧版勘误)

    写在前面:作为一个非科班出身的“程序媛”已经好多天都没写过代码了,本科时候学过的那些C/C++也从来没有没有真正掌握过,因此开始进行每天编程一小时活动。虽然每天一小时时间不是很长,但我相信“不积跬步无以至千里”,坚持这项活动不为别的,只是想真正去投入一件事情。从…...

    2024/4/12 17:48:32
  17. 使用TTF字体

    TTFConfig ttfConfig("fonts/liuwen.ttf", 15); auto label1 = Label::createWithTTF(ttfConfig, "Print Resources"); label1->setPosition(visibleSize.width/2.0,visibleSize.height/2.0); addChild(label1);*/cocostudio自定义字体控件只能使用fnt字…...

    2024/4/12 17:48:52
  18. CSS+div美化和布局

    1、<div>标记与<span>标记<div>(division)是一个区块容器标记 ,即<div>与</div>之间可以容纳段落,标题、表格、图片、乃至章节、摘要等各种HTML元素。因此可以把<div>与</div>的内容视为一个独立对象,用于CSS控制。<span>作…...

    2024/4/16 3:41:13
  19. ES6 fetch函数与后台交互实现

    最近在学习react-native,遇到调用后端接口的问题.看了看官方文档,推荐使用es6的fetch来与后端进行交互,在网上找了一些资料.在这里整理,方便以后查询. 1.RN官方文档中,可使用XMLHttpRequest var request = new XMLHttpRequest(); request.onreadystatechange = (e) = >{if (…...

    2024/4/12 17:48:52
  20. 扩展Heritrix的FrontierScheduler(正则表达式的应用)

    heritrix有多个扩展点,这里我扩展FrontierScheduler,它是一个PostProcessor,它的作用是在Extractor 中所分析的链接加到Frontier中。 FrontierScheduler在org.archive.crawler.postprocessor包下面,我写一个类MyFrontierScheduler来继承FrontierScheduler类,,自己写 的MyF…...

    2024/4/12 17:49:28

最新文章

  1. 太速科技-基于6 U VPX M.2 高带宽加固存储板

    基于6 U VPX M.2 高带宽加固存储板 一、板卡概述 基于6 U VPX M.2 高带宽加固存储板&#xff0c;可以实现VPX接口的数据读写到PCI-E总线的NVME存储媒介上。采用PLX8732&#xff0c;上行链路提供带宽x16的PCI-E数据到VPX接口上&#xff1b;下行链路提供3路带宽x4的PCI-E接口…...

    2024/4/27 21:04:47
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 关于hive启动的相关问题记录

    问题&#xff1a;初始化hive元数据报错 [atguiguhadoop102 software]$ schematool -initSchema -dbType mysql -verboseError: Table CTLGS already exists (state42S01,code1050) Closing: 0: jdbc:mysql://hadoop102:3306/metastore?useSSLfalse org.apache.hadoop.hive.me…...

    2024/4/21 20:36:50
  4. Redis分区

    Redis分区是一种数据分片技术&#xff0c;用于将数据分布到多个Redis实例&#xff08;节点&#xff09;上以提高性能和扩展性。分区使得Redis能够处理比单个实例更大的数据集&#xff0c;并允许并行处理客户端请求。 原理&#xff1a; Redis分区通过一致性哈希算法&#xff08;…...

    2024/4/23 6:11:42
  5. 【项目新功能开发篇】开发编码

    作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过大学刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0…...

    2024/4/27 12:02:13
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/26 18:09:39
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/26 20:12:18
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/26 23:05:52
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/27 4:00:35
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/26 21:56:58
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/27 9:01:45
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/25 18:39:16
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/26 22:01:59
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/25 2:10:52
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/25 18:39:00
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/26 19:46:12
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/27 11:43:08
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/27 8:32:30
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57