【JavaScript 漫游】【009】Object 对象方法总结

【JavaScript 漫游】【009】Object 对象方法总结_第1张图片
本文为【JavaScript 漫游】专栏的第 009 篇文章,对 ES5 规范中 Object 对象的方法进行了总结。

  1. Object 方法
  2. Object 构造函数
  3. Object 的静态方法,包括 Object.keysObject.getOwnPropertyNames 方法
  4. Object 的实例方法,包括 Object.prototype.valueOfObject.prototype.toStringObject.prototype.toLocaleStringObject.prototype.hasOwnProperty 方法

其中,Object.prototype.toString 方法可以用于判断数据类型,笔者计划在学习到 instanceof 方法后,再对 typeofObject.prototype.toStringinstanceof 方法对数据类型的判断进行统一总结。

Object 方法

Object 本身是一个函数,可以当作工具方法使用,将任意值转为对象。这个方法常用于保证某个值一定是对象。

如果参数为空、undefinednullObject 方法会返回一个空对象。

var obj = Object();
// 等同于
var obj = Object(undefined);
var obj = Object(null);
obj instanceof Object // true

如果参数是原始类型的值,Object 方法会返回其对应的包装对象的实例。

var obj = Object(1);
obj instanceof Object // true
obj instanceof Number // true
var obj = Object('foo');
obj instanceof Object // true
obj instanceof String // true
var obj = Object(true);
obj instanceof Object // true
obj instanceof Boolean // true

如果参数本来就是对象,那就不会发生转换。

Object 构造函数

Object 不仅可以当作工具函数使用,还可以当作构造函数使用,即前面可以使用 new 命令。

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

var obj = new Object();

Object 构造函数和 Object 工具函数的用法几乎一模一样。使用时接受一个参数,参数为空、null 或 undefined 时返回一个空对象,参数为原始类型的值时返回其对应的包装对象的实例,参数为对象时直接返回该对象。

但是它们两者的语义是不同的,Object(value) 表示将 value 转成一个对象,new Object(value) 则表示新生成一个对象,它的值是 value

Object 的静态方法

Object.keys 方法用于遍历对象自身的属性。

var obj = {
  p1: 123,
  p2: 456
};
Object.keys(obj) // ["p1", "p2"]

Object.getOwnPropertyNames 方法同样用于遍历对象自身的属性。

var obj = {
  p1: 123,
  p2: 456
};
Object.getOwnPropertyNames(obj) // ["p1", "p2"]

对于一般的对象来说,Object.keys 方法和 Object.getOwnPropertyNames 返回的结果是一样的。只有涉及不可枚举属性时,才会有不一样的结果。Object.keys 方法只返回可枚举的属性,Object.getOwnPropertyNames 方法还返回不可枚举的属性名。

var a = ['Hello', 'World'];
Object.keys(a) // ["0", "1"]
Object.getOwnPropertyNames(a) // ["0", "1", "length"]

除了这两个方法,Object 还有不少其他静态方法,笔者会在后面进行记录。

Object 的实例方法

Object 实例对象的方法,主要有以下六个。

  • Object.prototype.valueOf 方法:返回当前对象对应的值
  • Object.prototype.toString 方法:返回当前对象对应的字符串形式
  • Object.prototype.toLocaleString 方法:返回当前对象对应的本地字符串形式
  • Object.prototype.hasOwnProperty 方法:判断某个属性是否为当前对象自身的属性,还是继承自原型对象的属性
  • Object.prototye.isPrototypeOf 方法:判断当前对象是否为另一个对象的原型
  • Object.prototype.propertyIsEnumerable 方法:判断某个属性是否可枚举

valueOf 方法返回对象的值,默认是返回对象本身。它可以被重写,重写的 valueOf 方法会覆盖 Object.prototype.valueOf 方法。

var obj = new Object();
obj.valueOf = function () {
  return 2;
};
1 + obj // 3

toString 方法返回对象的字符串形式,默认返回类型字符串。它同样可以被重写,像 ArrayDate 等对象都有重写 toString 方法。

var o1 = new Object();
o1.toString() // "[object Object]"
var o2 = {a:1};
o2.toString() // "[object Object]"

var obj = new Object();
obj.toString = function () {
  return 'hello';
};
obj + ' ' + 'world' // "hello world"

[1, 2, 3].toString() // "1,2,3"
'123'.toString() // "123"
(function () {
  return 123;
}).toString()
// "function () {
//   return 123;
// }"
(new Date()).toString()
// 'Sat Feb 03 2024 14:31:39 GMT+0800 (中国标准时间)'

toLocaleString 方法与 toString 的返回结果相同,也是返回一个值的字符串形式。这个方法的主要作用是流出一个接口,让各种不同的对象实现自己版本的 toLocalString,用来返回针对某些地域的特定的值。

var person = {
  toString: function () {
    return 'Henry Norman Bethune';
  },
  toLocaleString: function () {
    return '白求恩';
  }
};
person.toString() // Henry Norman Bethune
person.toLocaleString() // 白求恩

hasOwnProperty 方法接受一个字符串作为参数,返回一个布尔值,表示该实例对象自身是否具有该属性。

var obj = {
  p: 123
};
obj.hasOwnProperty('p') // true
obj.hasOwnProperty('toString') // false

你可能感兴趣的:(JavaScript,漫游,javascript,前端)