ES6新特性: for-of ,生成器(Generators),反撇号 “`”

编程语言JavaScript是ECMAScript的实现和扩展,由ECMA(一个类似W3C的标准组织)参与进行标准化。ECMAScript定义了:

语言语法 – 语法解析规则、关键字、语句、声明、运算符等。
类型 – 布尔型、数字、字符串、对象等。
原型和继承
内建对象和函数的标准库 – JSON、Math、数组方法、对象自省方法等。
ECMAScript标准不定义HTML或CSS的相关功能,也不定义类似DOM(文档对象模型)的Web API,这些都在独立的标准中进行定义
。ECMAScript涵盖了各种环境中JS的使用场景,无论是浏览器环境还是类似node.js的非浏览器环境。


1.for-of(for-in循环用来遍历对象属性。)
这是最简洁、最直接的遍历数组元素的语法,同时还可以遍历DOM NodeList对象,Set,Map。
这个方法避开了for-in循环的所有缺陷
与forEach()不同的是,它可以正确响应break、continue和return语句

 

Array:
for (var value of Array) {
console.log(value);
}

Set:
for (var word of Set) {
console.log(word);
}
Map:
for (var [key, value] of Map) {
console.log(key + "'s phone number is: " + value);
}}

对象的属性(也可for-in):
for (var key of Object.keys(someObject)) {
console.log(key + ": " + someObject[key]);
}

 


2.ES6生成器(Generators),数据和循环的新标准。
普通函数使用function声明,而生成器函数使用function*声明。
在生成器函数内部,有一种类似return的语法:关键字yield。二者的区别是,普通函数只可以return一次,而生成器函数可以
yield多次

 

// 拆分一维数组icons 旧写法
// 根据长度rowLength
//function splitIntoRows(icons, rowLength) {
// var rows = [];
// for (var i = 0; i < icons.length; i += rowLength) {
// rows.push(icons.slice(i, i + rowLength));
// }
// return rows;
//}


// 拆分一维数组icons
// 根据长度rowLength
function* splitIntoRows(icons, rowLength) {
for (var i = 0; i < icons.length; i += rowLength) {
yield icons.slice(i, i + rowLength);
}
}

function* GetJsonData(ctaArr) {
for (let i of ctaArr) {
yield ({ "text": i.innerHTML, "data": i.getAttribute("data") });
}
}

 

//
$(document).ready(function () {
var array1 = [1,2,3,4,5];
var array2 = splitIntoRows(array1, 2);
console.log(array2.length);
console.log(array2.next());
for (var a of array2) {
console.log(a);
}
//常用获取页面数据组装json
let ctaArr = Array.from($("#testDiv p"));
var jsons = GetJsonData(ctaArr);
console.log(Array.from(jsons) );
for (var a of jsons) {
console.log(a);
}

});

html:

<div id="testDiv">
<p name="pText" data="a">1</p>
<p name="pText" data="b">2</p>
<p name="pText" data="c">3</p>
</div>

 


3.反撇号 “`” 多行字符串,${} 占位符 ,常用于组装html

 

模板占位符中的代码可以是任意JavaScript表达式,所以函数调用、算数运算等这些都可以作为占位符使用,你甚至可以在一个
模板字符串中嵌套另一个,我称之为模板套构(template inception)。

如果这两个值都不是字符串,可以按照常规将其转换为字符串。例如:如果action是一个对象,将会调用它的.toString()方法
将其转换为字符串值。

如果你需要在模板字符串中书写反撇号,你必须使用反斜杠将其转义:`\``等价于"`"。
同样地,如果你需要在模板字符串中引入字符$和{。无论你要实现什么样的目标,你都需要用反斜杠转义每一个字符:`\$`和`
\{`。

 

 

let GetMoveFlashHtml = function (srcUrl, index, url, title, editId) {
let html = `<li index='${index}' src='${srcUrl}' url='${url}' title='${title}' editid='` + editId +`'>
<img src="${srcUrl}" />
<span>${title}</span>
<div class="flash_edit_btn">
<a href="#" editid="`+ editId+`">编辑</a>
<a href="#" editid="`+ editId +`">删除</a>
</div>
</li>`;

return html;
}

 

posted @ 2020-07-22 16:14  越过那个限制  阅读(998)  评论(0编辑  收藏  举报