ES6

1.import与require区别
import 是同步导入js模块。
require 是异步导入js模块。

2.使用let与const

let con1 = 3 //与var作用相似,let声明变量,有作用域(当前代码块)
console.log(con1)
con1 = 2
console.log(con1) const con1 = 3
console.log(con1)
con1 = 2
console.log(con1) //报错,const变量标识符不能重新分配,只读状态。 const obj = { foo: 'bar' }
obj.foo = 'baz'
console.log(obj) //{foo: "baz"} const声明常量索引,可以修改对象的属性值

PS:关键字let的作用域指当前代码块。(如:function xx(){  //当前代码块  })

3.使用html模板

var front = 'Hello'
var behind = 'World'
//ES5
console.log(front + ' ' + behind + ',Sroot') //ES6
console.log(`${front} ${behind},Sroot`) //ES5
var html = ''
html += '<div>'
html += '<span>' + front + ' ' + behind + '</span>'
html += '</div>' //ES6
let html = ''
html = `<div>
<span>${front} ${behind}</span>
</div>`

PS:使用的是反单引号, ES6省去双引号拼接字符的写法,使js代码更好书写。

4.使用箭头函数取代function。

//ES5
var func = function(){alert('hello world')}
//ES6
let func = ()=> alert('hello world')

PS:箭头函数的this指向宿主,不指向当前函数。

5.使用class取代prototype,使用static声明静态方法

//ES5
function Person(name, age) {
this.name = name
this.age = age
}
Person.hello = function() {
console.log('你好')
}
Person.prototype.walk = function() {
console.log('行走')
} // 实例方法
var ps = new Person('Sroot', 1)
ps.walk() //对象方法
Person.hello() // ES6
class Person {
constructor(name, age) {
this.name = name
this.age = age
}
walk() {
console.log('行走')
}
static hello() {
console.log('你好')
}
}
// 实例方法
let ps = new Person('Sroot', 1)
ps.walk() // 静态方法
Person.hello()

6.解构参数、函数

//ES5
var a=1,b=2; var obj = {name:"sroot",sex:"man"} test (obj)
function test (obj) {
alert(obj.name)
} //ES6
let [x,y]=[1,2]; const obj = {name:"sroot",sex:"man"} test (obj)
function test ({name}) {
alert(name)
}
7.使用Object.assign合并多个对象
const target = {a : 1}  //目标对象
const sources = {b : 2} //源对象
console.log(Object.assign(target,source)) //{a:1,b:2}

PS:Object.assign(目标对象,源对象) ,只有两个参数。源对象可以是多个,如:Object.assign(目标对象,源对象1,源对象2,源对象3.....)。

8.使用find()与findIndex()进行数组查找。

let arr = [
{
name: 'Sam',
age: 20
},
{
name: 'Bill',
age: 22
}
]
//ES6
var person = arr.find(element => element.name === 'Sam')
console.log(person) // {name: 'Sam',age: 20}
var personIndex = arr.findIndex(element => element.name === 'Sam')
console.log(personIndex) //

PS:匹配不到会返回undefined。 

9.使用filter()进行对象数组筛选。

var names = ['John', 'Sam', 'Lucy'];
//ES6
const result = names.filter(name => name!='Bill');
console.log(result);

PS:匹配不到会返回空数组。 

9.require简写

const app = require("express")()
//等同于
var express = require('express');
var app = express();
10.使用Map对象存储数据。
var myMap = new Map();
myMap.set("myName", "cww");
console.log(myMap.get("myName")) //cww
11.使用Set对象存储数据。
var mySet = new Set()
mySet.add(1);
mySet.add(5);
console.log(mySet.size) //

补充:Set与Map对象属于可迭代对象,集合类型。(如果需要处理集合里面的数据,就必须把集合转化成数组去处理,然后把数组转化成集合)

var mySet= new Set([1, 2, 3]);
mySet= new Set([...mySet].map(x => x + 1 ));
console.log(mySet) //Set { 2, 3, 4 }

           Map 存储数据特点:(key-value)键值对形式,每个键必须是唯一,可以任意类型数据。

           Map 应用场景:复杂类型的数据结构,纯粹遍历数据。

           Set 存储数据特点:(key)键形式,每个键必须是唯一,可以任意类型数据。

           Set  应用场景:类似于Array的数据结构,无需修改某个元素,纯粹遍历数据。

ES7

1.使用includes判断数组元素是否存在

let arr = ['1', '2', '3'];

if (arr.includes('3')) {
console.log('存在字符:3')
};

2.使用**求幂

//3的3次方。
let num = 3**3;

4.新数据类型Symbol()

Symbol()意思是符号,是一个方法,也是数据类型。表示对象属性唯一。

Symbol()解决js对象合并有相同属性名的问题。

const obj1 = {
name: 'name',
[Symbol('skin')]: 'default'
} const obj2 = {
[Symbol('skin')]: 'heroic'
} console.log(Object.assign(obj1, obj2)) //{name: "name", Symbol(skin): "default", Symbol(skin): "heroic"}
 
ES8

1.使用async/await关键字来取代Promise

function listApi(){
//ajax ...
} async function getInfo() {
try {
var result = await listApi();
console.log(result);
} catch (error) {
console.error(error);
}
}

PS: async函数包裹await函数,不能互换位置,否则会进入循环。

       切记要用try...catch包裹await函数,async函数可能会有异常。

ES10
1.使用trimStart(),trimLeft(),trimEnd(),trimRight()清除空格。(与java越来越像了)
const str = '   Sroot  '
console.log(str) // ' Sroot '
console.log(str.trimStart()) // 'Sroot '
console.log(str.trimLeft()) // 'Sroot '
console.log(str.trimEnd()) // ' Sroot'
console.log(str.trimRight()) // ' Sroot'
 

浏览器特性

1.使用web worker进行js“多线程”操作。

优点:不阻塞UI渲染,并行处理任务。

缺点:平台兼容性差。

PS:javascript是单线程。web worker不属于js语言的一部份,web worker是通过js访问浏览器特性功能。

了解JavaScript核心精髓(四)的更多相关文章

  1. 了解JavaScript核心精髓(一)

    ES5 1.声明脚本 <script type="text/javascript"></script> 2.DOM与BOM DOM(Document Obj ...

  2. 了解JavaScript核心精髓(三)

    1.js判断对象是否存在属性. hasOwnProperty(‘property’)  判断原型属性是否存在. "property" in o;  判断原型属性和原型链属性是否存在 ...

  3. 了解JavaScript核心精髓(二)

    1.字符串操作 //声明字符串 var str = "abcd"; var str = new String("abcd") //截取字符串 console.l ...

  4. 最新的JavaScript核心语言标准——ES6,彻底改变你编写JS代码的方式!【转载+整理】

    原文地址 本文内容 ECMAScript 发生了什么变化? 新标准 版本号6 兑现承诺 迭代器和for-of循环 生成器 Generators 模板字符串 不定参数和默认参数 解构 Destructu ...

  5. JavaScript 核心参考教程 内置对象

    这个标准基于 JavaScript (Netscape) 和 JScript (Microsoft).Netscape (Navigator 2.0) 的 Brendan Eich 发明了这门语言,从 ...

  6. Javascript核心概述 - 深入了解javascript

    /* 一.执行上下文:堆栈(底部全局上下文+顶部当前活动上下文) */ /* 二.变量对象: 变量根据执行上下文,找到数据存储位置,这种机制叫变量对象 1. 变量都要var定义,且都不能delete ...

  7. Javascript多线程引擎(四)

    Javascript多线程引擎(四)--之C语言单继承 因为使用C语言做为开发语言, 而C语言在类的支持方面几乎为零, 而Javascript语言的Object类型是一个非常明显的类支持对象,所以这里 ...

  8. JavaScript学习记录四

    title: JavaScript学习记录四 toc: true date: 2018-09-16 20:31:22 --<JavaScript高级程序设计(第2版)>学习笔记 要多查阅M ...

  9. 最新的JavaScript核心语言标准——ES6,彻底改变你编写JS代码的方式!

    原文地址 迁移到:http://www.bdata-cap.com/newsinfo/1741515.html 本文内容 ECMAScript 发生了什么变化? 新标准 版本号6 兑现承诺 迭代器和f ...

随机推荐

  1. 官方发布PHP语法规范

    PHP语言已经存在了超过20年,显然是世界上最流行的编程语言之一.PHP绝对是互联网服务器端web编程的通用语. 虽然有广泛的user-documentation,PHP语言总是错过语言规范.这并不是 ...

  2. IOS 弹框AlterView的使用(IOS8.0以前使用)UIAlertController(IOS9.0使用)

    #pragma mark - 代理方法 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath ...

  3. bzoj4836 [Lydsy2017年4月月赛]二元运算

    Description 定义二元运算 opt 满足 现在给定一个长为 n 的数列 a 和一个长为 m 的数列 b ,接下来有 q 次询问.每次询问给定一个数字 c  你需要求出有多少对 (i, j) ...

  4. 字符串处理,Poj(2121)

    题目链接:http://poj.org/problem?id=2121 差一点就WA哭了,主要是自己傻逼了. 思路: 遇到hundred,sum*100; 但是遇到thouthend,million, ...

  5. 2017.10.13 Java中引用类型变量的创建及使用&循环高级写法

    今日内容介绍 1.引用类型变量的创建及使用 2.流程控制语句之选择语句 3.流程控制语句之循环语句 4.循环高级 ###01创建引用类型变量公式     * A: 创建引用类型变量公式         ...

  6. weight decay 和正则化caffe

    正则化是为了防止过拟合,因为正则化能降低权重 caffe默认L2正则化 代码讲解的地址:http://alanse7en.github.io/caffedai-ma-jie-xi-4/ 重要的一个回答 ...

  7. 探索性数据分析EDA综述

    目录 1. 数据探索的步骤和准备 2. 缺失值处理 为什么需要处理缺失值 Why data has missing values? 缺失值处理的技术 3. 异常值检测和处理 What is an ou ...

  8. 将matlab处理结果保存为图像文件

    imwrite(testIm, 'Data/Test/testIm.bmp', 'BMP');

  9. Vuex基础-Mutation

    借助官网的一张图,更改 Vuex 的 store 中的状态的唯一方法是提交 mutation.不可以直接对其进行赋值改变.需要注意的是,mutations只能做一些同步的操作. ​​​ 代码结构: ​ ...

  10. 前端jQuery之事件流

    1.事件流概念 描述的是从页面中接收事件的顺序 包含事件捕获阶段,处于目标阶段,事件冒泡阶段 2.绑定事件 语法 bind(type,data,fn) 示例:每个标签被点击的时候,弹出其文本 $(&q ...