JavaScript:ES5和ES6区别实例

简介: JavaScript:ES5和ES6区别实例

常量

// ES5 中常量的写法

Object.defineProperty(window, "PI2", {
    value: 3.1415926,
    writable: false,
})

console.log(window.PI2)

// ES6 的常量写法

const PI = 3.1415926
console.log(PI)

// PI = 4

作用域

// ES5 中作用域

const callbacks = []
for (var i = 0; i <= 2; i++) {
callbacks[i] = function() {
return i * 2
}
}

console.table([
callbacks[0](),
callbacks[1](),
callbacks[2](),
])
// 输出是6 6 6


const callbacks2 = []
for (let j = 0; j <= 2; j++) {
callbacks2[j] = function() {
return j * 2
}
}

console.table([
callbacks2[0](),
callbacks2[1](),
callbacks2[2](),
])

// 输出是0 2 4

;((function() {
const foo = function() {
return 1
}
console.log("foo()===1", foo() === 1)
;((function() {
const foo = function() {
return 2
}
console.log("foo()===2", foo() === 2)
})())
})())

{
function foo() {
return 1
}

console.log("foo()===1", foo() === 1)
{
function foo() {
return 2
}

console.log("foo()===2", foo() === 2)
}
console.log("foo()===1", foo() === 1)
}

箭头函数

/ eslint-disable /

{
// ES3,ES5
var evens = [1, 2, 3, 4, 5];
var odds = evens.map(function(v) {
return v + 1
});
console.log(evens, odds);
};
{
// ES6
let evens = [1, 2, 3, 4, 5];
let odds = evens.map(v => v + 1);
console.log(evens, odds);
}

{
// ES3,ES5
var factory = function() {
this.a = 'a';
this.b = 'b';
this.c = {
a: 'a+',
b: function() {
return this.a
}
}
}
// 谁调用this指向谁
console.log(new factory().c.b()); // 'a+'
};

{
// ES6
var factory = function() {
this.a = 'a';
this.b = 'b';
this.c = {
a: 'a+',
b: () => {
return this.a
}
}
}
// 定义时指向谁就是谁
console.log(new factory().c.b()); // 'a'
}

函数参数

/ eslint-disable /

{
// ES5\ES3 默认参数的写法
function f(x, y, z) {
if (y === undefined) {
y = 7;
}
if (z === undefined) {
z = 42
}
return x + y + z
}
console.log(f(1, 3));
}

{
// ES6 默认参数
function f(x, y = 7, z = 42) {
return x + y + z
}
console.log(f(1, 3));
}

{
// 必选参数检查
function checkParameter() {
throw new Error('can\&#39;t be empty')
}
function f(x = checkParameter(), y = 7, z = 42) {
return x + y + z
}
console.log(f(1));
try {
f()
} catch (e) {
console.log(e);
} finally {}
}

{
// ES3,ES5 可变参数
function f() {
var a = Array.prototype.slice.call(arguments);
var sum = 0;
a.forEach(function(item) {
sum += item * 1;
})
return sum
}
console.log(f(1, 2, 3, 6));
}

{
// ES6 可变参数
function f(...a) {
var sum = 0;
a.forEach(item => {
sum += item * 1
});
return sum
}
console.log(f(1, 2, 3, 6));
}


{
// ES5 合并数组
var params = ['hello', true, 7];
var other = [1, 2].concat(params);
console.log(other);
}

{
// ES6 利用扩展运算符合并数组
var params = ['hello', true, 7];
var other = [
1, 2, ...params
];
console.log(other);
}

数据保护

/ eslint-disable /
{
// ES3,ES5 数据保护
var Person = function() {
var data = {
name: 'es3',
sex: 'male',
age: 15
}
this.get = function(key) {
return data[key]
}
this.set = function(key, value) {
if (key !== 'sex') {
data[key] = value
}
}
}

// 声明一个实例
var person = new Person();
// 读取
console.table({name: person.get('name'), sex: person.get('sex'), age: person.get('age')});
// 修改
person.set('name', 'es3-cname');
console.table({name: person.get('name'), sex: person.get('sex'), age: person.get('age')});
person.set('sex', 'female');
console.table({name: person.get('name'), sex: person.get('sex'), age: person.get('age')});
} {
// ES5
var Person = {
name: 'es5',
age: 15
};

Object.defineProperty(Person, 'sex', {
writable: false,
value: 'male'
});

console.table({name: Person.name, age: Person.age, sex: Person.sex});
Person.name = 'es5-cname';
console.table({name: Person.name, age: Person.age, sex: Person.sex});
try {
Person.sex = 'female';
console.table({name: Person.name, age: Person.age, sex: Person.sex});
} catch (e) {
console.log(e);
}
} {
// ES6
let Person = {
name: 'es6',
sex: 'male',
age: 15
};

let person = new Proxy(Person, {
get(target, key) {
return target[key]
},
set(target,key,value){
if(key!=='sex'){
target[key]=value;
}
}
});

console.table({
name:person.name,
sex:person.sex,
age:person.age
});

try {
person.sex='female';
} catch (e) {
console.log(e);
} finally {

}

}


            </div>
目录
相关文章
|
缓存 Windows
Windows程序设计——LoadImage参数及其用法
Windows程序设计——LoadImage参数及其用法
719 0
|
数据采集 大数据 数据挖掘
DataHub应用场景有哪些?
本文为您介绍DataHub三大应用场景,主要场景包括:实时数据通道、实时数据清洗和分析、实时数据仓库。
1349 0
|
存储 安全 Linux
|
数据挖掘 项目管理
如何通过PDCA循环和团队协作工具实现高效项目管理?
2分钟带你快速了解PDCA循环,以及如何利用团队协作工具高效实现这一方法。
344 2
如何通过PDCA循环和团队协作工具实现高效项目管理?
|
存储 人工智能 项目管理
提升企业竞争力的关键:探索多人协同办公的优势与挑战
本文介绍了多人协同办公的背景、工具及优势。随着全球化和技术的发展,远程办公和跨区域协作成为趋势,企业依赖云计算、大数据等技术实现高效团队协作。文章详细介绍了云协作平台、即时通讯工具、项目管理工具和文件共享工具,并探讨了多人协同办公在提升工作效率、跨地域协作、促进创新和增强团队透明度等方面的优势。最后,展望了未来多人协同办公的创新方向,包括人工智能、虚拟现实和工具深度集成等。
|
机器学习/深度学习 传感器 人工智能
数字孪生技术:智能建筑的新纪元
【10月更文挑战第31天】数字孪生技术正重新定义智能建筑的设计、建造和管理。通过在虚拟环境中创建与实际建筑一致的数字模型,实现实时监测、模拟和优化。本文探讨其在设计、施工、运营、应急管理和未来展望中的应用,展示其在建筑智能化管理中的巨大潜力。
|
存储 NoSQL 数据库
为什么要用 Tair 来服务低延时场景 - 从购物车升级说起
“购物车升级”是今年双十一期间提升用户体验的关键项目,展示了大淘宝技术团队致力于通过技术突破消费者和商家体验的天花板。低延迟是这些挑战中的核心,内存数据库Tair因其高吞吐、大连接数、热点请求处理、异常流量管理和复杂计算逻辑优化等特点,在低延迟场景下表现出色。Tair使用内存/SCM混合存储和各种索引来提供低延迟服务,并通过无锁并发、水平扩展分区等技术应对高并发。此外,Tair还通过热点策略、流控和执行流程优化等手段确保在大促时的稳定性和性能。Tair在双十一期间支持了购物车、销量统计、卖家优惠券召回和互动场景等多种业务,展现其低延迟和高并发的能力。
77406 11
|
Linux 测试技术 调度
新工具开源!一款iOS自动化利器(附地址)
tidevice 是阿里的内部的一个小组用来做 iOS 自动化用的工具,通过逆向iOS通信协议,使用纯Python实现。目前淘宝和其他部分事业部已经全面使用了该技术,进行iOS应用的性能采集,UI自动化。
2850 0
新工具开源!一款iOS自动化利器(附地址)
|
资源调度 JavaScript 前端开发
CentOS 7.2 下安装配置Node.js和Yarn
centos下node.js的安装配置管理,npm以及yarn包管理工具的安装。
7071 0
|
iOS开发 MacOS Windows
idm2023最新版下载器怎么设置中文?
1.首先你可以到idm中文版本下载后,将idm下载到本地电脑上。注意:目前idm是免费下载的,支持win系统。
488 0