JavaScript基础复习4-标准库

Object对象

JavaScript原生提供的Object.其他对象都继承自Object对象.

Object对象的原生方法分成两类:Object本身的方法与Object的实例方法。

  • 本身的方法: 定义在Object对象的方法

    Object.print = function (o) { console.log(o) };

  • 实例方法: 定义在Object.prototype 原型的方法, 可以被实例直接使用

Object()

本身是一个函数, 如果参数是空, 则返回空对象;

  • Object函数的参数是各种原始类型的值,转换成对象就是原始类型值对应的包装对象。

  • 如果Object方法的参数是一个对象,它总是返回该对象,即不用转换。

    利用这一点,可以写一个判断变量是否为对象的函数。

    function isObjcet(value){
        if (value === Object(value)){
            return true;
        } else{
            return false
        }
    }
    isObject([]); // true
    isObject(false); // false

验证实例是否是构造函数的实例 - instanceof

instanceof运算符用来验证,一个对象是否为指定的构造函数的实例。obj instanceof Object返回true,就表示obj对象是Object的实例。

Object 构造函数

Object构造函数的首要用途,是直接通过它来生成新对象。

注意,通过var obj = new Object()的写法生成新对象,与字面量的写法var obj = {}是等价的。或者说,后者只是前者的一种简便写法。

Object 和 new Object

用法相似,但两者作用完全不同, Object(value)是将value转化为对象, new Object(value),则表示生成一个对象, 值是value;

Object的静态方法

所谓“静态方法”,是指部署在Object对象自身的方法。

Object.keys()Object.getOwnPropretyNames()

都是用来遍历对象属性的. 括号中是要遍历的对象, 返回一个数组,包含对象自身的属性. 一般来说二者返回的是一样的,只有涉及不可枚举对象时, keys()只返回可以枚举的, 另一个还返回不可枚举的.

一般使用keys(), 获取属性个数可以Object.keys().length

Object的实例方法

定义在Object.prototype的方法,可以被每个实例直接使用的方法.

Object.prototype.valueOf

valueOf方法的作用是返回一个对象的“值”,默认情况下返回对象本身。valueOf方法的主要用途
是,JavaScript 自动类型转换时会默认调用这个方法.

Object.prototype.toString

toString方法的作用是返回一个对象的字符串形式,默认情况下返回类型字符串。

对于一个对象调用toString方法,会返回字符串[object Object],该字符串说明对象的类型。

数组、字符串、函数、Date 对象都分别部署了自定义的toString方法,覆盖了Object.prototype.toString方法。

[1, 2, 3].toString() // "1,2,3"

'123'.toString() // "123"

(function () {
  return 123;
}).toString()
// "function () {
//   return 123;
// }"

(new Date()).toString()
// "Tue May 10 2016 09:11:31 GMT+0800 (CST)"

由此可见, 为了防止自定义toString属性, 覆盖掉Object.prototype.toString方法,所以为了得到类型字符串,最好直接使用Object.prototype.toString方法。通过函数的call方法,可以在任意值上调用这个方法,帮助我们判断这个值的类型。

Object.prototype.toString.call(value)

上面的方法,不同数据类型的Object.prototype.toString方法返回值如下。

  • 数值:返回[object Number]
  • 字符串:返回[object String]
  • 布尔值:返回[object Boolean]
  • undefined:返回[object Undefined]
  • null:返回[object Null]
  • 数组:返回[object Array]
  • arguments 对象:返回[object Arguments]
  • 函数:返回[object Function]
  • Error 对象:返回[object Error]
  • Date 对象:返回[object Date]
  • RegExp 对象:返回[object RegExp]
  • 其他对象:返回[object Object]

这就是说,Object.prototype.toString可以看出一个值到底是什么类型。

利用这个特性,可以写出一个比typeof运算符更准确的类型判断函数。

var type = function (o){
  var s = Object.prototype.toString.call(o);
  return s.match(/\[object (.*?)\]/)[1].toLowerCase();
};

type({}); // "object"
type([]); // "array"
type(5); // "number"
type(null); // "null"
type(); // "undefined"
type(/abcd/); // "regex"
type(new Date()); // "date"

详见


   转载规则


《JavaScript基础复习4-标准库》 lttztt 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
JavaScript基础复习5-属性描述对象 JavaScript基础复习5-属性描述对象
如果属性已经存在,Object.defineProperty()方法相当于更新该属性的属性描述对象。 如果一次性定义或修改多个属性,可以使用Object.defineProperties()方法。 注意,一旦定义了取值函数get(或存
2018-11-05
下一篇 
html的lang到底怎么写 html的lang到底怎么写
单一的 zh 和 zh-CN 均属于废弃用法。 如何标记的例子: 简体中文页面:html lang=zh-cmn-Hans 繁体中文页面:html lang=zh-cmn-Hant 英语页面:html lang=en
2018-11-02 lttztt
  目录