1. Object.keys()
Object.keys
返回一个所有元素为字符串的数组,其元素来自于从给定的object
上面可直接枚举的属性。这些属性的顺序与手动遍历该对象属性时的一致。
// 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
循环出的是valuefor...of
是ES6新引入的特性。修复了ES5引入的for...in
的不足for...of
不能循环普通的对象,需要通过和Object.keys()
搭配使用
注释:
- for...of循环不会循环对象的key,只会循环出数组的value,因此for...of不能循环遍历普通对象,对普通对象的属性遍历推荐使用for...in。
- 对象的所有键名都是字符串(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
。
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