摘要:學習筆記的使用其他特性用來聲明常量,聲明時必須初始化聲明的常量不能重新賦值對于基本類型,值不能改變對于引用類型,存儲的是一個地址,地址不能變,但對象本身是可變的如果不想后續更改對象,使用文檔用來凍結一個對象。該方法返回被凍結的對象。
let命令有的幾個特性,const也有。ES6學習筆記:let的使用
其他特性:
用來聲明常量,聲明時必須初始化
const PI;//"SyntaxError: Missing initializer in const declaration
聲明的常量不能重新賦值
//對于基本類型,值不能改變 const PI = 3.1415926; PI = 3;//"TypeError: Assignment to constant variable.
//對于引用類型, const obj = {x: 0}; obj = {y: "123"};//"TypeError: Assignment to constant variable. obj.x = "123";//obj存儲的是一個地址,地址不能變,但對象本身是可變的
如果不想后續更改對象,使用Object.freeze
Object.freeze MDN文檔
用來凍結一個對象。凍結對象是指那些不能添加新的屬性,不能修改已有屬性的值,不能刪除已有屬性,以及不能修改已有屬性的可枚舉性、可配置性、可寫性的對象。也就是說,這個對象永遠是不可變的。該方法返回被凍結的對象。
const obj = Object.freeze({k:{}}); // 常規模式時,下面一行不起作用; // 嚴格模式時,該行會報錯 obj.prop = 123;//TypeError: Can"t add property prop, object is not extensible obj.k = {x: 123};//"TypeError: Cannot assign to read only property "k" of object "#
上面的例子我們又發現一個問題:如果屬性值是對象,還是只能凍結該對象的地址,而內容還是可以進行修改。
//使用遞歸對屬性進行遍歷并凍結 var constantize = function(obj){ Object.freeze(obj); Object.keys(obj).forEach( function(key,value){ if ( typeof obj[key] === "object" ) { constantize( obj[key] ); } }); };
涉及到Object對象的幾個方法,總結下
Object.keys MDN文檔
返回一個由給定對象的所有可枚舉自身屬性的屬性名組成的數組,數組中屬性名的排列順序和使用for-in循環遍歷該對象時返回的順序一致(兩者的主要區別是 for-in 還會遍歷出一個對象從其原型鏈上繼承到的可枚舉屬性)
var arr = ["a", "b", "c"]; alert(Object.keys(arr)); // 彈出"0,1,2",數組的下標 var obj = { 0 : "a", 1 : "b", 2 : "c"}; alert(Object.keys(obj)); // 彈出"0,1,2" //enumerable默認為false, 也就是說getFoo是個不可枚舉的屬性 var my_obj = Object.create({}, { getFoo : { value : function () { return this.foo } } }); my_obj.foo = 1; alert(Object.keys(my_obj)); // 只彈出foo //手動設置getFoo可枚舉 var my_obj = Object.create({}, { getFoo : { value : function () { return this.foo }, enumerable: true } });
如果想使用Object對象提供的方法,還需要注意下瀏覽器的兼容問題。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/107008.html
摘要:另外對于已經聲明的變量進行解構賦值時,要非常小心。因此在行首加,將其強制轉化為表達式執行。由于和無法轉為對象,所以對它們進行解構賦值,都會報錯。 let和const let和const是es6新增的兩個變量聲明關鍵字,與var的不同點在于: (1)let和const都是塊級作用域,在{}內有效,這點在for循環中非常有用,只在循環體內有效。var為函數作用域。 (2)使用let和con...
摘要:考慮到環境導致的行為差異太大,應該避免在塊級作用域內聲明函數。函數聲明語句函數表達式循環循環還有一個特別之處,就是循環語句部分是一個父作用域,而循環體內部是一個單獨的子作用域。聲明一個只讀的常量。 es6學習筆記-let,const和塊級作用域_v1.0 塊級作用域 javascript 原來是沒有塊級作用域的,只有全局作用域和函數作用域 例子1 因為沒有塊級作用域,所以每次的i都是一...
摘要:一新增了命令和一樣都是用來聲明標量,但所聲明的變量只在聲明的代碼塊內及聲明之后有效命令適合在循環中使用在循環內有效在全局內有效命令暫時性死區大括號中的使用了聲明,所以在大括號中暫時只能在聲明之后有效不允許在同一作用域內重復聲明變量,因此不能 一、ES6新增了let命令 let 和 var 一樣都是用來聲明標量,但let所聲明的變量只在【聲明的代碼塊內】及【聲明之后】有效 { c...
摘要:對比常量聲明與聲明常量聲明與聲明,都是塊級聲明。最后一點全局塊級綁定與不同于的另一個方面是在全局作用域上的表現。塊級綁定新的最佳實踐在的發展階段,被廣泛認可的變量聲明方式是默認情況下應當使用而不是。總結與塊級綁定將詞法作用域引入。 var變量與變量提升 使用var關鍵字聲明的變量,無論其實際聲明位置在何處,都會被視為聲明于所在函數的頂部(如果聲明不在任意函數內,則被視為在全局作用域的頂...
閱讀 1751·2021-09-23 11:34
閱讀 2472·2021-09-22 15:45
閱讀 12820·2021-09-22 15:07
閱讀 2221·2021-09-02 15:40
閱讀 4107·2021-07-29 14:48
閱讀 1071·2019-08-30 15:55
閱讀 3245·2019-08-30 15:55
閱讀 2190·2019-08-30 15:55