ES6语法使用精华

1 let 和 const

let 的作用域与 const 命令相同:只在声明所在的块级作用域内有效。且不存在变量提升 。

1.1 let

let 所声明的变量,可以改变。

let a = 123
a = 456 // 正确,可以改变

let b = [123]
b = [456] // 正确,可以改变

1.2 const

const 声明一个只读的常量。一旦声明,常量的值就不能改变。

简单类型的数据(数值、字符串、布尔值),不可以变动

const a = 123
a = 456 // 报错,不可改变

let b = [123]
b = [456] // 报错,不可以重新赋值,不可改变
复合类型的数据(主要是对象和数组),可以这样子变动

const a = [123]
a.push(456) // 成功

const b = {}
b.name = 'demo'  // 成功

1.3 不存在变量提升

{
  let a = 10;
  var b = 1;
}

a // ReferenceError: a is not defined.
b // 1
所以 for循环的计数器,就很合适使用 let 命令。

let a = [];
for (let i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 6

1.4 推荐

对于 数值、字符串、布尔值 经常会变的,用 let 声明。

对象、数组和函数用 const 来声明。

// 如经常用到的导出 函数
export const funA = function(){
    // ....
}

2 解构(Destructuring)

2.1 数组

一次性声明多个变量:

let [a, b, c] = [1, 2, 3];
console.log(a) // 1
console.log(b) // 2
console.log(c) // 3

结合扩展运算符:

let [head, ...tail] = [1, 2, 3, 4];
console.log(head) // 1
console.log(tail) // [2, 3, 4]

解构赋值允许指定默认值:

let [foo = true] = [];
foo // true

let [x, y = 'b'] = ['a'];
// x='a', y='b'

2.2 对象

解构不仅可以用于数组,还可以用于对象。

let { a, b } = { a: "aaa", b: "bbb" };
a // "aaa"
b // "bbb"

数组中,变量的取值由它 排列的位置 决定;而对象中,变量必须与 属性 同名,才能取到正确的值。

对象的解构也可以指定默认值。

let {x = 3} = {};
x // 3

let {x, y = 5} = {x: 1};
x // 1
y // 5

2.3 字符串

字符串也可以解构赋值。这是因为此时,字符串被转换成了一个类似数组的对象。

const [a, b, c, d, e] = 'hello';
a // "h"
b // "e"
c // "l"
d // "l"
e // "o"

2.4 用途

交换变量的值

let x = 1;
let y = 2;

[x, y] = [y, x];

从函数返回多个值

// 返回一个数组

function example() {
  let [a, b, c] = [1, 2, 3]
  return  [a, b, c] 
}
let [a, b, c] = example();
// 返回一个对象
function example() {
  return {
    foo: 1,
    bar: 2
  };
}
let { foo, bar } = example();

函数参数的默认值

function funA (a = 1, b = 2){
      return a + b;
}

funA(3) // 5 因为 a 是 3, b 是 2
funA(33) // 6 因为 a 是 3, b 是 3

输入模块的指定方法

加载模块时,往往需要指定输入哪些方法。解构赋值使得输入语句非常清晰。

const { SourceMapConsumer, SourceNode } = require("source-map");

在 utils.js 中:

export const function A (){
    console.log('A')
}

export const function B (){
   console.log('B')
}

export const function C (){
     console.log('C')
}

在 组件中引用时:

import { A, B, C } from "./utils.js" 
//调用
A() // 输出 A 

3. 模板字符串(template string)

模板字符串(template string)用反引号(`)标识。

3.1 纯字符串

所有模板字符串的空格和换行,都是被保留的.

console.log(`输出值为 N, 

换行`)
// "输出值为 N

换行"

3.2 字符串中加变量

模板字符串中嵌入变量,需要将变量名写在 ${ } 之中

let x = 1;
let y = 2;

console.log(`输出值为:${x}`) // "输出值为:1"
console.log(`输出值为:${x + y}`) // "输出值为:3"

3.3 模板字符串之中还能调用函数。

function fn() {
  return "Hello World";
}

console.log(`输出值为:${fn()}`) // "输出值为:Hello World"

4. 字符串函数扩展

includes():返回布尔值,表示是否找到了参数字符串。

startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。

endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。

let s = 'Hello world!';

s.startsWith('Hello') // true
s.endsWith('!') // true
s.includes('o') // true

这三个方法都支持第二个参数,表示开始搜索的位置。

let s = 'Hello world!';

s.startsWith('world', 6) // true
s.endsWith('Hello', 5) // true
s.includes('Hello', 6) // false

5. 数值扩展

5.1 指数运算符

ES2016 新增了一个指数运算符(**)。

2 ** 2 // 4
2 ** 3 // 8

这个运算符的一个特点是右结合,而不是常见的左结合。多个指数运算符连用时,是从最右边开始计算的。

// 相当于 2 ** (3 ** 2)
2 ** 3 ** 2
// 512

上面代码中,首先计算的是第二个指数运算符,而不是第一个。

指数运算符可以与等号结合,形成一个新的赋值运算符(**=)。

let a = 1.5;
a **= 2;
// 等同于 a = a * a;

let b = 4;
b **= 3;
// 等同于 b = b * b * b;

6. 函数的扩展

除了在解构中说到的函数参数的默认值,还有不少经常会用到的方法。

6. 1 rest 参数

ES6 引入 rest 参数(形式为…变量名),用于获取函数的多余参数,这样就不需要使用 arguments 对象了。rest 参数搭配的变量是一个数组,该变量将多余的参数放入数组中。

function add(...values) {
  let sum = 0;

  for (let val of values) {
    sum += val;
  }

  return sum;
}

add(2, 5, 3) // 10

上面代码的 add 函数是一个求和函数,利用 rest 参数,可以向该函数传入任意数目的参数。

注意,rest 参数之后不能再有其他参数(即只能是最后一个参数),否则会报错。

// 报错
function f(a, ...b, c) {
  // ...
}

6.2 箭头函数

ES6 允许使用“箭头”(=>)定义函数。

const f = v => v;
console.log('输出值:', f(3)) // 输出值: 3
// 等同于
const f = function (v) {
  return v;
};

如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分。

// 等同于
const f = function () { return 5 };

const sum = (num1, num2) => num1 + num2;
// 等同于
const sum = function(num1, num2) {
  return num1 + num2;
};

如果箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,并且使用 return 语句返回。

const sum = (num1, num2) => { return num1 + num2; }

箭头函数的一个用处是简化回调函数。

const square = n => n * n;

// 正常函数写法
[1,2,3].map(function (x) {
  return x * x;
});

// 箭头函数写法
[1,2,3].map(x => x * x);

注意: 函数体内的 this 对象,就是定义时所在的对象,而不是使用时所在的对象。

this 对象的指向是可变的,但是在箭头函数中,它是固定的。

function foo() {
  setTimeout(() => {
    console.log('id:', this.id);
  }, 100);
}

let id = 21;

foo.call({ id: 42 });
// id: 42

上面代码中,setTimeout 的参数是一个箭头函数,这个箭头函数的定义生效是在 foo 函数生成时,而它的真正执行要等到 100 毫秒后。如果是普通函数,执行时 this 应该指向全局对象window,这时应该输出 21。但是,箭头函数导致 this 总是指向函数定义生效时所在的对象(本例是{ id: 42}),所以输出的是 42。

7. 数组的扩展

扩展运算符(spread)是三个点(…)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。

7.1 数组合并的新写法。

const arr1 = ['a', 'b'];
const arr2 = ['c'];
const arr3 = ['d', 'e'];

// ES5 的合并数组
arr1.concat(arr2, arr3);
// [ 'a', 'b', 'c', 'd', 'e' ]

// ES6 的合并数组
[...arr1, ...arr2, ...arr3]
// [ 'a', 'b', 'c', 'd', 'e' ]

7.2 函数调用。

function add(x, y) {
  return x + y;
}

const numbers = [4, 4];
add(...numbers) // 8

7.3 复制数组的简便写法。

const a1 = [1, 2];
// 写法一
const a2 = [...a1];
a2[0] = 2;
a1 // [1, 2]
// 写法二
const [...a2] = a1;
a2[0] = 2;
a1 // [1, 2]

上面的两种写法,a2 都是 a1 的克隆,且不会修改原来的数组。

7.4 将字符串转为真正的数组。

[...'hello']
// [ "h", "e", "l", "l", "o" ]

7.5 数组实例的 entries(),keys() 和 values()

用 for…of 循环进行遍历,唯一的区别是 keys() 是对键名的遍历、values() 是对键值的遍历,entries() 是对键值对的遍历。

for (let index of ['a', 'b'].keys()) {
  console.log(index);
}
// 0
// 1

for (let elem of ['a', 'b'].values()) {
  console.log(elem);
}
// 'a'
// 'b'

for (let [index, elem] of ['a', 'b'].entries()) {
  console.log(index, elem);
}
// 0 "a"
// 1 "b"

7.6 includes()

Array.prototype.includes 方法返回一个布尔值,表示某个数组是否包含给定的值,与字符串的 includes 方法类似。ES2016 引入了该方法。

[1, 2, 3].includes(2)     // true
[1, 2, 3].includes(4)     // false
[1, 2, NaN].includes(NaN) // true

该方法的第二个参数表示搜索的起始位置,默认为 0。如果第二个参数为负数,则表示倒数的位置,如果这时它大于数组长度(比如第二个参数为 -4,但数组长度为 3 ),则会重置为从 0 开始。

[1, 2, 3].includes(3, 3);  // false
[1, 2, 3].includes(3, -1); // true

8. 对象的扩展

8.1 属性和方法 的简洁表示法

let birth = '2000/01/01';

const Person = {

  name: '张三',

  //等同于birth: birth
  birth,

  // 等同于hello: function ()...
  hello() { console.log('我的名字是', this.name); }

};

8.2 Object.assign()

Object.assign方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。

const target = { a: 1 };

const source1 = { b: 2 };
const source2 = { c: 3 };

Object.assign(target, source1, source2);
target // {a:1, b:2, c:3}

Object.assign方法的第一个参数是目标对象,后面的参数都是源对象。

注意,如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性。

const target = { a: 1, b: 1 };

const source1 = { b: 2, c: 2 };
const source2 = { c: 3 };

Object.assign(target, source1, source2);
target // {a:1, b:2, c:3}
Object.assign 方法实行的是浅拷贝,而不是深拷贝。

const obj1 = {a: {b: 1}};
const obj2 = Object.assign({}, obj1);

obj1.a.b = 2;
obj2.a.b // 2

上面代码中,源对象 obj1 的 a 属性的值是一个对象,Object.assign 拷贝得到的是这个对象的引用。这个对象的任何变化,都会反映到目标对象上面。

9. Set

ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。

Set 本身是一个构造函数,用来生成 Set 数据结构。

// 基本用法
const s = new Set();

[2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));

for (let i of s) {
  console.log(i);
}
// 2 3 5 4


// 去除数组的重复成员
const array = [1, 1, 2, 3, 4, 4]
[...new Set(array)]
// [1, 2, 3, 4]

10. Promise 对象

Promise 是异步编程的一种解决方案。

Promise 对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。

Promise 对象的状态改变,只有两种可能:从 pending 变为 fulfilled 和从 pending 变为
rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果,这时就称为 resolved(已定型)

const someAsyncThing = function(flag) {
  return new Promise(function(resolve, reject) {
    if(flag){
        resolve('ok');
    }else{
        reject('error')
    }
  });
};

someAsyncThing(true).then((data)=> {
  console.log('data:',data); // 输出 'ok'
}).catch((error)=>{
  console.log('error:', error); // 不执行
})

someAsyncThing(false).then((data)=> {
  console.log('data:',data); // 不执行
}).catch((error)=>{
  console.log('error:', error); // 输出 'error'
})

上面代码中,someAsyncThing 函数成功返回 ‘OK’, 失败返回 ‘error’, 只有失败时才会被 catch 捕捉到。

最简单实现:

// 发起异步请求
    fetch('/api/todos')
      .then(res => res.json())
      .then(data => ({ data }))
      .catch(err => ({ err }));

来看一道有意思的面试题:

setTimeout(function() {
  console.log(1)
}, 0);
new Promise(function executor(resolve) {
  console.log(2);
  for( var i=0 ; i<10000 ; i++ ) {
    i == 9999 && resolve();
  }
  console.log(3);
}).then(function() {
  console.log(4);
});
console.log(5);

这道题应该考察 JavaScript 的运行机制的。
首先先碰到一个 setTimeout,于是会先设置一个定时,在定时结束后将传递这个函数放到任务队列里面,因此开始肯定不会输出 1 。
然后是一个 Promise,里面的函数是直接执行的,因此应该直接输出 2 3 。
然后,Promise 的 then 应当会放到当前 tick 的最后,但是还是在当前 tick 中。
因此,应当先输出 5,然后再输出 4 。
最后在到下一个 tick,就是 1 。
答案:“2 3 5 4 1”

11. async 函数

ES2017 标准引入了 async 函数,使得异步操作变得更加方便。

async 函数的使用方式,直接在普通函数前面加上 async,表示这是一个异步函数,在要异步执行的语句前面加上 await,表示后面的表达式需要等待。async 是 Generator 的语法糖

  1. async 函数内部 return 语句返回的值,会成为 then 方法回调函数的参数。
async function f() {
  return 'hello world';
}

f().then(v => console.log(v))
// "hello world"

上面代码中,函数 f 内部 return 命令返回的值,会被 then 方法回调函数接收到。

  1. async 函数内部抛出错误,会导致返回的 Promise 对象变为 reject 状态。抛出的错误对象会被 catch 方法回调函数接收到。
async function f() {
  throw new Error('出错了');
}

f().then(
  result => console.log(result),
  error => console.log(error)
)
// Error: 出错了
  1. async 函数返回的 Promise 对象,必须等到内部所有 await 命令后面的 Promise 对象执行完,才会发生状态改变,除非遇到 return 语句或者抛出错误。也就是说,只有 async 函数内部的异步操作执行完,才会执行 then 方法指定的回调函数。
    下面是一个例子:
async function getTitle(url) {
  let response = await fetch(url);
  let html = await response.text();
  return html.match(/([\s\S]+)<\/title>/i</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token function">getTitle</span><span class="token punctuation">(</span><span class="token string">'https://tc39.github.io/ecma262/'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span>console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'完成'</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token comment">// "ECMAScript 2017 Language Specification"</span>
</code></pre> 
  <p>上面代码中,函数 getTitle 内部有三个操作:抓取网页、取出文本、匹配页面标题。只有这三个操作全部完成,才会执行 then 方法里面的 console.log。</p> 
  <ol start="4"> 
   <li>在 vue 中,我们可能要先获取 token ,之后再用 token 来请求用户数据什么的,可以这样子用:</li> 
  </ol> 
  <pre><code class="prism language-javascript">methods<span class="token punctuation">:</span><span class="token punctuation">{</span>
        <span class="token function">getToken</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
            <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">Promise</span><span class="token punctuation">(</span><span class="token punctuation">(</span>resolve<span class="token punctuation">,</span> reject<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
                <span class="token keyword">this</span><span class="token punctuation">.</span>$http<span class="token punctuation">.</span><span class="token function">post</span><span class="token punctuation">(</span><span class="token string">'/token'</span><span class="token punctuation">)</span>
                    <span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span>res <span class="token operator">=></span> <span class="token punctuation">{</span>
                        <span class="token keyword">if</span> <span class="token punctuation">(</span>res<span class="token punctuation">.</span>data<span class="token punctuation">.</span>code <span class="token operator">===</span> <span class="token number">200</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
                           <span class="token function">resolve</span><span class="token punctuation">(</span>res<span class="token punctuation">.</span>data<span class="token punctuation">.</span>data<span class="token punctuation">)</span>
                        <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span>
                            <span class="token function">reject</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
                        <span class="token punctuation">}</span>
                    <span class="token punctuation">}</span><span class="token punctuation">)</span>
                    <span class="token punctuation">.</span><span class="token keyword">catch</span><span class="token punctuation">(</span>error <span class="token operator">=></span> <span class="token punctuation">{</span>
                        console<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span>error<span class="token punctuation">)</span><span class="token punctuation">;</span>
                    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token punctuation">}</span><span class="token punctuation">)</span>
       <span class="token punctuation">}</span><span class="token punctuation">,</span>
       <span class="token function">getUserInfo</span><span class="token punctuation">(</span>token<span class="token punctuation">)</span> <span class="token punctuation">{</span>
            <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">Promise</span><span class="token punctuation">(</span><span class="token punctuation">(</span>resolve<span class="token punctuation">,</span> reject<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
                <span class="token keyword">this</span><span class="token punctuation">.</span>$http<span class="token punctuation">.</span><span class="token function">post</span><span class="token punctuation">(</span><span class="token string">'/userInfo'</span><span class="token punctuation">,</span><span class="token punctuation">{</span>
                        token<span class="token punctuation">:</span> token
                    <span class="token punctuation">}</span><span class="token punctuation">)</span>
                    <span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span>res <span class="token operator">=></span> <span class="token punctuation">{</span>
                        <span class="token keyword">if</span> <span class="token punctuation">(</span>res<span class="token punctuation">.</span>data<span class="token punctuation">.</span>code <span class="token operator">===</span> <span class="token number">200</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
                           <span class="token function">resolve</span><span class="token punctuation">(</span>res<span class="token punctuation">.</span>data<span class="token punctuation">.</span>data<span class="token punctuation">)</span>
                        <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span>
                            <span class="token function">reject</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
                        <span class="token punctuation">}</span>
                    <span class="token punctuation">}</span><span class="token punctuation">)</span>
                    <span class="token punctuation">.</span><span class="token keyword">catch</span><span class="token punctuation">(</span>error <span class="token operator">=></span> <span class="token punctuation">{</span>
                        console<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span>error<span class="token punctuation">)</span><span class="token punctuation">;</span>
                    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token punctuation">}</span><span class="token punctuation">)</span>
       <span class="token punctuation">}</span><span class="token punctuation">,</span>
       <span class="token keyword">async</span> <span class="token function">initData</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
            <span class="token keyword">let</span> token <span class="token operator">=</span> <span class="token keyword">await</span> <span class="token keyword">this</span><span class="token punctuation">.</span><span class="token function">getToken</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
            <span class="token keyword">this</span><span class="token punctuation">.</span>userInfo <span class="token operator">=</span> <span class="token keyword">this</span><span class="token punctuation">.</span><span class="token function">getUserInfo</span><span class="token punctuation">(</span>token<span class="token punctuation">)</span>
       <span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span>
</code></pre> 
  <h3>12. import 和 export</h3> 
  <p>import 导入模块、export 导出模块</p> 
  <pre><code class="prism language-javascript"><span class="token comment">// example2.js  // 导出默认, 有且只有一个默认</span>
<span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token keyword">const</span> example2 <span class="token operator">=</span> <span class="token punctuation">{</span>
  name <span class="token punctuation">:</span> <span class="token string">'my name'</span><span class="token punctuation">,</span>
  age <span class="token punctuation">:</span> <span class="token string">'my age'</span><span class="token punctuation">,</span>
  <span class="token function-variable function">getName</span>  <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>  <span class="token keyword">return</span> <span class="token string">'my name'</span> <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token comment">//全部导入 // 名字可以修改</span>
<span class="token keyword">import</span> people <span class="token keyword">from</span> <span class="token string">'./example2.js'</span>

<span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">-</span>我是一条华丽的分界线<span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">-</span>

<span class="token comment">// example1.js // 部分导出</span>
<span class="token keyword">export</span> <span class="token keyword">let</span> name  <span class="token operator">=</span> <span class="token string">'my name'</span>
<span class="token keyword">export</span> <span class="token keyword">let</span> age  <span class="token operator">=</span> <span class="token string">'my age'</span>
<span class="token keyword">export</span> <span class="token keyword">let</span> <span class="token function-variable function">getName</span>  <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token string">'my name'</span><span class="token punctuation">}</span>

<span class="token comment">// 导入部分 // 名字必须和 定义的名字一样。</span>
<span class="token keyword">import</span>  <span class="token punctuation">{</span>name<span class="token punctuation">,</span> age<span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'./example1.js'</span>

<span class="token comment">//有一种特殊情况,即允许你将整个模块当作单一对象进行导入</span>
<span class="token comment">//该模块的所有导出都会作为对象的属性存在</span>
<span class="token keyword">import</span> <span class="token operator">*</span> <span class="token keyword">as</span> example <span class="token keyword">from</span> <span class="token string">"./example1.js"</span>
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>example<span class="token punctuation">.</span>name<span class="token punctuation">)</span>
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>example<span class="token punctuation">.</span>age<span class="token punctuation">)</span>
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>example<span class="token punctuation">.</span><span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>

<span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">-</span>我是一条华丽的分界线<span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">-</span>

<span class="token comment">// example3.js  // 有导出默认, 有且只有一个默认,// 又有部分导出</span>
<span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token keyword">const</span> example3 <span class="token operator">=</span> <span class="token punctuation">{</span>
  birthday <span class="token punctuation">:</span> <span class="token string">'2018 09 20'</span>
<span class="token punctuation">}</span>
<span class="token keyword">export</span> <span class="token keyword">let</span> name  <span class="token operator">=</span> <span class="token string">'my name'</span>
<span class="token keyword">export</span> <span class="token keyword">let</span> age  <span class="token operator">=</span> <span class="token string">'my age'</span>
<span class="token keyword">export</span> <span class="token keyword">let</span> <span class="token function-variable function">getName</span>  <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token string">'my name'</span><span class="token punctuation">}</span>

<span class="token comment">// 导入默认与部分</span>
<span class="token keyword">import</span> example3<span class="token punctuation">,</span> <span class="token punctuation">{</span>name<span class="token punctuation">,</span> age<span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'./example1.js'</span>
</code></pre> 
  <p>总结:</p> 
  <pre><code class="prism language-javascript"><span class="token number">1.</span>当用 <span class="token keyword">export</span> <span class="token keyword">default</span> people 导出时,就用 <span class="token keyword">import</span> people 导入(不带大括号)

<span class="token number">2.</span>一个文件里,有且只能有一个 <span class="token keyword">export</span> <span class="token keyword">default</span>。但可以有多个 <span class="token keyword">export</span>。

<span class="token number">3.</span>当用 <span class="token keyword">export</span> name 时,就用 <span class="token keyword">import</span> <span class="token punctuation">{</span> name <span class="token punctuation">}</span>导入(记得带上大括号)

<span class="token number">4.</span>当一个文件里,既有一个 <span class="token keyword">export</span> <span class="token keyword">default</span> people<span class="token punctuation">,</span> 又有多个 <span class="token keyword">export</span> name 或者 <span class="token keyword">export</span> age 时,导入就用 <span class="token keyword">import</span> people<span class="token punctuation">,</span> <span class="token punctuation">{</span> name<span class="token punctuation">,</span> age <span class="token punctuation">}</span> 

<span class="token number">5.</span>当一个文件里出现 n 多个 <span class="token keyword">export</span> 导出很多模块,导入时除了一个一个导入,也可以用 <span class="token keyword">import</span> <span class="token operator">*</span> <span class="token keyword">as</span> example
</code></pre> 
  <h3>13. Class</h3> 
  <p>对于 Class , react 中用的比较多。</p> 
  <h4>13.1基本用法:</h4> 
  <pre><code class="prism language-javascript"><span class="token comment">//定义类</span>
<span class="token keyword">class</span> <span class="token class-name">FunSum</span> <span class="token punctuation">{</span>
  <span class="token function">constructor</span><span class="token punctuation">(</span>x<span class="token punctuation">,</span> y<span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token keyword">this</span><span class="token punctuation">.</span>x <span class="token operator">=</span> x<span class="token punctuation">;</span>
    <span class="token keyword">this</span><span class="token punctuation">.</span>y <span class="token operator">=</span> y<span class="token punctuation">;</span>
  <span class="token punctuation">}</span>
  <span class="token function">sum</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span> <span class="token keyword">this</span><span class="token punctuation">.</span>x <span class="token operator">+</span><span class="token keyword">this</span><span class="token punctuation">.</span>y'<span class="token punctuation">)</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

<span class="token comment">// 使用的时候,也是直接对类使用new命令,跟构造函数的用法完全一致。</span>
<span class="token keyword">let</span> f <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FunSum</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">20</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
f<span class="token punctuation">.</span><span class="token function">sum</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment">// 30</span>
</code></pre> 
  <h4>13.2 继承</h4> 
  <pre><code class="prism language-javascript"><span class="token keyword">class</span> <span class="token class-name">ColorPoint</span> <span class="token keyword">extends</span> <span class="token class-name">Point</span> <span class="token punctuation">{</span>
  <span class="token function">constructor</span><span class="token punctuation">(</span>x<span class="token punctuation">,</span> y<span class="token punctuation">,</span> color<span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token keyword">super</span><span class="token punctuation">(</span>x<span class="token punctuation">,</span> y<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 调用父类的constructor(x, y)</span>
    <span class="token keyword">this</span><span class="token punctuation">.</span>color <span class="token operator">=</span> color<span class="token punctuation">;</span>
  <span class="token punctuation">}</span>

  <span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token keyword">return</span> <span class="token keyword">this</span><span class="token punctuation">.</span>color <span class="token operator">+</span> <span class="token string">' '</span> <span class="token operator">+</span> <span class="token keyword">super</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 调用父类的toString()</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre> 
  <p>上面代码中,constructor 方法和 toString 方法之中,都出现了super关键字,它在这里表示父类的构造函数,用来新建父类的 this 对象。</p> 
  <p>子类必须在 constructor 方法中调用 super 方法,否则新建实例时会报错。这是因为子类自己的 this 对象,必须先通过父类的构造函数完成塑造,得到与父类同样的实例属性和方法,然后再对其进行加工,加上子类自己的实例属性和方法。如果不调用 super 方法,子类就得不到 this 对象。</p> 
  <pre><code class="prism language-javascript"><span class="token keyword">class</span> <span class="token class-name">Point</span> <span class="token punctuation">{</span> <span class="token comment">/* ... */</span> <span class="token punctuation">}</span>

<span class="token keyword">class</span> <span class="token class-name">ColorPoint</span> <span class="token keyword">extends</span> <span class="token class-name">Point</span> <span class="token punctuation">{</span>
  <span class="token function">constructor</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

<span class="token keyword">let</span> cp <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ColorPoint</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// ReferenceError</span>
</code></pre> 
  <p>上面代码中,ColorPoint 继承了父类 Point,但是它的构造函数没有调用 super 方法,导致新建实例时报错。</p> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1282986530691891200"></div>
                    <script type="text/javascript" src="/views/front/js/chanyan.js"></script>
                    <!-- 文章页-底部 动态广告位 -->
                    <div class="youdao-fixed-ad" id="detail_ad_bottom"></div>
                </div>
                <div class="col-md-3">
                    <div class="row" id="ad">
                        <!-- 文章页-右侧1 动态广告位 -->
                        <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_1"> </div>
                        </div>
                        <!-- 文章页-右侧2 动态广告位 -->
                        <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_2"></div>
                        </div>
                        <!-- 文章页-右侧3 动态广告位 -->
                        <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_3"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="container">
        <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(ES6语法使用精华)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1891650482603094016.htm"
                           title="ubuntu下安装TFTP服务器" target="_blank">ubuntu下安装TFTP服务器</a>
                        <span class="text-muted">luoqice</span>
<a class="tag" taget="_blank" href="/search/linux%E7%BC%96%E7%A8%8B%E6%8A%80%E5%B7%A7/1.htm">linux编程技巧</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                        <div>在Ubuntu系统下安装和配置TFTP(TrivialFileTransferProtocol)服务器可以按照以下步骤进行:1.安装TFTP服务器软件包TFTP服务器通常使用tftpd-hpa软件包,你可以使用以下命令进行安装:sudoaptupdatesudoaptinstalltftpd-hpa2.配置TFTP服务器安装完成后,需要对TFTP服务器进行配置。配置文件位于/etc/default</div>
                    </li>
                    <li><a href="/article/1891650479155376128.htm"
                           title="DeepSeek —— 金融市场中的AI颠覆者 !!!" target="_blank">DeepSeek —— 金融市场中的AI颠覆者 !!!</a>
                        <span class="text-muted">云边有个稻草人</span>
<a class="tag" taget="_blank" href="/search/%E7%83%AD%E9%97%A8%E6%96%87%E7%AB%A0/1.htm">热门文章</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E9%87%91%E8%9E%8D/1.htm">金融</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/DeepSeek/1.htm">DeepSeek</a>
                        <div>目录云边有个稻草人-CSDN博客引言第1章:DeepSeek的技术概述第2章:DeepSeek对金融行业的影响2.1自动化与决策支持2.2风险评估与管理2.3金融市场预测2.4高频交易与量化分析第3章:展示如何利用DeepSeek进行不同的金融数据分析3.1市场情绪分析3.2新闻事件对股票价格的影响3.3使用DeepSeek进行量化策略回测3.4使用DeepSeek进行投资组合优化第4章:金融界专</div>
                    </li>
                    <li><a href="/article/1891650099973517312.htm"
                           title="KubeEdge 1.20.0 版本发布" target="_blank">KubeEdge 1.20.0 版本发布</a>
                        <span class="text-muted">laowangsen</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>KubeEdge1.20.0现已发布。新版本针对大规模、离线等边缘场景对边缘节点和应用的管理、运维等能力进行了增强,同时新增了多语言Mapper-Framework的支持。新增特性:支持批量节点操作多语言Mapper-Framework支持边缘keadmctl新增podslogs/exec/describe和Devicesget/edit/describe能力解耦边缘应用与节点组,支持使用Node</div>
                    </li>
                    <li><a href="/article/1891649847434473472.htm"
                           title="面向架构评估的质量属性" target="_blank">面向架构评估的质量属性</a>
                        <span class="text-muted">iamphp</span>
<a class="tag" taget="_blank" href="/search/%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1%E5%B8%88/1.htm">系统架构设计师</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E8%B4%A8%E9%87%8F%E5%B1%9E%E6%80%A7/1.htm">质量属性</a>
                        <div>为了评价一个软件系统,特别是软件系统的架构,需要进行架构评估。在架构评估过程中,评估人员所关注的是系统的质量属性。评估方法所普遍关注的质量属性有以下几种。1.性能性能(Performance)是指系统的响应能力,即要经过多长时间才能对某个事件做出响应,或者在某段事件内系统所能处理的事件的个数。经常用单位时间内所处理事务的数量或系统完成某个事务处理所需的时间来对性能进行定量表示。性能测试经常要使用基</div>
                    </li>
                    <li><a href="/article/1891648839513862144.htm"
                           title="提示词工程中的逻辑推理结构" target="_blank">提示词工程中的逻辑推理结构</a>
                        <span class="text-muted">由数入道</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E6%8F%90%E7%A4%BA%E8%AF%8D%E5%B7%A5%E7%A8%8B/1.htm">提示词工程</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E6%8F%90%E7%A4%BA%E8%AF%8D%E5%B7%A5%E7%A8%8B/1.htm">提示词工程</a>
                        <div>概念介绍:逻辑推理结构在提示词工程中是指通过系统化、精确化的推理方法,帮助生成内容时能够严谨且条理清晰地组织论点、论据及结论,确保思路顺畅且具有逻辑一致性。推理结构通常基于演绎法和归纳法两种思维方式,分别从一般到特殊和从特殊到一般两种方向进行推理,确保生成的内容具有深度、精确性,并能够在复杂的主题中提供清晰的解答或分析。使用场景:需要进行深度分析和推理的场景,尤其适用于以下内容:技术文档:需要精准</div>
                    </li>
                    <li><a href="/article/1891648587369082880.htm"
                           title="自制一个SD/TF的读卡器" target="_blank">自制一个SD/TF的读卡器</a>
                        <span class="text-muted">御坂0x1BF52号</span>
<a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a>
                        <div>(图片上的IC已经焊接,没有更新而已,实物图请点击下方链接查看)电路图、PCB、速度测试等请点击(使用立创EDA绘制)</div>
                    </li>
                    <li><a href="/article/1891647957548199936.htm"
                           title="【Perl脚本】第三部分:Perl数据结构" target="_blank">【Perl脚本】第三部分:Perl数据结构</a>
                        <span class="text-muted">今天你芯动了吗</span>
<a class="tag" taget="_blank" href="/search/perl/1.htm">perl</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/scala/1.htm">scala</a>
                        <div>系列文章目录文章目录系列文章目录标量数组散列Perl有且只有3种变量类型:标量(saclar)、数组(array)和散列(hash)标量使用my来声明标量,变量存储的内容可以是字符串,数字,引用,文件句柄等等,而且同一个标量可以先存储数字,然后存储字符串。注意:Perl的一些内建变量由全大写字母组成,所以我们最好避免创建全大写字母的变量名变量区分大小写,$abc和$Abc是两个变量标量赋值使用等号</div>
                    </li>
                    <li><a href="/article/1891647201361326080.htm"
                           title="在IntelliJIDEA中使用Gradle创建Web项目的步骤" target="_blank">在IntelliJIDEA中使用Gradle创建Web项目的步骤</a>
                        <span class="text-muted">大G哥</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/intellij-idea/1.htm">intellij-idea</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/ide/1.htm">ide</a>
                        <div>1.打开IntelliJIDEA启动IntelliJIDEA。2.创建新项目点击File>New>Project。在弹出的窗口中,选择Gradle作为项目类型。确保Java被选中。点击Next。3.配置项目GroupId:输入你的组织或项目组ID(例如:com.example)。ArtifactId:输入项目名称(例如:mywebapp)。点击Next。4.配置项目名称和位置Projectname</div>
                    </li>
                    <li><a href="/article/1891645424855478272.htm"
                           title="寄存器总结" target="_blank">寄存器总结</a>
                        <span class="text-muted">黑客Jack</span>
<a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/web%E5%AE%89%E5%85%A8/1.htm">web安全</a>
                        <div>寄存器8086CPU有14个寄存器它们的名称为:AX、BX、CX、DX、SI、DI、SP、BP、IP**、CS、DS、ES、**SS、PSW。8086CPU所有的寄存器都是16位的,可以存放两个字节。AX、BX、CX、DX通常用来存放一般性数据被称为通用寄存器。8086上一代CPU中的寄存器都是8位的;为保证兼容性,这四个寄存器都可以分为两个独立的8位寄存器使用。H高位(8-15)L低位(0-7)</div>
                    </li>
                    <li><a href="/article/1891642776697761792.htm"
                           title="Webpack 基础入门" target="_blank">Webpack 基础入门</a>
                        <span class="text-muted">懒羊羊我小弟</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E5%B7%A5%E7%A8%8B%E5%8C%96/1.htm">前端工程化</a><a class="tag" taget="_blank" href="/search/webpack/1.htm">webpack</a><a class="tag" taget="_blank" href="/search/rust/1.htm">rust</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/es6/1.htm">es6</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a>
                        <div>一、Webpack是什么Webpack是一款现代JavaScript应用程序的静态模块打包工具。在Web开发中,我们的项目会包含各种类型的文件,如JavaScript、CSS、图片等。Webpack可以将这些文件打包成一个或多个文件,以便在浏览器中高效加载。它就像是一个超级管家,把项目中的各种资源整理打包,让它们能更好地协同工作。二、为什么要使用Webpack代码拆分:可以将代码拆分成多个块,实现</div>
                    </li>
                    <li><a href="/article/1891641641899454464.htm"
                           title="Nginx 如何实现请求的缓存过期策略?" target="_blank">Nginx 如何实现请求的缓存过期策略?</a>
                        <span class="text-muted">zengson_g</span>
<a class="tag" taget="_blank" href="/search/Nginx/1.htm">Nginx</a><a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a><a class="tag" taget="_blank" href="/search/%E7%BC%93%E5%AD%98/1.htm">缓存</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a>
                        <div>关注博主️带你畅游技术世界,不错过每一次成长机会!文章目录Nginx如何实现请求的缓存过期策略?一、缓存的重要性与基本概念二、Nginx缓存过期策略的原理三、设置Nginx缓存过期时间四、基于变量的动态缓存过期策略五、使用第三方模块增强缓存功能六、缓存的更新与失效机制七、缓存命中率与性能监控八、实际应用中的注意事项Nginx如何实现请求的缓存过期策略?在当今快节奏的互联网世界中,网站和应用的性能优</div>
                    </li>
                    <li><a href="/article/1891641640183984128.htm"
                           title="Elasticsearch详解" target="_blank">Elasticsearch详解</a>
                        <span class="text-muted">久梦歌行</span>
<a class="tag" taget="_blank" href="/search/elasticsearch/1.htm">elasticsearch</a><a class="tag" taget="_blank" href="/search/jenkins/1.htm">jenkins</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a>
                        <div>Elasticsearch是什么Elasticsearch是使用Lucene为基础建立的开源可用全文搜索引擎,它可以快速地储存、搜索和分析海量数据Elasticsearch的特点和传统的关系数据库对比关系型数据库查询性能,数据量超过百万级千万级之后下降厉害,本质是索引的算法效率不行,B+树算法不如倒排索引算法高效。关系型数据库索引最左原则限制,查询条件字段不能任意组合,否则索引失效,相反Elast</div>
                    </li>
                    <li><a href="/article/1891636853182885888.htm"
                           title="1、Android概述" target="_blank">1、Android概述</a>
                        <span class="text-muted">守望178</span>
<a class="tag" taget="_blank" href="/search/Android/1.htm">Android</a>
                        <div>安卓(Android)是一种基于Linux的自由及开放源代码的操作系统。主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。Android操作系统最初由AndyRubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以</div>
                    </li>
                    <li><a href="/article/1891636600232800256.htm"
                           title="Maven 构建分发包与依赖管理" target="_blank">Maven 构建分发包与依赖管理</a>
                        <span class="text-muted">drebander</span>
<a class="tag" taget="_blank" href="/search/Maven/1.htm">Maven</a><a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>Maven是Java开发中广泛使用的构建和依赖管理工具,它不仅能帮助开发者高效地构建项目,还提供了强大的依赖管理和版本控制功能。通过Maven,你可以轻松地构建并发布JAR、WAR等分发包,并管理不同版本的依赖。本文将讲解如何使用Maven构建并发布JAR/WAR包,以及如何管理不同的发布版本,包括如何配置发布仓库、版本号管理和依赖范围。1.Maven构建分发包(JAR/WAR)1.1JAR包构建</div>
                    </li>
                    <li><a href="/article/1891636600996163584.htm"
                           title="Maven 中的 Artifact 与 GroupId:定义与使用" target="_blank">Maven 中的 Artifact 与 GroupId:定义与使用</a>
                        <span class="text-muted">drebander</span>
<a class="tag" taget="_blank" href="/search/Maven/1.htm">Maven</a><a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>1.什么是Maven的Artifact和GroupId?在Maven中,Artifact和GroupId是构建和管理项目依赖的核心概念,它们用来唯一标识一个Maven项目或库。理解这两个概念对于管理Maven项目的依赖关系、构建过程和版本控制至关重要。Artifact和GroupId结合构成了Maven依赖的唯一标识符,通常被称为坐标(Coordinate)。2.GroupId:组织标识符2.1G</div>
                    </li>
                    <li><a href="/article/1891635084449083392.htm"
                           title="模型/视图编程" target="_blank">模型/视图编程</a>
                        <span class="text-muted">潦潦</span>
<a class="tag" taget="_blank" href="/search/Qt/1.htm">Qt</a><a class="tag" taget="_blank" href="/search/qt/1.htm">qt</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>1.MVC包含模型(Model表示数据)、视图(View用户界面)、控制器(Controller界面对用户输入的反应方式)三部分,Qt中还引入了委托(Delegate,又称代理)来对用户输入进行灵活处理,使用它可以定制数据的渲染和编辑方式。QAbstractItemModel是模型的抽象基类TheQAbstractItemModelclassprovidestheabstractinterface</div>
                    </li>
                    <li><a href="/article/1891635085023703040.htm"
                           title="validation 实现参数校验" target="_blank">validation 实现参数校验</a>
                        <span class="text-muted">程序员老王wd</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>简述在Java中,参数校验是非常重要的,因为它可以确保方法或函数在执行时接收到的参数是合法的,有效的,从而提高代码的健壮性和安全性。参数校验可以防止无效的输入导致的异常或错误,同时也能减少因为无效参数导致的安全漏洞Java中的参数校验可以通过手动编写校验逻辑来实现,但这样会增加代码的复杂度和重复性。为了简化参数校验的实现,可以使用ValidationAPI,它是JavaEE平台的一部分,提供了一套</div>
                    </li>
                    <li><a href="/article/1891634580604121088.htm"
                           title="Fink与Hadoop的简介以及联系" target="_blank">Fink与Hadoop的简介以及联系</a>
                        <span class="text-muted">Bugkillers</span>
<a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a>
                        <div>Fink和Hadoop是两个常用于大数据处理的开源工具,它们可以搭配使用以构建高效的数据处理系统。一、Fink和Hadoop的关系Fink:1、Fink是一个分布式流处理框架,专注于实时数据处理。它支持高吞吐、低延迟的流处理,适用于实时分析、事件驱动应用等场景。2、Fink提供精确一次(exactly-once)语义,确保数据处理的准确性。Hadoop:1、Hadoop是一个分布式存储和批处理框架</div>
                    </li>
                    <li><a href="/article/1891633822718554112.htm"
                           title="Android中kotlin的Map简单使用方法" target="_blank">Android中kotlin的Map简单使用方法</a>
                        <span class="text-muted">RandomWrite</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/kotlin/1.htm">kotlin</a><a class="tag" taget="_blank" href="/search/Map%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95/1.htm">Map使用方法</a>
                        <div>在Kotlin中,‌Map是一种特殊类型的集合,‌用于存储键值对。‌使用Map可以方便地通过键来检索和存储值。1.创建Map使用mapOf函数创建不可变的Map。‌可以通过两种方式初始化键值对:‌使用to函数或Pair对象。‌例如:‌valmap=mapOf("Tom"to18,"Jerry"to12,"Jack"to20)//或者valmap2=mapOf(Pair("Tom",18),Pair</div>
                    </li>
                    <li><a href="/article/1891633318802288640.htm"
                           title="rpm:使用实例" target="_blank">rpm:使用实例</a>
                        <span class="text-muted">mzhan017</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%B9%B3%E5%8F%B0%E8%BF%90%E7%BB%B4/1.htm">云平台运维</a><a class="tag" taget="_blank" href="/search/rpm/1.htm">rpm</a>
                        <div>文章目录rpm源测试命令查看releasenote帮助redhat提供的源目录查看编译选项查看软件运行的配置文件建议查看当前软件的帮助文档都有哪些安装错误12安装32bitrpm安装老版本强制安装设置安装目录查询文件查看依赖关系安装rpm到特定目录安装rpm到特定目录2--root校验rpm的文件是否正确rpm2cpio查询rpmname查询文件权限错误错误Unabletochangerootdi</div>
                    </li>
                    <li><a href="/article/1891633192314662912.htm"
                           title="List把特定元素排在第一位" target="_blank">List把特定元素排在第一位</a>
                        <span class="text-muted">inner_peace8</span>
<a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/%E6%80%BB%E7%BB%93/1.htm">总结</a><a class="tag" taget="_blank" href="/search/%E9%9B%86%E5%90%88/1.htm">集合</a><a class="tag" taget="_blank" href="/search/List%E6%8A%8A%E7%89%B9%E5%AE%9A%E5%85%83%E7%B4%A0%E6%8E%92%E5%9C%A8%E7%AC%AC%E4%B8%80%E4%BD%8D/1.htm">List把特定元素排在第一位</a>
                        <div>人工智能,零基础入门!http://www.captainbed.net/inner有的时候会有这样的需求,就是从数据库查出来的list要做一些处理,比如部门成员列表,产品要求你把部门经理排在第一位,这个时候就可以用集合工具类下的自带方法,做法:需要遍历集合,找到这个元素在集合中的位置,然后使用Collections.swap(list,o,i)(O:为元素目前所在位置,i:为要放置的位置)方法来</div>
                    </li>
                    <li><a href="/article/1891632686712287232.htm"
                           title="Java 编码系列:集合框架(List、Set、Map 及其常用实现类)" target="_blank">Java 编码系列:集合框架(List、Set、Map 及其常用实现类)</a>
                        <span class="text-muted">pjx987</span>
<a class="tag" taget="_blank" href="/search/java%E7%BC%96%E7%A0%81/1.htm">java编码</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/list/1.htm">list</a><a class="tag" taget="_blank" href="/search/map/1.htm">map</a>
                        <div>引言在Java开发中,集合框架是不可或缺的一部分,它提供了存储和操作一组对象的工具。Java集合框架主要包括List、Set和Map接口及其常用的实现类。正确理解和使用这些集合类不仅可以提高代码的可读性和性能,还能避免一些常见的错误。本文将深入探讨Java集合框架的底层原理,并结合大厂的最佳实践,帮助读者掌握这些核心概念。1.List接口及其常用实现类1.1基本概念List接口表示一个有序的集合,</div>
                    </li>
                    <li><a href="/article/1891631553075802112.htm"
                           title="eniops库中pack函数使用方法" target="_blank">eniops库中pack函数使用方法</a>
                        <span class="text-muted">安安爸Chris</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/pytorch/1.htm">pytorch</a>
                        <div>pack就是打包。举个例子importtorchimporteinops#创建输入张量x=torch.randn(1,6,1,2)#形状(1,6,1,2)#使用pack打包,注意输入必须是数组,所以这里要加一个[]flatten,ps=einops.pack([x],'h*d')print("xshape:",x.shape)#输出:torch.Size([1,6,1,2])print("flat</div>
                    </li>
                    <li><a href="/article/1891631426999218176.htm"
                           title="【pytorch】norm的使用" target="_blank">【pytorch】norm的使用</a>
                        <span class="text-muted">安安爸Chris</span>
<a class="tag" taget="_blank" href="/search/pytorch/1.htm">pytorch</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a>
                        <div>torch.norm[deprecated]在torch.norm中,通过参数p来定制order主要有如下几类L1norm计算张量中所有数值之和L2norm计算张量中所有数值的平方和开根Frobeniusnorm计算张量中所有维度上所有数值的平方和开根Infinitynorm计算张量中有所数值绝对值最大Negativeinfinitynorm计算张量中所有数值绝对值最小importtorch#Cr</div>
                    </li>
                    <li><a href="/article/1891630041872265216.htm"
                           title="Qt模型/视图结构" target="_blank">Qt模型/视图结构</a>
                        <span class="text-muted">十年编程老舅</span>
<a class="tag" taget="_blank" href="/search/QT%E5%BC%80%E5%8F%91/1.htm">QT开发</a><a class="tag" taget="_blank" href="/search/qt/1.htm">qt</a><a class="tag" taget="_blank" href="/search/qt%E5%BC%80%E5%8F%91/1.htm">qt开发</a><a class="tag" taget="_blank" href="/search/Qt%E6%A8%A1%E5%9E%8B/1.htm">Qt模型</a><a class="tag" taget="_blank" href="/search/qt%E6%95%99%E7%A8%8B/1.htm">qt教程</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a>
                        <div>MVC设计模式是起源于Smalltalk的一种与用户界面相关的设计模式。通过使用此模式,可以有效地分离数据和用户界面。MVC设计模式包括三个元素:表示数据的模型(Model)、表示用户界面的视图(View)和定义了用户在界面上操作的控制器(Controller)。与MVC设计模式类似,Qt引入了模型/视图结构用于完成数据与界面的分离,即InterView框架。但不同的是,Qt的InterView框</div>
                    </li>
                    <li><a href="/article/1891628273658556416.htm"
                           title="NPM如何更换淘宝镜像——Node.js国内镜像配置教程" target="_blank">NPM如何更换淘宝镜像——Node.js国内镜像配置教程</a>
                        <span class="text-muted">孽小倩</span>
<a class="tag" taget="_blank" href="/search/nodejs/1.htm">nodejs</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a><a class="tag" taget="_blank" href="/search/npm/1.htm">npm</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>在国内使用npm安装Node.js包时,由于网络环境的原因,下载速度可能非常慢。为了解决这个问题,很多开发者会选择使用淘宝镜像(现在由npmmirror.com维护)。本文将带你一步一步完成更换npm源为淘宝镜像的配置,提升安装速度。一、为什么要更换淘宝镜像?默认情况下,npm使用的是官方源,这个源的速度在国内相对较慢,特别是在一些需要下载大量依赖的情况下,可能会出现下载失败或者等待时间过长的情况</div>
                    </li>
                    <li><a href="/article/1891628147342897152.htm"
                           title="Linux内核中的双向链表list_head" target="_blank">Linux内核中的双向链表list_head</a>
                        <span class="text-muted">ioriwc</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E9%93%BE%E8%A1%A8/1.htm">链表</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>双向链表在Linux内核中使用非常多,它是内核各种队列、栈的基础,相关的结构定义和函数均在include/linux/list.h中定义,下面介绍下其原理及使用方法。1、结构体定义structlist_head{structlist_head*next,*prev;};双向链表结构体很简单,有prev和next两个指针,分别指向链表的前一节点和后一节点。这里专门讲下空链表,空链表指链表的prev和</div>
                    </li>
                    <li><a href="/article/1891626631714369536.htm"
                           title="探索Node.js的原生插件新境界:使用`node-gyp`" target="_blank">探索Node.js的原生插件新境界:使用`node-gyp`</a>
                        <span class="text-muted">洪新龙</span>

                        <div>探索Node.js的原生插件新境界:使用node-gypnode-gypNode.jsnativeaddonbuildtool项目地址:https://gitcode.com/gh_mirrors/no/node-gyp在Node.js的生态系统中,将高性能的C/C++代码融入到JavaScript世界已经成为提升应用性能的关键手段。今天,我们要向大家隆重推荐一个不可或缺的工具——node-gyp</div>
                    </li>
                    <li><a href="/article/1891626632213491712.htm"
                           title="android-为手机设置全局代理" target="_blank">android-为手机设置全局代理</a>
                        <span class="text-muted">carden_coder</span>
<a class="tag" taget="_blank" href="/search/agent/1.htm">agent</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                        <div>有这么一个需求,需要给手机设置全局代理。百度到的结果都是设置后,如果需要清除代理的话,需要重启手机,这里使用的方式是不需要重启的方式后实现方式如下:设置代理:String[]strings={"settingsputglobalhttp_proxy"+ip+":"+port};ShellUtils.CommandResultcommandResult2=ShellUtils.execCmd(str</div>
                    </li>
                    <li><a href="/article/1891624865522315264.htm"
                           title="贪吃蛇案例" target="_blank">贪吃蛇案例</a>
                        <span class="text-muted">The_era_achievs_hero</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>题十:贪吃蛇还原要求:只需对所给js代码的部分函数进行还原最终实现效果即可原理:首先获得蛇的头部定位,再根据键盘改变头部的位置。更新蛇的身体数组,删除蛇身体的最后一个元素,并生成新数组(头部作为新数组的第一个元素)//移动蛇的头部nextStep(){//TODO:待补充代码////只需完善该函数实现功能,不允许修改别处代码//使用对象展开运算符,复制当前蛇的头部位置consthead={...t</div>
                    </li>
                                <li><a href="/article/85.htm"
                                       title="ztree异步加载" target="_blank">ztree异步加载</a>
                                    <span class="text-muted">3213213333332132</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a><a class="tag" taget="_blank" href="/search/json/1.htm">json</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/ztree/1.htm">ztree</a>
                                    <div>相信新手用ztree的时候,对异步加载会有些困惑,我开始的时候也是看了API花了些时间才搞定了异步加载,在这里分享给大家。 
我后台代码生成的是json格式的数据,数据大家按各自的需求生成,这里只给出前端的代码。 
 
设置setting,这里只关注async属性的配置 
 

            var setting = {
            	//异步加载配置	
      </div>
                                </li>
                                <li><a href="/article/212.htm"
                                       title="thirft rpc 具体调用流程" target="_blank">thirft rpc 具体调用流程</a>
                                    <span class="text-muted">BlueSkator</span>
<a class="tag" taget="_blank" href="/search/%E4%B8%AD%E9%97%B4%E4%BB%B6/1.htm">中间件</a><a class="tag" taget="_blank" href="/search/rpc/1.htm">rpc</a><a class="tag" taget="_blank" href="/search/thrift/1.htm">thrift</a>
                                    <div>Thrift调用过程中,Thrift客户端和服务器之间主要用到传输层类、协议层类和处理类三个主要的核心类,这三个类的相互协作共同完成rpc的整个调用过程。在调用过程中将按照以下顺序进行协同工作: 
        (1)     将客户端程序调用的函数名和参数传递给协议层(TProtocol),协议</div>
                                </li>
                                <li><a href="/article/339.htm"
                                       title="异或运算推导, 交换数据" target="_blank">异或运算推导, 交换数据</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/%E5%BC%82%E6%88%96/1.htm">异或</a><a class="tag" taget="_blank" href="/search/%5E/1.htm">^</a>
                                    <div>/*
 * 5 0101
 * 9 1010
 *
 * 5 ^ 5
 * 0101
 * 0101
 * -----
 * 0000
 * 得出第一个规律: 相同的数进行异或, 结果是0
 *
 * 9 ^ 5 ^ 6
 * 1010
 * 0101
 * ----
 * 1111
 *
 * 1111
 * 0110
 * ----
 * 1001
 </div>
                                </li>
                                <li><a href="/article/466.htm"
                                       title="事件源对象" target="_blank">事件源对象</a>
                                    <span class="text-muted">周华华</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a>
                                    <div><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml&q</div>
                                </li>
                                <li><a href="/article/593.htm"
                                       title="MySql配置及相关命令" target="_blank">MySql配置及相关命令</a>
                                    <span class="text-muted">g21121</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a>
                                    <div>        MySQL安装完毕后我们需要对它进行一些设置及性能优化,主要包括字符集设置,启动设置,连接优化,表优化,分区优化等等。 
  
        一 修改MySQL密码及用户 
     </div>
                                </li>
                                <li><a href="/article/720.htm"
                                       title="[简单]poi删除excel 2007超链接" target="_blank">[简单]poi删除excel 2007超链接</a>
                                    <span class="text-muted">53873039oycg</span>
<a class="tag" taget="_blank" href="/search/Excel/1.htm">Excel</a>
                                    <div>      采用解析sheet.xml方式删除超链接,缺点是要打开文件2次,代码如下: 
     
public void removeExcel2007AllHyperLink(String filePath) throws Exception {
		OPCPackage ocPkg = OPCPac</div>
                                </li>
                                <li><a href="/article/847.htm"
                                       title="Struts2添加 open flash chart" target="_blank">Struts2添加 open flash chart</a>
                                    <span class="text-muted">云端月影</span>

                                    <div>准备以下开源项目: 
1. Struts 2.1.6 
2. Open Flash Chart 2 Version 2 Lug Wyrm Charmer (28th, July 2009) 
3. jofc2,这东西不知道是没做好还是什么意思,好像和ofc2不怎么匹配,最好下源码,有什么问题直接改。 
4. log4j 
 
用eclipse新建动态网站,取名OFC2Demo,将Struts2 l</div>
                                </li>
                                <li><a href="/article/974.htm"
                                       title="spring包详解" target="_blank">spring包详解</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a>
                                    <div>  
下载的spring包中文件及各种包众多,在项目中往往只有部分是我们必须的,如果不清楚什么时候需要什么包的话,看看下面就知道了。 aspectj目录下是在Spring框架下使用aspectj的源代码和测试程序文件。Aspectj是java最早的提供AOP的应用框架。 dist 目录下是Spring 的发布包,关于发布包下面会详细进行说明。 docs&nb</div>
                                </li>
                                <li><a href="/article/1101.htm"
                                       title="网站推广之seo概念" target="_blank">网站推广之seo概念</a>
                                    <span class="text-muted">antonyup_2006</span>
<a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">应用服务器</a><a class="tag" taget="_blank" href="/search/%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8E/1.htm">搜索引擎</a><a class="tag" taget="_blank" href="/search/Google/1.htm">Google</a>
                                    <div>   持续开发一年多的b2c网站终于在08年10月23日上线了。作为开发人员的我在修改bug的同时,准备了解下网站的推广分析策略。 
    所谓网站推广,目的在于让尽可能多的潜在用户了解并访问网站,通过网站获得有关产品和服务等信息,为最终形成购买决策提供支持。 
    网站推广策略有很多,seo,email,adv</div>
                                </li>
                                <li><a href="/article/1228.htm"
                                       title="单例模式,sql注入,序列" target="_blank">单例模式,sql注入,序列</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F/1.htm">单例模式</a><a class="tag" taget="_blank" href="/search/%E5%BA%8F%E5%88%97/1.htm">序列</a><a class="tag" taget="_blank" href="/search/sql%E6%B3%A8%E5%85%A5/1.htm">sql注入</a><a class="tag" taget="_blank" href="/search/%E9%A2%84%E7%BC%96%E8%AF%91/1.htm">预编译</a>
                                    <div>  
序列在前面写过有关的博客,也有过总结,但是今天在做一个JDBC操作数据库的相关内容时 需要使用序列创建一个自增长的字段  居然不会了,所以将序列写在本篇的前面 
  
 1,序列是一个保存数据连续的增长的一种方式; 
序列的创建; 
 CREATE SEQUENCE seq_pro
  2  INCREMENT BY 1 -- 每次加几个
  3 </div>
                                </li>
                                <li><a href="/article/1355.htm"
                                       title="Mockito单元测试实例" target="_blank">Mockito单元测试实例</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/1.htm">单元测试</a><a class="tag" taget="_blank" href="/search/mockito/1.htm">mockito</a>
                                    <div>Mockito单元测试实例: 
public class SettingServiceTest {
    
    private List<PersonDTO> personList = new ArrayList<PersonDTO>();
    
    @InjectMocks
    private SettingPojoService settin</div>
                                </li>
                                <li><a href="/article/1482.htm"
                                       title="精通Oracle10编程SQL(9)使用游标" target="_blank">精通Oracle10编程SQL(9)使用游标</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/plsql/1.htm">plsql</a>
                                    <div>/*
 *使用游标
 */
--显示游标
--在显式游标中使用FETCH...INTO语句
DECLARE
   CURSOR emp_cursor is 
      select ename,sal from emp where deptno=1;
   v_ename emp.ename%TYPE;
   v_sal emp.sal%TYPE;
begin
   ope</div>
                                </li>
                                <li><a href="/article/1609.htm"
                                       title="【Java语言】动态代理" target="_blank">【Java语言】动态代理</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/java%E8%AF%AD%E8%A8%80/1.htm">java语言</a>
                                    <div>  JDK接口动态代理 
JDK自带的动态代理通过动态的根据接口生成字节码(实现接口的一个具体类)的方式,为接口的实现类提供代理。被代理的对象和代理对象通过InvocationHandler建立关联 
  
package com.tom;

import com.tom.model.User;
import com.tom.service.IUserService;
</div>
                                </li>
                                <li><a href="/article/1736.htm"
                                       title="Java通信之URL通信基础" target="_blank">Java通信之URL通信基础</a>
                                    <span class="text-muted">白糖_</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/jdk/1.htm">jdk</a><a class="tag" taget="_blank" href="/search/webservice/1.htm">webservice</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/1.htm">网络协议</a><a class="tag" taget="_blank" href="/search/ITeye/1.htm">ITeye</a>
                                    <div>java对网络通信以及提供了比较全面的jdk支持,java.net包能让程序员直接在程序中实现网络通信。 
在技术日新月异的现在,我们能通过很多方式实现数据通信,比如webservice、url通信、socket通信等等,今天简单介绍下URL通信。 
学习准备:建议首先学习java的IO基础知识 
  
URL是统一资源定位器的简写,URL可以访问Internet和www,可以通过url</div>
                                </li>
                                <li><a href="/article/1863.htm"
                                       title="博弈Java讲义 - Java线程同步 (1)" target="_blank">博弈Java讲义 - Java线程同步 (1)</a>
                                    <span class="text-muted">boyitech</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/%E5%90%8C%E6%AD%A5/1.htm">同步</a><a class="tag" taget="_blank" href="/search/%E9%94%81/1.htm">锁</a>
                                    <div>  
在并发编程中经常会碰到多个执行线程共享资源的问题。例如多个线程同时读写文件,共用数据库连接,全局的计数器等。如果不处理好多线程之间的同步问题很容易引起状态不一致或者其他的错误。 
   同步不仅可以阻止一个线程看到对象处于不一致的状态,它还可以保证进入同步方法或者块的每个线程,都看到由同一锁保护的之前所有的修改结果。处理同步的关键就是要正确的识别临界条件(cri</div>
                                </li>
                                <li><a href="/article/1990.htm"
                                       title="java-给定字符串,删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个。" target="_blank">java-给定字符串,删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个。</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>

public class DeleteExtraSpace {

	/**
	 * 题目:给定字符串,删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个。
	 * 方法1.用已有的String类的trim和replaceAll方法
	 * 方法2.全部用正则表达式,这个我不熟
	 * 方法3.“重新发明轮子”,从头遍历一次
	 */
	public static v</div>
                                </li>
                                <li><a href="/article/2117.htm"
                                       title="An error has occurred.See the log file错误解决!" target="_blank">An error has occurred.See the log file错误解决!</a>
                                    <span class="text-muted">Kai_Ge</span>
<a class="tag" taget="_blank" href="/search/MyEclipse/1.htm">MyEclipse</a>
                                    <div>今天早上打开MyEclipse时,自动关闭!弹出An error has occurred.See the log file错误提示! 
很郁闷昨天启动和关闭还好着!!!打开几次依然报此错误,确定不是眼花了! 
打开日志文件!找到当日错误文件内容: 
--------------------------------------------------------------------------</div>
                                </li>
                                <li><a href="/article/2244.htm"
                                       title="[矿业与工业]修建一个空间矿床开采站要多少钱?" target="_blank">[矿业与工业]修建一个空间矿床开采站要多少钱?</a>
                                    <span class="text-muted">comsci</span>

                                    <div> 
       地球上的钛金属矿藏已经接近枯竭........... 
 
       我们在冥王星的一颗卫星上面发现一些具有开采价值的矿床..... 
 
       那么,现在要编制一个预算,提交给财政部门..</div>
                                </li>
                                <li><a href="/article/2371.htm"
                                       title="解析Google Map Routes" target="_blank">解析Google Map Routes</a>
                                    <span class="text-muted">dai_lm</span>
<a class="tag" taget="_blank" href="/search/google+api/1.htm">google api</a>
                                    <div>为了获得从A点到B点的路劲,经常会使用Google提供的API,例如 
[url] 
http://maps.googleapis.com/maps/api/directions/json?origin=40.7144,-74.0060&destination=47.6063,-122.3204&sensor=false 
[/url] 
从返回的结果上,大致可以了解应该怎么走,但</div>
                                </li>
                                <li><a href="/article/2498.htm"
                                       title="SQL还有多少“理所应当”?" target="_blank">SQL还有多少“理所应当”?</a>
                                    <span class="text-muted">datamachine</span>
<a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a>
                                    <div>转贴存档,原帖地址:http://blog.chinaunix.net/uid-29242841-id-3968998.html、http://blog.chinaunix.net/uid-29242841-id-3971046.html! 
 
------------------------------------华丽的分割线-------------------------------- 
</div>
                                </li>
                                <li><a href="/article/2625.htm"
                                       title="Yii使用Ajax验证时,如何设置某些字段不需要验证" target="_blank">Yii使用Ajax验证时,如何设置某些字段不需要验证</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a><a class="tag" taget="_blank" href="/search/yii/1.htm">yii</a>
                                    <div>经常像你注册页面,你可能非常希望只需要Ajax去验证用户名和Email,而不需要使用Ajax再去验证密码,默认如果你使用Yii 内置的ajax验证Form,例如: 
$form=$this->beginWidget('CActiveForm', array(        'id'=>'usuario-form',&</div>
                                </li>
                                <li><a href="/article/2752.htm"
                                       title="使用git同步网站代码" target="_blank">使用git同步网站代码</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/crontab/1.htm">crontab</a><a class="tag" taget="_blank" href="/search/git/1.htm">git</a>
                                    <div>转自:http://ued.ctrip.com/blog/?p=3646?tn=gongxinjun.com 
  
管理一网站,最开始使用的虚拟空间,采用提供商支持的ftp上传网站文件,后换用vps,vps可以自己搭建ftp的,但是懒得搞,直接使用scp传输文件到服务器,现在需要更新文件到服务器,使用scp真的很烦。发现本人就职的公司,采用的git+rsync的方式来管理、同步代码,遂</div>
                                </li>
                                <li><a href="/article/2879.htm"
                                       title="sql基本操作" target="_blank">sql基本操作</a>
                                    <span class="text-muted">蕃薯耀</span>
<a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/sql%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C/1.htm">sql基本操作</a><a class="tag" taget="_blank" href="/search/sql%E5%B8%B8%E7%94%A8%E6%93%8D%E4%BD%9C/1.htm">sql常用操作</a>
                                    <div>sql基本操作 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
蕃薯耀 2015年6月1日 17:30:33 星期一 
  
  
&</div>
                                </li>
                                <li><a href="/article/3006.htm"
                                       title="Spring4+Hibernate4+Atomikos3.3多数据源事务管理" target="_blank">Spring4+Hibernate4+Atomikos3.3多数据源事务管理</a>
                                    <span class="text-muted">hanqunfeng</span>
<a class="tag" taget="_blank" href="/search/Hibernate4/1.htm">Hibernate4</a>
                                    <div>Spring3+后不再对JTOM提供支持,所以可以改用Atomikos管理多数据源事务。Spring2.5+Hibernate3+JTOM参考:http://hanqunfeng.iteye.com/blog/1554251Atomikos官网网站:http://www.atomikos.com/   一.pom.xml 
<dependency>
			<</div>
                                </li>
                                <li><a href="/article/3133.htm"
                                       title="jquery中两个值得注意的方法one()和trigger()方法" target="_blank">jquery中两个值得注意的方法one()和trigger()方法</a>
                                    <span class="text-muted">jackyrong</span>
<a class="tag" taget="_blank" href="/search/trigger/1.htm">trigger</a>
                                    <div>  在jquery中,有两个值得注意但容易忽视的方法,分别是one()方法和trigger()方法,这是从国内作者<<jquery权威指南》一书中看到不错的介绍 
 
 
1) one方法 
    one方法的功能是让所选定的元素绑定一个仅触发一次的处理函数,格式为 
   one(type,${data},fn) 
&nb</div>
                                </li>
                                <li><a href="/article/3260.htm"
                                       title="拿工资不仅仅是让你写代码的" target="_blank">拿工资不仅仅是让你写代码的</a>
                                    <span class="text-muted">lampcy</span>
<a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E5%92%A8%E8%AF%A2/1.htm">咨询</a>
                                    <div>这是我对团队每个新进员工说的第一件事情。这句话的意思是,我并不关心你是如何快速完成任务的,哪怕代码很差,只要它像救生艇通气门一样管用就行。这句话也是我最喜欢的座右铭之一。 
这个说法其实很合理:我们的工作是思考客户提出的问题,然后制定解决方案。思考第一,代码第二,公司请我们的最终目的不是写代码,而是想出解决方案。 
话粗理不粗。 
付你薪水不是让你来思考的,也不是让你来写代码的,你的目的是交付产品</div>
                                </li>
                                <li><a href="/article/3387.htm"
                                       title="架构师之对象操作----------对象的效率复制和判断是否全为空" target="_blank">架构师之对象操作----------对象的效率复制和判断是否全为空</a>
                                    <span class="text-muted">nannan408</span>
<a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84%E5%B8%88/1.htm">架构师</a>
                                    <div>1.前言。 
  如题。 
2.代码。 
 (1)对象的复制,比spring的beanCopier在大并发下效率要高,利用net.sf.cglib.beans.BeanCopier 
 

Src src=new Src();
BeanCopier beanCopier = BeanCopier.create(Src.class, Des.class, false);
      </div>
                                </li>
                                <li><a href="/article/3514.htm"
                                       title="ajax 被缓存的解决方案" target="_blank">ajax 被缓存的解决方案</a>
                                    <span class="text-muted">Rainbow702</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a><a class="tag" taget="_blank" href="/search/cache/1.htm">cache</a><a class="tag" taget="_blank" href="/search/%E7%BC%93%E5%AD%98/1.htm">缓存</a>
                                    <div>使用jquery的ajax来发送请求进行局部刷新画面,各位可能都做过。 
今天碰到一个奇怪的现象,就是,同一个ajax请求,在chrome中,不论发送多少次,都可以发送至服务器端,而不会被缓存。但是,换成在IE下的时候,发现,同一个ajax请求,会发生被缓存的情况,只有第一次才会被发送至服务器端,之后的不会再被发送。郁闷。 
解决方法如下: 
① 直接使用 JQuery提供的 “cache”参数,</div>
                                </li>
                                <li><a href="/article/3641.htm"
                                       title="修改date.toLocaleString()的警告" target="_blank">修改date.toLocaleString()的警告</a>
                                    <span class="text-muted">tntxia</span>
<a class="tag" taget="_blank" href="/search/String/1.htm">String</a>
                                    <div>  
我们在写程序的时候,经常要查看时间,所以我们经常会用到date.toLocaleString(),但是date.toLocaleString()是一个过时 的API,代替的方法如下: 
  
package com.tntxia.htmlmaker.util;

import java.text.SimpleDateFormat;
import java.util.</div>
                                </li>
                                <li><a href="/article/3768.htm"
                                       title="项目完成后的小总结" target="_blank">项目完成后的小总结</a>
                                    <span class="text-muted">xiaomiya</span>
<a class="tag" taget="_blank" href="/search/js/1.htm">js</a><a class="tag" taget="_blank" href="/search/%E6%80%BB%E7%BB%93/1.htm">总结</a><a class="tag" taget="_blank" href="/search/%E9%A1%B9%E7%9B%AE/1.htm">项目</a>
                                    <div>项目完成了,突然想做个总结但是有点无从下手了。 
做之前对于客户端给的接口很模式。然而定义好了格式要求就如此的愉快了。 
先说说项目主要实现的功能吧 
1,按键精灵 
2,获取行情数据 
3,各种input输入条件判断 
4,发送数据(有json格式和string格式) 
5,获取预警条件列表和预警结果列表, 
6,排序, 
7,预警结果分页获取 
8,导出文件(excel,text等) 
9,修</div>
                                </li>
                </ul>
            </div>
        </div>
    </div>

<div>
    <div class="container">
        <div class="indexes">
            <strong>按字母分类:</strong>
            <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a
                href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a
                href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a
                href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a
                href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a
                href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a
                href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a
                href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a
                href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a>
        </div>
    </div>
</div>
<footer id="footer" class="mb30 mt30">
    <div class="container">
        <div class="footBglm">
            <a target="_blank" href="/">首页</a> -
            <a target="_blank" href="/custom/about.htm">关于我们</a> -
            <a target="_blank" href="/search/Java/1.htm">站内搜索</a> -
            <a target="_blank" href="/sitemap.txt">Sitemap</a> -
            <a target="_blank" href="/custom/delete.htm">侵权投诉</a>
        </div>
        <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.
<!--            <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>-->
        </div>
    </div>
</footer>
<!-- 代码高亮 -->
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script>
<link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/>
<script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script>





</body>

</html>