日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ES5、ES6、ES7、ES8

發布時間:2024/8/1 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ES5、ES6、ES7、ES8 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ES5、ES6、ES7、ES8

ES5

  • Strict Mode
    在JS文件或是函數的頂部添加"use strict"即可啟用嚴格模式。
  • "use strict"; function strict() {"use strict"; }

    在嚴格模式下運行腳本,不少導致提醒或bug行為的事情會拋出錯誤,例如:

    (1)變量聲明必須用var

    在常規模式下,如果我們聲明一個變量時省略了var關鍵字,解析引擎會自動將其聲明為全局變量,但在嚴格模式下,會直接拋出異常,不會為我們轉為全局變量

    function strict() {'use strict';myVariable = 3; //Uncaught ReferenceError: myVariable is not defined }
    (2)禁止刪除變量和對象中不可刪除的屬性

    通過var聲明的變量是不可刪除的,在常規模式下,試圖刪除會靜默失敗,但在嚴格模式下會顯式拋出異常;同樣的,試圖刪除對象中不可刪除的屬性也會顯式報錯:

    'use strict'; var a = 3; delete a; //Uncaught SyntaxError: ...delete Object.prototype; //Uncaught TypeError: ...var animal = {}; Object.defineProperty(animal, 'name', { configurable: false, value: 'GOT' });delete animal.name; //Uncaught TypeError: ...
    (3) 禁止對象屬性重名

    常規模式下,如果我們在對象中定義重復的屬性,后定義的值會覆蓋先定義的那個,ES5的嚴格模式規定,對象中不允許定義重復的屬性,否則會顯式報錯。

    'use strict'; var animal = { name: 'BABY' name: 'HUA' }; console.log(person.name); // Uncaught SyntaxError: Unexpected identifier
    (4)禁止函數參數同名

    嚴格模式要求命名函數的參數必須唯一。

    'use strict'; var b = 0; function sum(a, a, c) { //Uncaught SyntaxError: ...return a + b + c; }console.log(sum(1, 2, 3)); // Uncaught SyntaxError: Duplicate parameter name not allowed in this context
    只能在腳本的頂級或者函數內部聲明函數。在if語句中聲明函數會報錯:
    'use strict'; if (true) {function show() {// ...} }
    (5)禁止使用八進制數字

    以0開頭的八進制數字常常會讓開發者迷惑,嚴格模式禁止以0開頭的八機制表示法,另外,ES6已經支持新的語法標準,八進制以0o來表示,這樣一來就與16進制的0x形成統一的語法格式

    'use strict'; var a = 017; //Uncaught SyntaxError: Octal literals are not allowed in strict mode.var b = 0o17; //ES6 Octal syntax: 8 + 7 = 15
    (6) 禁止使用with語句.
    'use strict';var name = 'GOT';var animal = getAminal();with(animal) { //Uncaught SyntaxError: Strict mode code may not include a with statementname = newName; }
    (7)強制為eval創建新作用域

    常規模式下,使用eval函數可能會影響當前作用域或全局作用域,給程序的運行結果帶來不確定性,嚴格模式為JavaScript程序創建了第三種作用域:eval作用域。eval函數中的字符串只能在eval作用域內運行,其結果不會影響外層作用域,下面這兩種形式都可以使eval在嚴格模式下運行

    'use strict'; function show() {eval("var x = 10"); alert(x); // Uncaught ReferenceError: x is not defined } show();
    (8)eval和arguments

    嚴格模式下,禁止使用eval和arguments作為標識符,也不允許讀寫他們的值;

    'use strict'; var eval = 19; // Uncaught SyntaxError: Unexpected eval or arguments in strict mode var arguments = 'hello';
    (9)抑制this

    非嚴格模式下,apply和call方法,null或undefined轉成全局對象;嚴格模式下,函數的this始終是指定的值;

    'use strict'; var a = 'hello'; function show() {alert(this.a); // Uncaught TypeError: Cannot read property 'a' of null } show.call(null);

    2. JSON對象

    JSON用于js原生對象和json字符串之間的轉換。

    JSON.parse(text [, reviver])

    JSON.parse接受文本(JSON格式)并轉換成一個ECMAScript值。將json字符串轉成js原生對象;

    var str = '{"result":true, "count":42}'; var jsonObj = JSON.parse(str); console.log(jsonObj); // {result: true, count: 42} console.log(typeof jsonObj); // object

    JSON.stringify()
    將一個js原生對象轉化為json字符串;

    var obj = { name: 'Heller', age: 14}; var jsonstr = JSON.stringify(obj); console.log(jsonstr); // {"name":"Heller","age":14} console.log(typeof jsonstr); //string

    4. Object對象方法擴展

    Object.defineProperty()
    Object.defineProperty(obj, prop, descriptor)
    descriptor:
    數據描述符:
    configurable: false,
    enumerable: false,
    value,
    writable: false
    存取描述符:
    configurable: false,
    enumerable: false,
    set: undefined,
    get: undefined
    默認情況下,使用 Object.defineProperty() 添加的屬性值(不是修改定義的屬性)是不可修改(immutable)的,不可枚舉的,不可刪除的

    var person = {}; Object.defineProperty(person, 'name', {value: 'Hee' }); console.log(person.name); // 'Hee' person.name = 'Arrow'; console.log(person.name); // 'Hee' , 因為writable默認是false,不可修改

    通過賦值操作添加的普通屬性是可枚舉的,在枚舉對象屬性時會被枚舉到(for…in 或 Object.keys 方法),可以改變這些屬性的值,也可以刪除這些屬性。
    configurable
    當且僅當該屬性的 configurable 鍵值為 true 時,該屬性的描述符才能夠被改變,同時該屬性也能從對應的對象上被刪除。
    默認為 false。
    enumerable
    當且僅當該屬性的 enumerable 鍵值為 true 時,該屬性才會出現在對象的枚舉屬性中。
    默認為 false。

    var person = {}; Object.defineProperty(person, 'name', {value: 'Hee',writable: true, // 修改屬性值,默認false,不可修改configurable: true, // 刪除屬性,默認false,不可刪除enumerable: true // 可枚舉(使用for...in或Object.keys()),默認false,不可枚舉 }); console.log(person.name); // 'Hee' person.name = 'Arrow'; console.log(person.name); // 'Arrow' , writable為true,可修改 for (var i in person) {console.log(i); // name, enumerable為true時才可以for..in } console.log(Object.keys(person)); // ["name"]

    5. 數組的擴展

    6. Function的擴展

    ES6

    let和const命令

    變量的解構賦值

    字符串的擴展

    正則的擴展

    數值的擴展

    函數的擴展

    數組的擴展

    對象的擴展

    Symbol

    Set和Map數據結構

    Proxy和Reflect

    Iterator和for…of…

    總結

    以上是生活随笔為你收集整理的ES5、ES6、ES7、ES8的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。