手记

You Don't Know JS笔记一 :js对象

> [You Don't Know JS ](https://book.douban.com/subject/25883834/)笔记


# 一、类型

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

* string

* number

* boolean

* null

* undifined

* object

ps: typeof  null  时会返回"object",这是语言的一个bug.


# 二、内置对象

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

* **String**

* Number

* Boolean

* Object

* Function

* **Array**

* Data

* **RegExp**

* Error

```javascipt

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

```

三、复制对象

```javascript

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,这样会由于循环引用导致死循环。

```深复制方法```:

```javascript

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

```

```浅复制方法```:

```javascript

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

```

四、属性描述符

```javascript

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

```javascript

 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

```


0人推荐
随时随地看视频
慕课网APP