You Don't Know JS笔记(二):对象

2019-12-30  本文已影响0人  loserwang_3030

You Don't Know JS 笔记

一、类型

javascript一共有六种主要数据类型:

二、内置对象

Javascript中还有一些对象子类型,通常被称为内置对象:

var  strPrimitive = "I am a string";
typedef strPrimitive ; //"string"
strPrimitive instanceof String ; //false

var strObject = new string("I am a string");
typeof strObject;      // "object"
strObject instanceof String; // true

三、复制对象

function anotherFunction(){  /*... */}
var anotherObject = {
   c: true;
}
var anotherArray = [];
var myObject = {
       a : 2,
       b: another,
       c: anotherArray,
       d: anotherFunction
}
abotherArray.push(anotherObject, myObject);

复制分为浅拷贝深拷贝。对于浅拷贝,复制出的新对象中a的值会复制就对象中a的值,但是新对象中b,c,d三个属性其实只是三个引用,和旧对象中b,c,d引用的对象是一样的。对应深拷贝来说,除了复制myobject以外还会复制anotherObject和anotherArray. 。anotherArray又引用了anotherObject和myObject,这样会由于循环引用导致死循环。
深复制方法

var newObj = JSON.parse( JSON.stringify( someObj) );

浅复制方法

var newObj = Object.assign( {} , myObject);

四、属性描述符

var myObject = {
        a : 2
};
Object.getOwnPropetyDescriptor(myObject, "a");
//{
//   value: 2;
//   writable: true,
// enumerable: true,
//configurable: true
}
Object.setOwnPropetyDescriptor(myObject, "a",{
  value: 2;
  writable: true,
  numerable: true,
    configurable: true
}
  1. writable 决定是否可以修改属性的值
  2. configurable: 只要属性是可配置的,就可以使用defineProperty(...)方法来修改属性描述符。
    3.enumerable 枚举,如 for...in...,与for ... of ...

五. Getter 和 Setter

 var myObject = {
          get a(){
                  return 2;
        }
};
myObject.a = 3;
myObject.a; // 2
var myObject = {
      get a(){
          return this._a_;
      }
   set a(val){
          this._a_ = val * 2;
    }
};
myObject.a = 2;
myObject.a ; //4
上一篇 下一篇

猜你喜欢

热点阅读