1

对象篇

Object简介

Object本身就是一个函数,可用于工具函数,也可以是用于构造对象的函数;其次Object可以添加属性和方法;方法又可以分为静态方法(定义在自身上的)和实例方法(定义在Object原型上的)

工具函数

  • 作为工具函数:参数可以是任意数据类型,将其转为对象;如果参数是空,null,undefined,则将其转换为空对象;如果参数是原始值,则返回包装类对象;如果参数是对象则返回原对象;

利用这一特点可以构建一个判断参数是否为对象的函数

function isObject(target) {
    return target === Object(target);
}

作为构造函数

  • 作为构造函数:生成一个对象,在下篇中着重介绍
var obj = new Object();  //{}

部分静态方法

  • Object的静态方法:
  • keys()与hasOwnPropertyNames(),其都是将对象的自身属性(不包含继承部分)以数组形式返回;其唯一的区别是:对于不可枚举的属性,keys不会输出,而hasOwnPropertyNames则会输出,例如数组又一个不可枚举的length属性

    var arr = [1, 2, 3];
    //var arr = new Object('123');  输出也是一样的
    Object.keys(arr);                   //['1', '2', '3']
    Object.getOwnPropertyNames(arr);    //['1', '2', '3', 'length']
  • 借keys方法可以输出对象属性的个数,Object.keys(obj).length
  • 剩余方法中篇记录

部分实例方法

  • Object的实例方法:

    • Object.prototype.valueOf()
      valueOf()返回对象的值,默认返回对象本身

      var obj = {a : 1};
      obj.valueOf() === obj;    //true
    • Object.prototype().toString()
      toString()返回类型字符串,默认值为[object Object],第一个object为类型,第二个是构造函数Object,我们可以利用第二个构造函数来判断数据的类型

      Object.prototype.toString.call([]);    //[object Array]
      Object.prototype.toString.call({});    //[object Object]
      Object.prototype.toString.call(123);   //[object Number]

      改进成函数:

      var type = function (target) {
              var str = Object.prototype.toString.call(target);
              return str.slice(8, -1);
      
      };
      ['Null', 'String', 'Boolean', 'Number', 
       'Undefined', 'Object', 'Function', 'Array', 'Window'
          , 'RegExp', 'Date'].forEach(function (elem) {
              type['is' + elem] = function (target) {
                  return type(target) == elem; 
              }
      });
      type.isNumber(123);    //true
      type.isObject({});     //true
    • Object.prototype.toLocaleString()与toString()结果一样,不同的是对于数组,日期,数字类型的的包装对象,返回地方化的字符串输出格式
    • Object.prototype.hasOwnProperty(),用于判断参数是否为对象的属性,返回一个布尔值

      var obj = {a : 1};
      obj.hasOwnProperty("a");   //true

Infinity
293 声望9 粉丝

学前端中,只想激情优雅的写代码