ECMAScript 5 也稱為 ES5 和 ECMAScript 2009。 ECMAScript 5 特性 這些是 2009 年發佈的新特性: "use strict" 指令 String.trim() Array.isArray() Array.forEach() Array.map() Ar ...
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"}