JS方法比较

2021-09-13 10:08:31 浏览数 (1)

1. Object.keys()

Object.keys 返回一个所有元素为字符串的数组,其元素来自于从给定的object上面可直接枚举的属性。这些属性的顺序与手动遍历该对象属性时的一致。

代码语言:javascript复制
// simple array
var arr = ['a', 'b', 'c'];
console.log(Object.keys(arr)); // console: ['0', '1', '2']

// array like object
var obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.keys(obj)); // console: ['0', '1', '2']

// array like object with random key ordering
var anObj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.keys(anObj)); // console: ['2', '7', '100']

2. for of 和 for in的区别

  • 循环对象属性的时候,使用for...in;遍历数组的时候的时候使用for...of
  • for...in循环出的是key,for...of循环出的是value
  • for...of是ES6新引入的特性。修复了ES5引入的for...in的不足
  • for...of不能循环普通的对象,需要通过和Object.keys()搭配使用

注释:

  1. for...of循环不会循环对象的key,只会循环出数组的value,因此for...of不能循环遍历普通对象,对普通对象的属性遍历推荐使用for...in。
  2. 对象的所有键名都是字符串(ES6 又引入了 Symbol 值也可以作为键名),所以加不加引号都可以。如果键名是数值,会被自动转为字符串。

3. 将arguments强制转化为数组,还有几种方式

代码语言:javascript复制
function restParamaterFunction (x, y) {
    // arguments转为数组,截取从下标为2到最后的元素
    // slice()截取数组,包括 begin,不包括end
    var a = Array.prototype.slice.call(arguments, 2); 
    return (x   y) * a.length; 
}

console.log(restParamaterFunction(1, 2, 'hello', true, 7));
  • Array.prototype.slice.call(arguments)的作用为:强制转化arguments为数组格式,等价于[ ].slice.call(arguments)
  • 利用es6的Array.from():Array.from(arguments)
  • 利用es6的展开表达式:[...arguments]

4. substr 和 substring

  • substr第一个参数是开始截取的位置,第二个参数是截取的长度
  • substring第一个参数是开始截取的位置,第二个参数是截取的结束位置(不包含结束位置上的字符串)

5. find 和 findIndex

  • find 方法返回第一个满足条件的值,如果没有满足条件的值,find 会返回 undefined
  • findIndex 方法则返回这个值在数组里的索引,如果没有满足条件的值,而 1 findIndex 返回-1。

6. 判断对象存在某个属性 in 和 Object.prototype.hasOwnProperty.call()

  • 如果指定的属性在指定的对象或其原型链中,则in 运算符返回true
代码语言:javascript复制
const car = { make: 'Honda', model: 'Accord', year: 1998 };

console.log('make' in car);
// expected output: true

delete car.make;
if ('make' in car === false) {
  car.make = 'Suzuki';
}

console.log(car.make);
// expected output: "Suzuki"
  • Object.prototype.hasOwnProperty.call(obj, ele) 返回布尔值,判断 是否obj是否存在属性ele

0 人点赞