前端學習之ES6-對象的擴展筆記

屬性的簡潔表示法

 ES6允許直接寫入變量和函數,作為對象的屬性和方法;這種寫法同樣可以應用于函數返回值

 var birth = '2000/01/01'; 
  var Person = { 
  name: '張三', 
  birth,    //等同于birth: birth 
  // 等同于hello: function ()... 
  hello() { 
          console.log('我的名字是', this.name); 
          }
  };
function getPerson() {
   var name = 'LSJ';
   var age = 18;
   return {name,  age};
}
getPoint()// {name: 'LSJ', age:18}
  • ps: CommonJS API定義很多普通應用程序(主要指非瀏覽器的應用)使用的API,從而填補了這個空白。它的終極目標是提供一個類似Python,Ruby和Java標 準庫。這樣的話,開發(fā)者可以使用CommonJS API編寫應用程序,然后這些應用可以運行在不同的JavaScript解釋器和不同的主機環(huán)境中。

屬性名表達式

JavaScript語言定義對象的屬性,有兩種方法:
  • 直接用標識符作為屬性名 obj.foo = true;
  • 用表達式作為屬性名 obj['a' + 'bc'] = 123;,這時要將表達式放在方括號之內。
表達式還可以作為方法名
`let obj = { 
['h'+'ello']() { return 'hi'; }
 };
obj.hello() // hi`

方法的name屬性

函數的`name`屬性,返回函數名。對象方法也是函數,因此也有`name`屬性。
  • 有兩種特殊情況:bind方法創(chuàng)造的函數,name屬性返回“bound”加上原函數的名字;Function構造函數創(chuàng)造的函數,name屬性返回“anonymous”。
(new Function()).name // "anonymous"
var doSomething = function() {  // ...};
doSomething.bind().name // "bound doSomething"
  • 如果對象的方法是一個Symbol值,那么name屬性返回的是這個Symbol值的描述。

Object.is()

ES5比較兩個值是否相等,只有兩個運算符:相等運算符(==)和嚴格相等運算符(===)。它們都有缺點,前者會自動轉換數據類型,后者的NaN不等于自身,以及+0等于-0。JavaScript缺乏一種運算,在所有環(huán)境中,只要兩個值是一樣的,它們就應該相等。

ES6提出“Same-value equality”(同值相等)算法,用來解決這個問題。Object.is就是部署這個算法的新方法。它用來比較兩個值是否嚴格相等,與嚴格比較運算符(===)的行為基本一致,并克服了上述問題。

Object.assign()

Object.assign方法用于對象的合并,將源對象(source)的所有可枚舉屬性,復制到目標對象(target)。

Object.assign方法至少需要兩個對象作為參數,第一個參數是目標對象,后面的參數都是源對象。只要有一個參數不是對象,就會拋出TypeError錯誤。

注意,如果目標對象與源對象有同名屬性,或多個源對象有同名屬性,則后面的屬性會覆蓋前面的屬性。
var target = { a: 1, b: 1 };
var source1 = { b: 2, c: 2 };
var source2 = { c: 3 };
Object.assign(target, source1, source2);
target // {a:1, b:2, c:3}
屬性名為Symbol值的屬性,也會被Object.assign拷貝。

Object.assign只拷貝自身屬性,不可枚舉的屬性(enumerable為false)和繼承的屬性不會被拷貝。

對象的屬性特征需要學習一下(js設計那本書)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容