回味JS(三)JS的内置对象

2019-05-29  本文已影响0人  ArmorVon

1. Object对象

判断变量是否为对象的小技巧

如果Object方法的参数是一个对象,它总是返回该对象,即不用转换,所以可以利用这一点来判断一个变量是否为对象:

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

isObject([]) // true

Object.keys()和Object.getOwnPropertyNames()有什么区别?

例如:

var a = ['Hello', 'World'];

Object.keys(a) // ["0", "1"]
Object.getOwnPropertyNames(a) // ["0", "1", "length"]

使用toString判断数据类型

Object的toString方法,作用是返回一个对象的字符串形式,默认情况下返回类型字符串,因此可以用来判断一个值的类型。

数组、字符串、函数、Date 对象都分别部署了自定义的toString方法,覆盖了Object.prototype.toString方法,所以通常使用Object.prototype.toString.call(value)来判断值的类型。

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

tips: 简单封装一个判断类型的函数:

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

2. 属性描述对象

Object.defineProperty() 的作用?它接受哪几个参数?

Object.defineProperty()方法允许通过属性描述对象,定义或修改一个属性,然后返回修改后的对象,如果属性已经存在,Object.defineProperty()方法相当于更新该属性的属性描述对象。

Object.defineProperty方法接受三个参数,依次如下。

  1. object:属性所在的对象
  2. propertyName:字符串,表示属性名
  3. attributesObject:属性描述对象

其中第三个参数是属性描述对象,Object.defineProperty()和Object.defineProperties()参数里面的属性描述对象,writable、configurable、enumerable这三个属性的默认值都为false

注意: 一旦定义了取值函数get(或存值函数set),就不能将writable属性设为true,或者同时定义value属性,否则会报错。

3. Array对象

为什么不建议使用new Array的方式生成新数组?

Array构造函数有一个很大的缺陷,就是不同的参数,会导致它的行为不一致

// 单个正整数参数,表示返回的新数组的长度
var arr = new Array(1);
console.log(arr); //[empty]

// 非正整数的数值作为参数,会报错
new Array(3.2) // RangeError: Invalid array length

// 多参数时,所有参数都是返回的新数组的成员,该方式是正常情况
new Array(1, 2) // [1, 2]

数组中有哪些用于遍历的方法?

  1. map
    • 返回新数组
    • 回调函数接受三个参数:当前成员、当前位置和数组本身
    • map方法不会跳过undefined和null,但是会跳过空位
    • 可以接受第二个参数,用来绑定回调函数内部的this变量
  2. forEach
    • 不返回值,只用来操作数据
    • 回调函数接受三个参数:当前值、当前位置、整个数组
    • forEach方法不会跳过undefined和null,但会跳过空位
    • 可以接受第二个参数,用来绑定回调函数内部的this变量
    • forEach方法无法中断执行,总是会将所有成员遍历完
  3. filter
    • 过滤数组成员,满足条件的成员组成一个新数组返回
    • 回调函数接受三个参数:当前成员,当前位置和整个数组
    • 可以接受第二个参数,用来绑定参数函数内部的this变量
  4. some, every
    • 返回一个布尔值
    • 可以接受第二个参数,用来绑定参数函数内部的this变量
  5. reduce,reduceRight
    • 返回一个值,依次处理数组的每个成员,最终累计为一个值
    • 回调函数接受以下四个参数:累积变量(默认数组第一项),当前变量(默认数组第二项),当前位置(从0开始)原数组
上一篇下一篇

猜你喜欢

热点阅读