声明对象

  1. let obj = {'name': 'dog', 'age':18}
  2. let obj = new Object({'name': 'dog'})
  • 对象是无序的键值对的集合
  • 属性名是字符串,不是标识符可包含任意字符
  • 属性名的引号可以省略,省略后只能按标识符的格式写
  • 属性名的引号省略了,也还是字符串
  • 属性名会自动变成字符串

    1. let obj = {
    2. 1:true,
    3. 1e2: true,
    4. .123: true,
    5. 0xFF: true,
    6. };
    7. Object.keys(obj); // ["1", "100", "255", "0.123"]
  • 使用变量做属性名

    1. let n = 'name';
    2. let obj = {n: 'person'}; // 属性名为'n'
    3. let obj = {[n]: 'person'}; // 属性名为'name', []会自动对里面的变量求值
  • 通过 Object.create() 创建对象

    1. // 创建对象:Object.create(原型)
    2. var person = Object.create(Person.prototype);
    3. var obj = Object.create(null); //创建没有原型的对象
  • 通过构造函数创建对象

    增删改查

    1. let person = {
    2. name: 'lovely',
    3. age: 18,
    4. weight: 45kg,
    5. sleep: function() {
    6. console.log('sleeping!');
    7. },
    8. eat: function() {
    9. console.log('eating!');
    10. }
    11. }
    12. // 增加属性:
    13. person.hobby = 'play'
    14. // 增加方法
    15. person.happy = function() {
    16. console.log('happy every day');
    17. }
    18. // 给对象的原型增加方法
    19. person.prototype.run = function() {
    20. console.log('keep running');
    21. }
    22. // 改属性:
    23. person.age = 2;
    24. // 删除属性:
    25. delete person.age;
    26. delete psrson['weight'];
    27. // 查
    28. Object.keys(person);
    29. console.dir(obj);
    30. person['name'];
    31. person.name; // 这里的age是字符串
    32. person[name]; // 这里的age是变量

枚举,遍历

  • ‘name’ in obj 和 obj.hasOwnProperty(‘name’) 的区别
    • ‘name’ in obj: 判断 obj 里是否有属性’name’
    • obj.hasOwnProperty(‘name’) :判断属性 ‘name’ 是 obj 本身的还是原型中的
  • 使用 for .. in .. 遍历对象

    1. var obj = {
    2. name: 'person',
    3. age: '18',
    4. hobby: 'sleep',
    5. __proto__: {
    6. lastName: 'zao'
    7. }
    8. }
    9. // obj.name 与 obj['name']一样
    10. for (var key in obj) {
    11. if(obj.hasOwnProperty(key)) { //判断属性是否是自己的,而不是原型上的
    12. console.log(obj[key]);
    13. }
    14. }
    15. 'age' in obj; // 判断obj是否能访问age属性(包括自己的和原型的)
    16. A instanceof B; // 对象A是否属于class B,即对象A的原效链上是否有B
  • 使用 Object.keys(obj), Object.values(obj) 遍历对象

    1. console.log(Object.keys(obj)); // ["name", "age", "hobby"]
    2. console.log(Object.values(obj)); // ["person", "18", "sleep"]
    3. Object.keys(obj).forEach(key => console.log(key, obj[key]));
  • Object.getOwnPropertyNames(obj).forEach()

    1. Object.getOwnPropertyNames(obj).forEach(key => console.log(key,obj[key]));

    包装类

  • 使得基本类型可以像对象一样操作

  • undefined, null 没有安装类
    1. var num = new Number(123);
    2. var str = new String('abcd');
    3. var bool = Boolean();