ECMAScript 5 也稱爲 ES5 和 ECMAScript 2009。數組
這些是 2009 年發佈的新特性:瀏覽器
「use strict」 定義 JavaScript 代碼應該以「嚴格模式」執行。安全
例如,使用嚴格模式,不能使用未聲明的變量。服務器
您能夠在全部程序中使用嚴格模式。它能夠幫助您編寫更清晰的代碼,例如阻止您使用未聲明的變量。函數
「use strict」 只是一個字符串表達式。舊瀏覽器若是不理解它們就不會拋出錯誤。ui
String.trim() 刪除字符串兩端的空白字符。this
var str = " Hello World! "; alert(str.trim());
isArray() 方法檢查對象是否爲數組。spa
function myFunction() { var fruits = ["Banana", "Orange", "Apple", "Mango"]; var x = document.getElementById("demo"); x.innerHTML = Array.isArray(fruits); }
forEach() 方法爲每一個數組元素調用一次函數。code
var txt = ""; var numbers = [45, 4, 9, 16, 25]; numbers.forEach(myFunction); function myFunction(value) { txt = txt + value + "<br>"; }
這個例子給每一個數組值乘以 2:對象
var numbers1 = [45, 4, 9, 16, 25]; var numbers2 = numbers1.map(myFunction); function myFunction(value) { return value * 2; }
此例用值大於 18 的元素建立一個新數組:
var numbers = [45, 4, 9, 16, 25]; var over18 = numbers.filter(myFunction); function myFunction(value) { return value > 18; }
這個例子肯定數組中全部數的總和:
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; }
這個例子檢查是否全部值都超過 18:
var numbers = [45, 4, 9, 16, 25]; var allOver18 = numbers.every(myFunction); function myFunction(value) { return value > 18; }
這個例子檢查某些值是否超過 18:
var numbers = [45, 4, 9, 16, 25]; var allOver18 = numbers.some(myFunction); function myFunction(value) { return value > 18; }
檢索數組中的某個元素值並返回其位置:
var fruits = ["Banana", "Orange", "Apple", "Mango"]; var a = fruits.indexOf("Apple");
Array.lastIndexOf() 與 Array.indexOf() 相似,可是從數組結尾處開始檢索。
var fruits = ["Banana", "Orange", "Apple", "Mango"]; var a = fruits.lastIndexOf("Apple");
JSON 的一個常見用途是從 Web 服務器接收數據。
想象一下,您從Web服務器收到這條文本字符串:
'{"name":"Bill", "age":62, "city":"Seatle"}'
JavaScript 函數 JSON.parse() 用於將文本轉換爲 JavaScript 對象:
var obj = JSON.parse('{"name":"Bill", "age":62, "city":"Seatle"}');
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() 返回自零日期(1970 年 1 月 1 日 00:00:00:00)以來的毫秒數。
var timInMSs = Date.now();
Date.now() 的返回與在 Date 對象上執行 getTime() 的結果相同。
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
對字符串的屬性訪問可能有點不可預測。
ECMAScript 5 容許在對象和數組定義中使用尾隨逗號:
person = { firstName: "Bill", lastName: " Gates", age: 62, }
points = [ 1, 5, 10, 25, 40, 100, ];
Internet Explorer 8 將崩潰。
JSON 不容許使用尾隨逗號。
// 容許: var person = '{"firstName":"Bill", "lastName":"Gates", "age":62}' JSON.parse(person) // 不容許: var person = '{"firstName":"Bill", "lastName":"Gates", "age":62,}' JSON.parse(person)
// 容許: 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"}