国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Table of Contents
New features of ES6" >New features of ES6
1, let and const" >1, let and const
2. symbol" >2. symbol
3. Template String" >3. Template String
3.1 New string method (supplementary) " > 3.1 New string method (supplementary)
4. Destructuring expression" >4. Destructuring expression
4.1 Array destructuring%%PRE_BLOCK_6%% " > 4.1 Array destructuring%%PRE_BLOCK_6%%
4.2 Object destructuring" >4.2 Object destructuring
5. Object aspect" >5. Object aspect
Map and Set belong to Newly added objects in es6" >##5.1 Map and SetMap and Set belong to Newly added objects in es6
The Map object is used to save key-value pairs. Any value supported by JavaScript can be used as a key. Or a value. " >5.1.1 MapThe Map object is used to save key-value pairs. Any value supported by JavaScript can be used as a key. Or a value.
can be understood as the Set collection object of the backend" >5.1.2 Set can be understood as the Set collection object of the backend
5.3 數(shù)組的新方法" >5.3 數(shù)組的新方法
5.3.1 Array.from()方法" >5.3.1 Array.from()方法
5.3.2 includes()方法" >5.3.2 includes()方法
5.3.3 map()、filter() 方法" >5.3.3 map()、filter() 方法
5.3.4 forEach()方法" >5.3.4 forEach()方法
5.3.4 find()方法" >5.3.4 find()方法
5.3.6 some()、every() 方法" >5.3.6 some()、every() 方法
5.4 object的新方法" >5.4 object的新方法
5.4.1 Object.is()" >5.4.1 Object.is()
5.4.2 Object.assign()" >5.4.2 Object.assign()
5.4.3 Object.keys()、Object.values()、Object.entries()" >5.4.3 Object.keys()、Object.values()、Object.entries()
5.5 對(duì)象聲明簡(jiǎn)寫" >5.5 對(duì)象聲明簡(jiǎn)寫
5.6 …(對(duì)象擴(kuò)展符)" >5.6 …(對(duì)象擴(kuò)展符)
6、函數(shù)方面" >6、函數(shù)方面
6.1 參數(shù)默認(rèn)值" >6.1 參數(shù)默認(rèn)值
6.2 箭頭函數(shù)" >6.2 箭頭函數(shù)
6.3 箭頭函數(shù)和普通函數(shù)最大的區(qū)別在于其內(nèi)部this永遠(yuǎn)指向其父級(jí)對(duì)象的this。(重點(diǎn))" >6.3 箭頭函數(shù)和普通函數(shù)最大的區(qū)別在于其內(nèi)部this永遠(yuǎn)指向其父級(jí)對(duì)象的this。(重點(diǎn))
7、class(類)" >7、class(類)
8、promise和proxy" >8、promise和proxy
9、模塊化" >9、模塊化
Home Web Front-end Front-end Q&A What are the new features of es6?

What are the new features of es6?

Jan 06, 2023 pm 02:15 PM
es6

The new features of es6 are: 1. let and const; 2. symbol; 3. Template string; 4. Destructuring expression; 5. Object aspects, such as Map and Set; 6. Function aspects, such as parameters Default value and arrow function; 7. class keyword; 8. promise and proxy; 9. Modularization; 10. Operator.

What are the new features of es6?

# The operating environment of this tutorial: Windows 10 system, ECMAScript version 6 , Dell G3 computer.

What are the new features of es6?

New features of ES6

1, let and const

As mentioned before:

https: //m.miracleart.cn/js-tutorial-499866.html

2. symbol

Symbol is a new basic symbol introduced in ES6 A data type used to represent a unique value and cannot be operated with other data types. It is the seventh data type in JavaScript, alongside undefined, null, Number, String, Boolean, and Object.

You can create a Symbol value like this:

const a = Symbol();
console.log(a);  //Symbol()

//因?yàn)镾ymbol是基本數(shù)據(jù)類型,而不是對(duì)象,不能 new 。
const a = new Symbol();//報(bào)錯(cuò),Symbol is not a constructor

After using Symbol() to create a Symbol type value and assign it to a variable, you will get a unique value in memory. Now except through variable a, no one can recreate this value in any scope

const a = Symbol();const b = Symbol();

Memory deconstruction diagram


What are the new features of es6?

3. Template String

    Before ES6, handling template strings:
  • Build templates by "\" and " "
  • For ES6:
  • Use
    ${} to define; backtick
    (``) can be done directly;
  • <script>
          url="xxxxxx"
           // es6之前
           let html="<div>"+
                      " <a>"+url+"</a>"+
                   "</div>";
    		//es6
           let eshtml=`<div>
                       <a>${url}</a>
                   </div>`</script>
very easy to use

3.1 New string method (supplementary)

  • includes() Determine whether the string contains the parameter string and return a boolean value.
  • startsWith() / endsWith(), determine whether the string starts or ends with the parameter string. Returns a boolean value. These two methods can have a second parameter, a number, indicating the position to start the search.
  • let str = &#39;blue,red,orange,white&#39;;str.includes(&#39;blue&#39;);
    //truestr.startsWith(&#39;blue&#39;);
    //true
    str.endsWith(&#39;blue&#39;);
    //false
  • repeat()The method returns a new string the specified number of times.
  • console.log(&#39;hello&#39;.repeat(2));   
    //&#39;hellohello&#39;
  • padStart()/padEnd(), use the parameter string to complete the string from the front or back according to the given length, and return a new string.
  • let arr = &#39;hell&#39;;console.log(arr.padEnd(5,&#39;o&#39;));  
    //&#39;hello&#39;console.log(arr.padEnd(6,&#39;o&#39;));  
    //&#39;helloo&#39;console.log(arr.padEnd(6));  
    //&#39;hell  &#39;,如果沒(méi)有指定將用空格代替
    console.log(arr.padStart(5,&#39;o&#39;));  
    //&#39;ohell&#39;

4. Destructuring expression

Destructuring assignment is an extension of the assignment operator. It is a pattern matching for an

array or object, and then assigns values ??to the variables in it.
String, and the new Map and Set added in ES6 can all use destructuring expressions

4.1 Array destructuring
let [a,b,c] = [1,2,3];console.log(a,b,c);    //1,2,3
 let [a,b,c] = [1,,3];console.log(a,b,c);    //1,undefined,3
 let [a,,b] = [1,2,3];console.log(a,b);//1,3
 let [a,..b] = [1,2,3];  
 //...是剩余運(yùn)算符,表示賦值運(yùn)算符右邊除第一個(gè)值外剩余的都賦值給b
 console.log(a,b);
 //1,[2,3]

4.2 Object destructuring

The destructuring assignment of an object is similar to that of an array, but the variable name on the left needs to use the attribute name of the object, and use curly brackets { } instead of square brackets []

let obj = { 
	name: "ren", 
	age: 12, 
	sex: "male" };let { name, age, sex } = obj;console.log(name, age, sex); 
	//&#39;ren&#39; 12 &#39;male&#39;let { name: myName, age: myAge, sex: mySex } = obj; 
	//自定義變量名console.log(myName, myAge, mySex); 
	//&#39;ren&#39; 12 &#39;male&#39;

5. Object aspect

##5.1 Map and SetMap and Set belong to Newly added objects in es6

5.1.1 MapThe Map object is used to save key-value pairs. Any value supported by JavaScript can be used as a key. Or a value.

Different from objects,


    object keys can only be
  • strings

    or ES6 symbol values, while Map can be any value.

  • The Map object has a
  • size attribute

    , which stores the number of key-value pairs, while the object object has no similar attribute.

    let myMap = new Map([[&#39;name&#39;,&#39;ren&#39;],[&#39;age&#39;,12]]);console.log(myMap);  
    //{&#39;name&#39;=>&#39;ren&#39;,&#39;age&#39;=>12}myMap.set(&#39;sex&#39;,&#39;male&#39;);console.log(myMap);  
    //{&#39;name&#39;=>&#39;ren&#39;,&#39;age&#39;=>12,&#39;sex&#39;=>&#39;male&#39;}console.log(myMap.size);  
    //3myMap.get(&#39;name&#39;);  //&#39;ren&#39;myMap.has(&#39;age&#39;); 
     //truemyMap.delete(&#39;age&#39;);  
     //truemyMap.has(&#39;age&#39;);  
     //falsemyMap.get(&#39;age&#39;);  
     //undefined

5.1.2 Set can be understood as the Set collection object of the backend

The Set object is similar to the Map object, but it stores Not a key-value pair. Similar to an array, but its

each element is unique
.

let mySet = new Set([1,2,3]);
//里面要傳一個(gè)數(shù)組,否則會(huì)報(bào)錯(cuò)console.log(mySet);  
//{1,2,3}mySet.add(4);console.log(mySet);  
//{1,2,3,4}mySet.delete(1);  
//truemySet.has(1);  
//falseconsole.log(mySet);  
//{2,3,4}
Using the characteristics of Set object

uniqueness

, you can easily achieve duplication of arrays

let arr = [1,1,2,3,4,4];let mySet = new Set(arr);
let newArr = Array.from(mySet);console.log(newArr);  
//[1,2,3,4]

5.3 數(shù)組的新方法

  • 新增的方法有:
  1. Array.from()是內(nèi)置對(duì)象Array的方法,實(shí)例數(shù)組不能調(diào)用
  2. includes() 參數(shù):數(shù)值 -------- 返回值:true/false
  3. map()、filter() 參數(shù):函數(shù)-------- 返回值:數(shù)組
  4. forEach() 參數(shù):函數(shù)-------- 返回值:undefined
  5. find() 參數(shù):函數(shù)-------- 返回值:數(shù)值
  6. some()、every() 參數(shù):函數(shù)-------- 返回值:true/false

5.3.1 Array.from()方法

Array.from()方法可以將可迭代對(duì)象轉(zhuǎn)換為新的數(shù)組。

  • 函數(shù)可接受3個(gè)參數(shù)(后兩個(gè)參數(shù)可以沒(méi)有):
    • 第一個(gè)表示將被轉(zhuǎn)換的可迭代對(duì)象(如果只有一個(gè)參數(shù)就是把形參轉(zhuǎn)變成數(shù)組)
    • 第二個(gè)是回調(diào)函數(shù),將對(duì)每個(gè)數(shù)組元素應(yīng)用該回調(diào)函數(shù),然后返回新的值到新數(shù)組,
    • 第三個(gè)是回調(diào)函數(shù)內(nèi)this的指向。
let arr = [1, 2, 3];let obj = {
    double(n) {
        return n * 2;
    }}console.log(Array.from(arr, function (n){
    return this.double(n);}, obj)); // [2, 4, 6]

5.3.2 includes()方法

參數(shù):數(shù)值 -------- 返回值:true/false
includes()方法------是查看數(shù)組中是否存在這個(gè)元素,存在就返回true,不存在就返回false

let arr = [1,33,44,22,6,9]let ary = arr.includes(22)console.log(ary)

5.3.3 map()、filter() 方法

參數(shù):函數(shù)-------- 返回值:數(shù)組
map()方法-----要利用原數(shù)組經(jīng)過(guò)運(yùn)算后的數(shù)組,或者從對(duì)象數(shù)組中拿某個(gè)屬性
filter()方法------是將符合挑選的篩選出來(lái)成為一個(gè)新數(shù)組,新數(shù)組不會(huì)影響舊數(shù)組。

<script>
	let arr = [1, 33, 44, 2, 6, 9];

	let newarr1 = arr.filter((v) => v > 10); //newarr1-------[33, 44]
	let newarr2 = arr.filter((v) => v * 2);  //newarr2-------[1, 33, 44, 2, 6, 9]

	let newarr3 = arr.map((v) => v > 10);    //newarr3-------[false, true, true, false, false, false]
	let newarr4 = arr.map((v) => v * 2);     //newarr4-------  [2, 66, 88, 4, 12, 18]</script>

5.3.4 forEach()方法

參數(shù):函數(shù)-------- 返回值:undefined

forEach() 方法------是循環(huán)遍歷數(shù)組中的每一項(xiàng),沒(méi)有返回值

find()方法---------是查找數(shù)組中符合條件的第一個(gè)元素,直接將這個(gè)元素返回出來(lái)

let arr = [1,33,44,2,6,9]let a1= []arr.forEach((v, i)=>{
  if (v > 10) {
    a1.push(arr[i])
  }  })console.log(a1) [33,44]let a2= arr.find(v => v > 10)console.log(a2)

5.3.4 find()方法

參數(shù):函數(shù)-------- 返回值:數(shù)值

find()方法----------是查找數(shù)組中符合條件的第一個(gè)元素,直接將這個(gè)元素返回出來(lái)

let arr = [1,33,44,2,6,9]let a= arr.find(v => v > 10)console.log(a) // 33

5.3.6 some()、every() 方法

參數(shù):函數(shù)-------- 返回值:true/false

some()方法------找到一個(gè)符合條件的就返回true,所有都不符合返回false。
every()方法------數(shù)組所有值都符合條件才會(huì)返回true,有一個(gè)不符合返回false。

let arr = [1,2,3,4,6,11]let newarr = arr.some(function(v){
  return v > 10})console.log(newarr) 
  //truelet newarr2 = arr.every(function(v){
  return v > 10})console.log(newarr2) 
  //false

5.4 object的新方法

在 ES6 中,添加了Object.is()、Object.assign()、Object.keys()Object.values()、Object.entries()等方法。

5.4.1 Object.is()

  • Object.is()方法用來(lái)判斷兩個(gè)值是否為同一個(gè)值,返回一個(gè)布爾類型的值。
const obj1 = {};const obj2 = {};console.log(Object.is(obj1, obj2)); // falseconst obj3 = {};const value1 = obj3;const value2 = obj4;console.log(Object.is(value1, value2)); // true

5.4.2 Object.assign()

  • Object.assign()方法用于將所有可枚舉屬性的值從一個(gè)或多個(gè)源對(duì)象分配到目標(biāo)對(duì)象,并返回目標(biāo)對(duì)象。------難理解看實(shí)例
    對(duì)象合并
const obj1 = { a: 1 };const obj2 = { b: 2 };const obj3 = { a:5 , c: 3 };//對(duì)象合并,把后面對(duì)像合并到第一個(gè)對(duì)象,對(duì)象里相同的屬性會(huì)覆蓋Object.assign(obj1, obj2, obj3);console.log(obj1); // { a: 5, b: 2 , c:3}

5.4.3 Object.keys()、Object.values()、Object.entries()

  • Object.keys() 返回對(duì)象所有屬性
  • Object.values() 返回對(duì)象所有屬性值
  • Object.entries() 返回多個(gè)數(shù)組,每個(gè)數(shù)組是 key–value
    不解釋直接看例子
<script>
	let person = {
		name: "admin",
		age: 12,
		language: ["java", "js", "css"],
	};
	console.log(Object.keys(person)); //[ &#39;name&#39;, &#39;age&#39;, &#39;language&#39; ]
	
	console.log(Object.values(person)); //[ &#39;admin&#39;, 12, [ &#39;java&#39;, &#39;js&#39;, &#39;css&#39; ] ]
	
	console.log(Object.entries(person));    /* [
	                                                     ["name", "admin"],
	                                                     ["age", 12],
	                                                     ["language", ["java", "js", "css"]],
	                                                 ]; */</script>

5.5 對(duì)象聲明簡(jiǎn)寫

<script>
			
      let name =&#39;admin&#39;
      let age = 20
      //es6之前
      // let person={
      //     name:name,
      //     age:age
      // }

      //es6  聲明對(duì)象時(shí)的屬性名與引用的變量名相同就可以省略
      let person={
          name,
          age      }</script>

5.6 …(對(duì)象擴(kuò)展符)

  1. 拷貝
<script>
	let person={
		name: "admin",
		age: 12,
		wife:"迪麗熱巴"
	}
	
	let person2={...person}
	
	console.log(person2===person);//false
	console.log(person2);
	//{name: &#39;admin&#39;, age: 12, wife: "迪麗熱巴"}
	</script>
  1. 合并對(duì)象
<script>
	const obj1 = { a: 1 };
	const obj2 = { b: 2 };
	const obj3 = { a: 5, c: 3 };
	
    let newObj ={...obj1,...obj2,...obj3}
	console.log(newObj); 
	// { a: 5, b: 2 , c:3}
	</script>

6、函數(shù)方面

6.1 參數(shù)默認(rèn)值

<script>

	// es6之前
	// function add(a, b) {
	//     if(!a) a=0
	//     if(!b) b=0
	// 	return a + b;
	// }
	
	//es6
	function add(a = 0, b = 0) {
		return a + b;
	}
	let x=add(); 
	let y=add(2); 
	let z=add(3, 4); 
          console.log(x,y,z); //x=0, y=2, z=7</script>

6.2 箭頭函數(shù)

箭頭函數(shù)實(shí)現(xiàn)了一種更加簡(jiǎn)潔的書寫方式。箭頭函數(shù)內(nèi)部沒(méi)有arguments,也沒(méi)有prototype屬性,所以不能用new關(guān)鍵字調(diào)用箭頭函數(shù)。

let add = (a,b) => {
    return a+b;}let print = () => {
    console.log(&#39;hi&#39;);}let fn = a => a * a;
    //當(dāng)只有一個(gè)參數(shù)時(shí),括號(hào)可以省略,函數(shù)體只有單行return語(yǔ)句時(shí),大括號(hào)也可以省略。

6.3 箭頭函數(shù)和普通函數(shù)最大的區(qū)別在于其內(nèi)部this永遠(yuǎn)指向其父級(jí)對(duì)象的this。(重點(diǎn))

 var age = 123;
 let obj = {
     age:456,
     say:() => {
         console.log(this.age);  //this指向window
     }
 };obj.say();   //123

7、class(類)

class 作為對(duì)象的模板被引入ES6,你可以通過(guò) class 關(guān)鍵字定義類。class 的本質(zhì)依然是一個(gè)函數(shù)。

  1. 創(chuàng)建類
<script>
	class person {
		//關(guān)鍵字聲明方式
		constructor(name) {
                  this.name=name              }           
		say() {
			console.log("hello");
		}
	}

	var p = new person(&#39;p&#39;);
	p.say(); //&#39;hello&#39;
	console.log(p.name);</script>
  1. 類的繼承
    類的繼承通過(guò)extends關(guān)鍵字實(shí)現(xiàn)。
    子類必須在constructor中調(diào)用super()
<script>
	class Person {
		constructor(name, age) {
			this.name = name;
			this.age = age;
		}
		say() {
			console.log(this.name + ":" + this.age);
		}
	}
	class Student extends Person {
		constructor(name, age, sex) {
			super(name, age);
			this.sex = sex;
		}
	}
	var student = new Student("admin", 12, "male");
	student.name;   //&#39;admin&#39;
	student.sex;    //&#39;male&#39;
	student.say(); //&#39;ren:12&#39;</script>

8、promise和proxy

講不清楚,等我學(xué)會(huì)了,后面在講

9、模塊化

  1. 導(dǎo)入

ES6使用關(guān)鍵字 import 導(dǎo)入模塊(文件),有兩種常用的方式:

import ‘模塊名稱’  from  ‘路徑’;import  ‘路徑’;
  1. 導(dǎo)出

ES6 通過(guò) export 和export default 導(dǎo)出模塊。

let name = &#39;ren&#39;,age = 12;export {name,age};
//注意:變量需要用大括號(hào)包裹,然后才能向外輸出

模塊化優(yōu)點(diǎn)

  1.防止命名沖突
  2.復(fù)用性強(qiáng)

10、運(yùn)算符

... 擴(kuò)展運(yùn)算符
可選鏈 ?.
函數(shù)綁定運(yùn)算符::


若本文對(duì)你有幫助 點(diǎn)個(gè)贊 點(diǎn)個(gè)關(guān)注


總結(jié)——ES6思維導(dǎo)圖

What are the new features of es6?

推薦學(xué)習(xí):《react視頻教程

The above is the detailed content of What are the new features of es6?. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undress AI Tool

Undress AI Tool

Undress images for free

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to reverse an array in ES6 How to reverse an array in ES6 Oct 26, 2022 pm 06:19 PM

In ES6, you can use the reverse() method of the array object to achieve array reversal. This method is used to reverse the order of the elements in the array, putting the last element first and the first element last. The syntax "array.reverse()". The reverse() method will modify the original array. If you do not want to modify it, you need to use it with the expansion operator "...", and the syntax is "[...array].reverse()".

Is async for es6 or es7? Is async for es6 or es7? Jan 29, 2023 pm 05:36 PM

async is es7. async and await are new additions to ES7 and are solutions for asynchronous operations; async/await can be said to be syntactic sugar for co modules and generator functions, solving js asynchronous code with clearer semantics. As the name suggests, async means "asynchronous". Async is used to declare that a function is asynchronous; there is a strict rule between async and await. Both cannot be separated from each other, and await can only be written in async functions.

Why does the mini program need to convert es6 to es5? Why does the mini program need to convert es6 to es5? Nov 21, 2022 pm 06:15 PM

For browser compatibility. As a new specification for JS, ES6 adds a lot of new syntax and API. However, modern browsers do not have high support for the new features of ES6, so ES6 code needs to be converted to ES5 code. In the WeChat web developer tools, babel is used by default to convert the developer's ES6 syntax code into ES5 code that is well supported by all three terminals, helping developers solve development problems caused by different environments; only in the project Just configure and check the "ES6 to ES5" option.

How to find different items in two arrays in es6 How to find different items in two arrays in es6 Nov 01, 2022 pm 06:07 PM

Steps: 1. Convert the two arrays to set types respectively, with the syntax "newA=new Set(a);newB=new Set(b);"; 2. Use has() and filter() to find the difference set, with the syntax " new Set([...newA].filter(x =>!newB.has(x)))", the difference set elements will be included in a set collection and returned; 3. Use Array.from to convert the set into an array Type, syntax "Array.from(collection)".

How to implement array deduplication in es5 and es6 How to implement array deduplication in es5 and es6 Jan 16, 2023 pm 05:09 PM

In es5, you can use the for statement and indexOf() function to achieve array deduplication. The syntax "for(i=0;i<array length;i++){a=newArr.indexOf(arr[i]);if(a== -1){...}}". In es6, you can use the spread operator, Array.from() and Set to remove duplication; you need to first convert the array into a Set object to remove duplication, and then use the spread operator or the Array.from() function to convert the Set object back to an array. Just group.

What does es6 temporary Zenless Zone Zero mean? What does es6 temporary Zenless Zone Zero mean? Jan 03, 2023 pm 03:56 PM

In es6, the temporary dead zone is a syntax error, which refers to the let and const commands that make the block form a closed scope. Within a code block, before a variable is declared using the let/const command, the variable is unavailable and belongs to the variable's "dead zone" before the variable is declared; this is syntactically called a "temporary dead zone". ES6 stipulates that variable promotion does not occur in temporary dead zones and let and const statements, mainly to reduce runtime errors and prevent the variable from being used before it is declared, resulting in unexpected behavior.

Is require an es6 syntax? Is require an es6 syntax? Oct 21, 2022 pm 04:09 PM

No, require is the modular syntax of the CommonJS specification; and the modular syntax of the es6 specification is import. require is loaded at runtime, and import is loaded at compile time; require can be written anywhere in the code, import can only be written at the top of the file and cannot be used in conditional statements or function scopes; module attributes are introduced only when require is run. Therefore, the performance is relatively low. The properties of the module introduced during import compilation have slightly higher performance.

How to determine how many items there are in an array in es6 How to determine how many items there are in an array in es6 Jan 18, 2023 pm 07:22 PM

In ES6, you can use the length attribute of the array object to determine how many items there are in the array, that is, to get the number of elements in the array; this attribute can return the number of elements in the array, just use the "array.length" statement. Returns a value representing the number of elements of the array object, that is, the length value.

See all articles