程序员Web前端之路让前端飞

关于Object

2017-03-30  本文已影响82人  ForeverYoung20

1. Array.isArray()

不使用该方法如何判断一个对象是否为数组?

插入介绍toString()方法的使用

    var o = {};
    var a ={};
    var b = {name:"张三"};

    o["a"] = "Test-a";
    o["b"] = "Test-b";
    o[b] = "Demo-b";
    o[a] = "Demo-a";

    console.log(o.a);      //Test-a
    console.log(o.b);      //Test-b
    console.log(o[a]);     //Demo-b
    console.log(o[b]);     //Demo-b
    console.log(o["a"]);   //Test-a
    console.log(o["b"]);   //Test-b

通过[]语法设置对象时的原则与注意点:

  1. []中存放的是字符串,那么这个字符串就直接作为key
  2. []中存放的不是字符串,那么就把[]中部分当成一个变量来处理,查找最近变量,获取其值
    2.1. 如果对应的值是字符串,那么就直接作为key
    2.2 如果对应的值是对象,那么就尝试把这个对象转换为字符串(toString)
if(Array.isArray != 'function'){
      Array.isArray = function(obj){
            return Object.prototype.toString.call(obj) == "[object Array]";
      }
}

2. instanceof

3. Object.prototype的部分方法属性

  1. constructor
  1. hasOwnProperty
  1. isPrototypeOf
  1. propertyIsEnumerable
  1. toLocaleString
  1. toString
  1. valueOf(获得这个对象对应的值。)

4. Object的静态成员

  1. Object.apply(借用其他对象的方法)
  1. Object.arguments(接收函数调用时候传入的实参)
  2. Object.assign(拷贝属性(一次性拷贝多个对象的属性))
  1. Object.bind(绑定对象调用方法,同call和apply几乎是一样。)
  2. Object.call(同apply方法)
  1. Object.caller(调用者,谁调用当前的方法,那么就指向谁)
  2. Object.create(创建对象并且该对象的原型对象)
  1. Object.getOwnPropertyDescriptor(获取对象中某个属性的描述信息(描述对象))
  1. Object.getOwnPropertyDescriptors(获得对象中多个属性的描述信息)
  2. Object.defineProperty(设置对象中某个属性的描述信息(对象))
- 第一个参数:对象
- 第二个参数:属性
- 第三个参数:描述对象

注意点:
如果是已经存在的属性,在设置时省略不写,默认值全部都是true
如果是新增加一个属性,在设置时省略不写,默认值全部都是false

var o = {
        name:"小明",
        des:"描述信息"
    }
//console.log(Object.getOwnPropertyDescriptor(o, "name"));
    Object.defineProperty(o, "name",{
        configurable:true,   //删除属性,以及配置
        writable:true,        //重写属性  修改
        enumerable:false,
        value:"明明"
    });
  1. Object.getOwnPropertyNames(获得对象所有的实例属性名(key),返回值是一个数组,不论该属性是否是可枚举的,都可以获取
  2. Object.keys(获取所有的key)
- 不包含原型对象中的key
- 不能返回不可枚举的属性
  1. Object.getPrototypeOf(获取原型对象)
  2. Object.preventExtensions|Object.isExtensible
- 禁止对象扩展(不能给对象添加属性或者是方法)
  1. Object.seal
- (密封对象(对象不能添加成员 + 不能删除成员))
  1. Object.freeze
- 冻结对象(对象不能添加成员 + 不能删除成员 + 不能修改成员)

5. 函数内部的隐藏参数

  1. this (指向一个对象)(函数的调用方法会影响到函数内部this的指向)
    • 对象.方法 (以对象的方法来进行调用) this->对象本身
    • 以普通函数方式进行调用 this->window(非严格模式)
    • 以构造函数的方式调用 this->新创建的对象
    • 函数上下文call|apply this->绑定的第一个参数
  2. arguments(一个类似于数组的结构,用来接收函数调用时传入的实参。)
    • arguments.length:函数调用时候实际参数的个数
    • 函数.length:函数期望的形参个数

6. callee 和 caller

  1. callee
    • 返回正在执行的函数本身的引用,它是arguments的一个属性
    • 常用于递归
    • arguments.callee.length是形参的长度,arguments.length是实参的长度。
  2. caller
    • 返回一个函数的引用,该函数调用了当前函数
    • 注意:window来调用函数的时候,caller指向null而不是window

7. with

注意点:

  1. this的指向->window
  2. 在{}中不能使用没有前缀的方式来添加成员,如果要添加成员必须要使用前缀
  3. 会破坏js代码的词法作用域,性能降低
  4. 严格模式下已经被禁止
上一篇 下一篇

猜你喜欢

热点阅读