ECMAScript 5 也称为 ES5 和 ECMAScript 2009。

ECMAScript 5 特性

这些是 2009 年发布的新特性:

  • "use strict" 指令
  • String.trim()
  • Array.isArray()
  • Array.forEach()
  • Array.map()
  • Array.filter()
  • Array.reduce()
  • Array.reduceRight()
  • Array.every()
  • Array.some()
  • Array.indexOf()
  • Array.lastIndexOf()
  • JSON.parse()
  • JSON.stringify()
  • Date.now()
  • 属性 Getter 和 Setter
  • 新的对象属性和方法

ECMAScript 5 语法更改

  • 对字符串的属性访问 [ ]
  • 数组和对象字面量中的尾随逗号
  • 多行字符串字面量
  • 作为属性名称的保留字

"use strict" 指令

“use strict” 定义 JavaScript 代码应该以“严格模式”执行。

例如,使用严格模式,不能使用未声明的变量。

您可以在所有程序中使用严格模式。它可以帮助您编写更清晰的代码,例如阻止您使用未声明的变量。

“use strict” 只是一个字符串表达式。旧浏览器如果不理解它们就不会抛出错误。

String.trim()

String.trim() 删除字符串两端的空白字符。

实例

var str = "       Hello World!        ";
alert(str.trim());

Array.isArray()

isArray() 方法检查对象是否为数组。

实例

function myFunction() {
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var x = document.getElementById("demo");
x.innerHTML = Array.isArray(fruits);
}

Array.forEach()

forEach() 方法为每个数组元素调用一次函数。

实例

var txt = "";
var numbers = [45, 4, 9, 16, 25];
numbers.forEach(myFunction); function myFunction(value) {
txt = txt + value + "<br>";
}

Array.map()

这个例子给每个数组值乘以 2:

实例

var numbers1 = [45, 4, 9, 16, 25];
var numbers2 = numbers1.map(myFunction); function myFunction(value) {
return value * 2;
}

Array.filter()

此例用值大于 18 的元素创建一个新数组:

实例

var numbers = [45, 4, 9, 16, 25];
var over18 = numbers.filter(myFunction); function myFunction(value) {
return value > 18;
}

Array.reduce()

这个例子确定数组中所有数的总和:

实例

var numbers1 = [45, 4, 9, 16, 25];
var sum = numbers1.reduce(myFunction); function myFunction(total, value) {
return total + value;
}

Array.reduceRight()

这个例子同样是确定数组中所有数的总和:

实例

var numbers1 = [45, 4, 9, 16, 25];
var sum = numbers1.reduceRight(myFunction); function myFunction(total, value) {
return total + value;
}

Array.every()

这个例子检查是否所有值都超过 18:

实例

var numbers = [45, 4, 9, 16, 25];
var allOver18 = numbers.every(myFunction); function myFunction(value) {
return value > 18;
}

Array.some()

这个例子检查某些值是否超过 18:

实例

var numbers = [45, 4, 9, 16, 25];
var allOver18 = numbers.some(myFunction); function myFunction(value) {
return value > 18;
}

Array.indexOf()

检索数组中的某个元素值并返回其位置:

实例

var fruits = ["Banana", "Orange", "Apple", "Mango"];
var a = fruits.indexOf("Apple");

Array.lastIndexOf()

Array.lastIndexOf() 与 Array.indexOf() 类似,但是从数组结尾处开始检索。

实例

var fruits = ["Banana", "Orange", "Apple", "Mango"];
var a = fruits.lastIndexOf("Apple");

JSON.parse()

JSON 的一个常见用途是从 Web 服务器接收数据。

想象一下,您从Web服务器收到这条文本字符串:

'{"name":"Bill", "age":62, "city":"Seatle"}'

JavaScript 函数 JSON.parse() 用于将文本转换为 JavaScript 对象:

var obj = JSON.parse('{"name":"Bill", "age":62, "city":"Seatle"}');

JSON.stringify()

JSON 的一个常见用途是将数据发送到Web服务器。

将数据发送到 Web 服务器时,数据必须是字符串。

想象一下,我们在 JavaScript 中有这个对象:

var obj = {"name":"Bill", "age":62, "city":"Seatle"};

请使用 JavaScript 函数 JSON.stringify() 将其转换为字符串。

var myJSON = JSON.stringify(obj);

结果将是遵循 JSON 表示法的字符串。

myJSON 现在是一个字符串,准备好发送到服务器:

实例

var obj = {"name":"Bill", "age":62, "city":"Seatle"};
var myJSON = JSON.stringify(obj);
document.getElementById("demo").innerHTML = myJSON;

Date.now()

Date.now() 返回自零日期(1970 年 1 月 1 日 00:00:00:00)以来的毫秒数。

实例

var timInMSs = Date.now();

Date.now() 的返回与在 Date 对象上执行 getTime() 的结果相同。

属性 Getter 和 Setter

ES5 允许您使用类似于获取或设置属性的语法来定义对象方法。

这个例子为名为 fullName 的属性创建一个 getter:

实例

// 创建对象:
var person = {
firstName: "Bill",
lastName : "Gates",
get fullName() {
return this.firstName + " " + this.lastName;
}
}; // 使用 getter 显示来自对象的数据:
document.getElementById("demo").innerHTML = person.fullName;

这个例子为语言属性创建一个 setter 和一个 getter:

实例

var person = {
firstName: "Bill",
lastName : "Gates",
language : "NO",
get lang() {
return this.language;
},
set lang(value) {
this.language = value;
}
}; // 使用 setter 设置对象属性:
person.lang = "en"; // 使用 getter 显示来自对象的数据:
document.getElementById("demo").innerHTML = person.lang;

这个例子使用 setter 来确保语言的大写更新:

实例

var person = {
firstName: "Bill",
lastName : "Gates",
language : "NO",
set lang(value) {
this.language = value.toUpperCase();
}
}; // 使用 setter 设置对象属性:
person.lang = "en"; // 显示来自对象的数据:
document.getElementById("demo").innerHTML = person.language;

新的对象属性和方法

Object.defineProperty() 是 ES5 中的新对象方法。

它允许您定义对象属性和/或更改属性的值和/或元数据。

实例

// 创建对象:
var person = {
firstName: "Bill",
lastName : "Gates",
language : "NO",
}; // 更改属性:
Object.defineProperty(person, "language", {
value: "EN",
writable : true,
enumerable : true,
configurable : true
}); // 枚举属性
var txt = "";
for (var x in person) {
txt += person[x] + "<br>";
}
document.getElementById("demo").innerHTML = txt;

下一个例子是相同的代码,但它隐藏了枚举中的语言属性:

实例

// 创建对象:
var person = {
firstName: "Bill",
lastName : "Gates",
language : "NO",
}; // 更改属性:
Object.defineProperty(person, "language", {
value: "EN",
writable : true,
enumerable : false,
configurable : true
}); // 枚举属性
var txt = "";
for (var x in person) {
txt += person[x] + "<br>";
}
document.getElementById("demo").innerHTML = txt;

此例创建一个 setter 和 getter 来确保语言的大写更新:

实例

// 创建对象:
var person = {
firstName: "Bill",
lastName : "Gates",
language : "NO"
}; // 更改属性:
Object.defineProperty(person, "language", {
get : function() { return language },
set : function(value) { language = value.toUpperCase()}
}); // 更改语言
person.language = "en"; // 显示语言
document.getElementById("demo").innerHTML = person.language;

ECMAScript 5 为 JavaScript 添加了许多新的对象方法:

ES5 新的对象方法

// 添加或更改对象属性
Object.defineProperty(object, property, descriptor) // 添加或更改多个对象属性
Object.defineProperties(object, descriptors) // 访问属性
Object.getOwnPropertyDescriptor(object, property) // 将所有属性作为数组返回
Object.getOwnPropertyNames(object) // 将可枚举属性作为数组返回
Object.keys(object) // 访问原型
Object.getPrototypeOf(object) // 防止向对象添加属性
Object.preventExtensions(object) // 如果可以将属性添加到对象,则返回 true
Object.isExtensible(object) // 防止更改对象属性(而不是值)
Object.seal(object) // 如果对象被密封,则返回 true
Object.isSealed(object) // 防止对对象进行任何更改
Object.freeze(object) // 如果对象被冻结,则返回 true
Object.isFrozen(object)

对字符串的属性访问

charAt() 方法返回字符串中指定索引(位置)的字符:

实例

var str = "HELLO WORLD";
str.charAt(0); // 返回 H

ECMAScript 5 允许对字符串进行属性访问:

实例

var str = "HELLO WORLD";
str[0]; // 返回 H

对字符串的属性访问可能有点不可预测。

尾随逗号(Trailing Commas)

ECMAScript 5 允许在对象和数组定义中使用尾随逗号:

Object 实例

person = {
firstName: "Bill",
lastName: " Gates",
age: 62,
}

Array 实例

points = [
1,
5,
10,
25,
40,
100,
];

警告!!!

Internet Explorer 8 将崩溃。

JSON 不允许使用尾随逗号。

JSON 对象:

// 允许:
var person = '{"firstName":"Bill", "lastName":"Gates", "age":62}'
JSON.parse(person) // 不允许:
var person = '{"firstName":"Bill", "lastName":"Gates", "age":62,}'
JSON.parse(person)

JSON 数组:

// 允许:
points = [40, 100, 1, 5, 25, 10] // 不允许:
points = [40, 100, 1, 5, 25, 10,]

多行字符串

如果使用反斜杠转义,ECMAScript 5 允许多行的字符串文字(字面量):

实例

"Hello \
Kitty!";

\ 方法可能没有得到普遍的支持。

较旧的浏览器可能会以不同的方式处理反斜杠周围的空格。

一些旧的浏览器不允许 \ 字符后面的空格。

分解字符串文字的一种更安全的方法是使用字符串添加:

实例

"Hello " +
"Kitty!";

保留字作为属性名称

ECMAScript 5允许保留字作为属性名称:

对象实例

var obj = {name: "Bill", new: "yes"}

ECMAScript 5 特性的更多相关文章

  1. 前端开发者进阶之ECMAScript新特性--Object.create

    前端开发者进阶之ECMAScript新特性[一]--Object.create   Object.create(prototype, descriptors) :创建一个具有指定原型且可选择性地包含指 ...

  2. 前端开发者进阶之ECMAScript新特性【一】--Object.create

    Object.create(prototype, descriptors) :创建一个具有指定原型且可选择性地包含指定属性的对象 参数:prototype 必需.  要用作原型的对象. 可以为 nul ...

  3. ECMAScript新特性【一】--Object.create

    Object.create(prototype, descriptors) :创建一个具有指定原型且可选择性地包含指定属性的对象 参数: prototype 必需.  要用作原型的对象. 可以为 nu ...

  4. 你了解ECMAScript吗?

    一.基本概念ECMA,European Computer Manufacturers Association,欧洲计算机制造协会. TC39,Technical Committee 39,ECMA的第 ...

  5. 细解JavaScript ES7 ES8 ES9 新特性

    题记:本文提供了一个在线PPT版本,方便您浏览 细解JAVASCRIPT ES7 ES8 ES9 新特性 在线PPT ver 本文的大部分内容译自作者Axel Rauschmayer博士的网站,想了解 ...

  6. 对ECMAScript的研究-----------引用

    ECMAScript 新特性与标准提案 一:ES 模块 第一个要介绍的 ES 模块,由于历史上 JavaScript 没有提供模块系统,在远古时期我们常用多个 script 标签将代码进行人工隔离.但 ...

  7. JavaScript资源大全中文版(Awesome最新版--转载自张果老师博客)

    JavaScript资源大全中文版(Awesome最新版)   目录 前端MVC 框架和库 包管理器 加载器 打包工具 测试框架 框架 断言 覆盖率 运行器 QA 工具 基于 Node 的 CMS 框 ...

  8. VUE 入门基础(1)

    一,安装 Vue.js 不支持 IE8 及其以下版本,因为 Vue.js 使用了 IE8 不能模拟的 ECMAScript 5 特性. Vue.js 支持所有兼容 ECMAScript 5 的浏览器. ...

  9. JavaScript资源大全

    目录 前端MVC 框架和库 包管理器 加载器 打包工具 测试框架 框架 断言 覆盖率 运行器 QA 工具 基于 Node 的 CMS 框架 模板引擎 数据可视化 编辑器 UI 输入 日历 选择 文件上 ...

随机推荐

  1. ubuntu安装过程中遇到的一些问题及解决办法。

    由于ubuntu与win10的双系统安装过程百度一下就有很多,在此不再赘述. (其实主要是忘记拍照片了,我一个菜鸡说得肯定也没有那些大佬们好,但网上确实也很多哈,加上有中文引导安装,问题不大.) 此篇 ...

  2. js 防抖、截流

    突发奇想,在触发事件的时候,一些会频繁触发的事件会不会造成资源的浪费或者大量的计算造成页面卡顿,比如onresize,onscroll,onmousemove等事件. 然后就引出了一个新知识点:防抖. ...

  3. git 使用详解(6)—— 3种撤消操作

    接下来,我们会介绍一些基本的撤消操作相关的命令.请注意,有些操作并不总是可以撤消的,所以请务必谨慎小心,一旦失误,就有可能丢失部分工作成果. 修改最后一次提交 git commit --amend 有 ...

  4. JavaScript2 基础

    运算符 赋值运算符  用于给变量赋值. y=5;/z=2; 算术运算符  即算数符号,是基本算数运算.+ 加 / - 减/ * 乘/ / 除/ % 取余数/ ++ 自增(y++先赋值再自增/++y先自 ...

  5. [TimLinux] CSS 纯CSS实现动画展开/收起功能

    内容转自CSS世界,理解之后进行了简化,简化后代码: <!DOCTYPE html> <html> <head> <meta charset=utf-8 /& ...

  6. [TimLinux] JavaScript BOM浏览器对象模型

    1. 简介 ECMAScript是JavaScript的核心,但是如果要在WEB中使用JavaScript,那么BOM则无疑才是真的的核心.BOM提供了很多对象,用于访问浏览器的功能,这些功能与任何网 ...

  7. Remember the Word (UVA-1402)

    Neal is very curious about combinatorial problems, and now here comes a problem about words. Knowing ...

  8. 学习Java必看的Java书籍(高清中文最新版附下载链接)

    今年下半年,我正式系统地学习Java(之前学习C++).最近把学习Java所用到的书籍整理了一下,分享出来,希望对正在学习或准备学习Java的人有一定的帮助. 关于Java的学习路线,和IDE工具In ...

  9. Dubbo 2.7新特性之异步化改造

    这是why技术的第1篇原创文章 我与Dubbo的二三事 我是2016年毕业的,在我毕业之前,我在学校里面学到的框架都是SSH,即struts+spring+hibernate,是的你没有看错,在大学里 ...

  10. Altium PCB二维码Logo设计(转 crazybingo)

    Altium PCB二维码Logo设计 每次设计PCB的时候,都会在空白部分放Logo上去,一来板卡显得更充实,二来更有成就感一些... 今天突然想着...这两年二维码越来越火,火到快爆发,不如在板卡 ...